diff --git a/pandora/backend/models.py b/pandora/backend/models.py
index e6510b78b..6c7f158d4 100644
--- a/pandora/backend/models.py
+++ b/pandora/backend/models.py
@@ -250,7 +250,7 @@ class Movie(models.Model):
def frame(self, position, width=128):
stream = self.streams.filter(profile=settings.VIDEO_PROFILE+'.webm')[0]
- path = os.path.join(settings.MEDIA_ROOT, 'frame', self.movieId, "%d"%width, "%s.jpg"%position)
+ path = os.path.join(settings.MEDIA_ROOT, movieid_path(self.movieId), 'frame', "%d"%width, "%s.jpg"%position)
if not os.path.exists(path):
extract.frame(stream.video.path, path, position, width)
return path
diff --git a/pandora/static/js/pandora.local.js b/pandora/static/js/pandora.local.js
index 9bab40685..32d6eae72 100644
--- a/pandora/static/js/pandora.local.js
+++ b/pandora/static/js/pandora.local.js
@@ -1,5 +1,6 @@
if(typeof(app.afterLaunch) == "undefined")
app.afterLaunch = [];
+
app.afterLaunch.push(function() {
if (typeof(OxFF) == 'undefined')
return;
@@ -55,7 +56,6 @@ app.afterLaunch.push(function() {
if(!cb)
return null;
return function(result) {
- Ox.print("you called upload", result);
var data = JSON.parse(result);
cb(data)
}
@@ -81,16 +81,20 @@ app.afterLaunch.push(function() {
}
},
loadVolumes: function() {
+ var _this = this;
Ox.print("load volumes");
var $section = new Ox.CollapsePanel({
id: 'volumes',
size: 'small',
title: 'Volumes'
});
+
app.$ui.sections.push($section);
app.local.volumes(function(data) {
Ox.print("got volumes", data);
+ var volumes = 0;
$.each(data, function(name, info) {
+ volumes ++;
Ox.print("add volume", name, info);
var status = info.available?"online":"offline";
var $line = $('
').css({ height: '20px' }).append(
@@ -112,7 +116,30 @@ app.afterLaunch.push(function() {
});
$section.$content.append($line);
});
+
+ add_button = new Ox.Button({
+ id: 'add_volume',
+ title: 'add',
+ width: 32
+ }).bindEvent('click', function(event, data) {
+ if(_this.api.setLocation("Volume "+(volumes+1))) _this.loadVolumes();
+ });
+ var update_button = new Ox.Button({
+ id: 'update_archive',
+ title: 'update',
+ width: 48
+ }).bindEvent('click', function(event, data) {
+ update_button.options({disabled: true});
+ _this.api.update(function() {
+ update_button.options({disabled: false});
+ })
+ });
app.$ui.lists.replaceWith(app.constructLists());
+ $section.find('.OxBar').append($('
')
+ .css({'text-align': 'right', 'margin': '2px'})
+ .append(update_button.$element)
+ .append(add_button.$element)
+ );
});
},
uploadVideos: function(ids, done, progress, total) {
@@ -164,8 +191,12 @@ app.afterLaunch.push(function() {
}
);
},
+ cancel: function(oshash) {
+ Ox.print('this function needs to be implemented: cancel ', oshash);
+ },
constructFileList: function(name) {
- var $list = new Ox.TextList({
+ var _this = this,
+ $list = new Ox.TextList({
columns: [
{
align: "left",
@@ -231,14 +262,25 @@ app.afterLaunch.push(function() {
width: 48
}).bindEvent('click', function(fid) { return function(event, data) {
Ox.print(videos[fid]);
+ $($('#'+fid).find('.OxCell')[1]).html(function(fid) {
+ var button = new Ox.Button({
+ title: 'Cancel',
+ width: 48
+ }).bindEvent('click', function(event, data) {
+ $.each(videos[fid], function(i, oshash) {
+ _this.cancel(oshash);
+ });
+ });
+ return button.$element;
+ }(fid));
//$($('#'+fid).find('.OxCell')[2]).html('extracting data...');
app.local.uploadVideos(
videos[fid],
function(data) {
$($('#'+fid).find('.OxCell')[2]).html('done');
},
- function(data) {
- $($('#'+fid).find('.OxCell')[2]).html(data.status +': '+ data.progress);
+ function(data) {
+ $($('#'+fid).find('.OxCell')[2]).html(parseInt(data.progress*100));
}
);
}}(i));