diff --git a/OxFF/bin/oxd.py b/OxFF/bin/oxd.py index f2b50ec..5c24060 100755 --- a/OxFF/bin/oxd.py +++ b/OxFF/bin/oxd.py @@ -90,6 +90,7 @@ def hash_prefix(h): return [h[:2], h[2:4], h[4:6], h[6:]] def run_command(cmd, timeout=25): + #print cmd p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) while timeout > 0: time.sleep(0.2) @@ -152,6 +153,7 @@ def extract_frame(video, target, position): framedir = tempfile.mkdtemp() os.chdir(framedir) cmd = ['mplayer', '-noautosub', video, '-ss', str(position), '-frames', '2', '-vo', 'png:z=9', '-ao', 'null'] + print cmd r = run_command(cmd) images = glob('%s/*.png' % framedir) if images: @@ -292,10 +294,10 @@ class Database(object): def __init__(self, db_conn): self.extract = Queue.Queue() - for i in range(2): - t = ExtractThread(self) - t.setDaemon(True) - t.start() + #for i in range(2): + t = ExtractThread(self) + t.setDaemon(True) + t.start() self.db_conn = db_conn conn, c = self.conn() @@ -459,7 +461,6 @@ class Database(object): self.derivative(oshash, frame_name, STATUS_FAILED) elif name.endswith('.webm'): profile = name[:-5] - print 'now lets go, are we having fun?' self.derivative(oshash, name, STATUS_EXTRACTING) if extract_video(f['path'], derivative['path'], profile, f['info']): self.derivative(oshash, name, STATUS_AVAILABLE) @@ -732,21 +733,30 @@ class OxControl(Resource): derivative = self.db.derivative(oshash, name) if derivative['status'] == STATUS_FAILED and retry: derivative = self.db.derivative(oshash, name, STATUS_NEW) - response['status'] = { + _STATUS = { STATUS_NEW: 'extracting', STATUS_EXTRACTING: 'extracting', STATUS_AVAILABLE: 'available', STATUS_FAILED: 'failed', - }.get(derivative['status'], 'extracting') + } + response['status'] = _STATUS.get(derivative['status'], 'extracting') if derivative['status'] == STATUS_NEW: self.db.extract.put((oshash, name)) if derivative['status'] == STATUS_EXTRACTING: + print "queue", self.db.extract.qsize() response['progress'] = enc_status.get(oshash, 0) files = [f['path'] for f in self.db.derivatives(oshash)] if media == 'frames': - response['frames'] = filter(lambda f: f.endswith('.png'), files) + status = derivative['status'] + for f in self.db.derivatives(oshash): + if f['path'].endswith('.png'): + status = min(status, f['status']) + if status == derivative['status']: + response['frames'] = filter(lambda f: f.endswith('.png'), files) + else: + response['status'] = _STATUS.get(status, 'extracting') else: response['video'] = filter(lambda f: f.endswith(media), files) if response['video']: response['video'] = response['video'][0] diff --git a/OxFF/components/OxFF.js b/OxFF/components/OxFF.js index 70b0d00..ec62f0b 100644 --- a/OxFF/components/OxFF.js +++ b/OxFF/components/OxFF.js @@ -129,8 +129,7 @@ OxFF.prototype = { //nsIOxFF version: "bzr", - access: function(request) { - if (typeof(request) == 'undefined') request = false; + access: function(callback) { var _this = this; var conn = oxff.getDB(); @@ -144,22 +143,28 @@ OxFF.prototype = { } q.finalize(); - if (request && !this._access) { + if (callback && !this._access) { var windowMediator = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator); var nsWindow = windowMediator.getMostRecentWindow("navigator:browser"); var box = nsWindow.gBrowser.getNotificationBox(); var buttons = [{ label : "Allow", accessKey : "A", - callback : function() { _this.permitAccess(); } + callback : function() { _this.permitAccess(); + if(callback) callback.callback(true); + } }, { label : "Deny", accessKey : "D", - callback : function() { _this.denyAccess(); } + callback : function() { _this.denyAccess(); + if(callback) callback.callback(false); + } }]; box.appendNotification("Do you wnat to allow "+_this._site+" to manage archvies on your computer", 'oxff_permission' , null , box.PRIORITY_INFO_MEDIUM , buttons); + } else if(callback) { + callback.callback(this._access); } return this._access; }, @@ -225,6 +230,7 @@ OxFF.prototype = { var formData = options.data; else var formData = {}; + var url = options.url; if (callback) diff --git a/OxFF/components/nsIOxFF.xpt b/OxFF/components/nsIOxFF.xpt index a3d6ad7..2ad3f08 100644 Binary files a/OxFF/components/nsIOxFF.xpt and b/OxFF/components/nsIOxFF.xpt differ diff --git a/src/nsIOxFF.idl b/src/nsIOxFF.idl index 575afc7..e797e57 100644 --- a/src/nsIOxFF.idl +++ b/src/nsIOxFF.idl @@ -9,6 +9,15 @@ interface oxICallback : nsISupports void callback(in AString result); }; +[function, scriptable, uuid(70015be1-2620-4682-ba3c-8024e7cb41ac)] +interface oxIBooleanCallback : nsISupports +{ + /** + * @param result boolean + */ + void callback(in boolean result); +}; + [scriptable, uuid(333280ed-2620-46ed-916d-b9c29e84d9ba)] interface nsIOxFF : nsISupports @@ -16,7 +25,7 @@ interface nsIOxFF : nsISupports readonly attribute string version; boolean login(in AString user); - boolean access([optional] in boolean request); + boolean access([optional] in oxIBooleanCallback callback); boolean logout(); string volumes(in oxICallback callback);