diff --git a/oml/changelog.py b/oml/changelog.py index 55dc853..3f89f47 100644 --- a/oml/changelog.py +++ b/oml/changelog.py @@ -36,14 +36,14 @@ def add_record(action, *args, **kwargs): revision = next_revision() data = [revision, timestamp, [action] + list(args)] - data = json.dumps(data, ensure_ascii=False).encode('utf-8') + data = json.dumps(data, ensure_ascii=False) path = changelog_path() if os.path.exists(path): - mode = 'ab' + mode = 'a' state.changelog_size = os.path.getsize(path) else: - mode = 'wb' + mode = 'w' state.changelog_size = 0 makefolder(path) with open(path, mode) as fd: diff --git a/oml/item/models.py b/oml/item/models.py index 508f46e..c9523fb 100644 --- a/oml/item/models.py +++ b/oml/item/models.py @@ -311,20 +311,13 @@ class Item(db.Model): def delete(self, commit=True): Sort.query.filter_by(item_id=self.id).delete() - Find.query.filter_by(item_id=self.id).delete() if state.downloads and self.id in state.downloads.transfers: del state.downloads.transfers[self.id] state.db.session.delete(self) - if commit: - state.db.session.commit() icons.clear('cover:%s' % self.id) icons.clear('preview:%s' % self.id) - - def remove_annotations(self): - from annotation.models import Annotation - for a in Annotation.query.filter_by(item_id=self.id, user_id=state.user()): - a.add_record('removeannotation') - a.delete() + if commit: + state.db.session.commit() meta_keys = ( 'author', @@ -569,7 +562,6 @@ class Item(db.Model): state.db.session.add(self) def remove_file(self): - folders = set() for f in self.files.all(): path = f.fullpath() if os.path.exists(path): @@ -577,12 +569,10 @@ class Item(db.Model): try: os.chmod(path, mode) os.unlink(path) - folders.add(os.path.dirname(path)) + remove_empty_folders(os.path.dirname(path)) except: pass state.db.session.delete(f) - for folder in folders: - remove_empty_folders(folder) user = state.user() if user in self.users: self.users.remove(user) @@ -599,7 +589,6 @@ class Item(db.Model): if self.id in state.downloads.transfers: del state.downloads.transfers[self.id] add_record('removeitem', self.id) - self.remove_annotations() class Sort(db.Model): __tablename__ = 'sort' diff --git a/oml/library.py b/oml/library.py index 09cc474..3c17ed0 100644 --- a/oml/library.py +++ b/oml/library.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -import codecs import json import os import time @@ -53,7 +52,7 @@ class Peer(object): def apply_log(self): changes = [] if os.path.exists(self._logpath): - with codecs.open(self._logpath, 'r', encoding='utf-8') as fd: + with open(self._logpath) as fd: for line in fd: if line: try: diff --git a/oml/nodes.py b/oml/nodes.py index 27d7658..3e4c575 100644 --- a/oml/nodes.py +++ b/oml/nodes.py @@ -70,8 +70,6 @@ class Node(Thread): else: if not self._q.qsize(): time.sleep(5) - else: - time.sleep(0.1) self.queue(action[0], *action[1]) else: logger.debug('unknown action %s', action) @@ -85,8 +83,7 @@ class Node(Thread): self._q.put('ping') def queue(self, action, *args): - if DEBUG_NODES: - logger.debug('queue node action %s->%s%s', self.user_id, action, args) + logger.debug('queue node action %s->%s%s', self.user_id, action, args) self._q.put([action, args]) def _call(self, action, *args): diff --git a/oml/tor.py b/oml/tor.py index 17056ca..18180c1 100644 --- a/oml/tor.py +++ b/oml/tor.py @@ -45,7 +45,7 @@ AvoidDiskWrites 1 Log notice stdout SocksPort 9830 ControlPort 9831 -#CookieAuthentication 1 +CookieAuthentication 1 '''.strip()) tor_data = os.path.join(settings.data_path, 'TorData') if sys.platform == 'win32': @@ -103,7 +103,6 @@ DirReqStatistics 0 for line in self.p.stdout: self._status.append(line) logger.debug(line) - self.p.communicate() time.sleep(0.5) self.p = None diff --git a/static/js/annotationPanel.js b/static/js/annotationPanel.js index f0cf0e5..c189abc 100644 --- a/static/js/annotationPanel.js +++ b/static/js/annotationPanel.js @@ -1,7 +1,6 @@ 'use strict'; -oml.ui.annotationPanel = function(options, self) { - self = self || {}; +oml.ui.annotationPanel = function() { var ui = oml.user.ui; var ui = oml.user.ui; @@ -30,15 +29,14 @@ oml.ui.annotationPanel = function(options, self) { click: function() { var $annotation = oml.$ui.annotationFolder.find('.OMLAnnotation.selected') $annotation.length && $annotation.delete() - that.updateSelection() + $deleteQuote.options({disabled: true}) } }).appendTo($bar); var $menuButton = Ox.MenuButton({ items: [ - {id: 'addAnnotation', title: 'Add Annotation', disabled: true, keyboard: 'return'}, - {id: 'removeAnnotation', title: 'Remove Annotation', disabled: true, keyboard: 'delete'}, - {id: 'removeAnnotations', title: 'Remove All Annotation', disabled: true}, + {id: 'addAnnotation', title: 'Add Annotation', disabled: true}, + {id: 'removeAnnotation', title: 'Remove Annotation', disabled: true}, {}, {id: 'show', title: Ox._('Show Annotations'), disabled: true}, {group: 'showAnnotationUsers', min: 1, max: 1, items: [ @@ -84,14 +82,6 @@ oml.ui.annotationPanel = function(options, self) { }, function(result) { oml.ui.exportAnnotationsDialog(result.data).open() }) - } else if (id =='addAnnotation') { - oml.$ui.viewer.postMessage('addAnnotation', {}) - } else if (id =='removeAnnotation') { - var $annotation = oml.$ui.annotationFolder.find('.OMLAnnotation.selected') - $annotation.length && $annotation.delete() - that.updateSelection() - } else if (id =='removeAnnotations') { - oml.ui.removeAnnotationsDialog().open() } else { console.log('click', id, data) } @@ -123,18 +113,16 @@ oml.ui.annotationPanel = function(options, self) { } ], orientation: 'vertical' - }, self).update({ - hasAnnotations: function() { - $menuButton[self.options.hasAnnotations ? 'enableItem' : 'disableItem']('removeAnnotations') - } }); that.updateSelection = function(selection) { + $addQuote.options({ + disabled: !selection + }) var $annotation = oml.$ui.annotationFolder.find('.OMLAnnotation.selected') - $addQuote.options({disabled: !selection}) - $deleteQuote.options({disabled: !$annotation.length}) - $menuButton[selection ? 'enableItem' : 'disableItem']('addAnnotation') - $menuButton[$annotation.length ? 'enableItem' : 'disableItem']('removeAnnotation') + $deleteQuote.options({ + disabled: !$annotation.length + }) } return that; diff --git a/static/js/removeAnnotations.js b/static/js/removeAnnotations.js deleted file mode 100644 index d9e169a..0000000 --- a/static/js/removeAnnotations.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -oml.ui.removeAnnotationsDialog = function() { - - var ui = oml.user.ui, - - annotations = oml.$ui.viewer.getAnnotations().filter(function(a) { - return a.user == oml.user.id - }), - annotationsName = Ox._(annotations.length == 1 ? 'Annotation' : 'Annotations'), - theseAnnotationsName = annotations.length == 1 - ? Ox._('this annotation') - : Ox._('these {0} annotations', [Ox.formatNumber(annotations.length)]), - - that = oml.ui.confirmDialog({ - buttons: [ - Ox.Button({ - style: 'squared', - title: Ox._('No, Keep {0}', [annotationsName]) - }), - Ox.Button({ - style: 'squared', - title: Ox._('Yes, Delete {0}', [annotationsName]) - }) - ], - content: Ox._( - 'Are you sure that you want to permanently delete {0}?', - [theseAnnotationsName] - ), - title: Ox._('Delete {0}', [annotationsName]) - }, function() { - Ox.serialForEach(annotations, function(a, index, annotations, next) { - oml.api.removeAnnotation({ - item: ui.item, - annotation: a.id - }, function(result) { - next() - }) - }, function() { - Ox.Request.clearCache(); - oml.$ui.viewer.renderAnnotations(true); - }) - }); - - return that; - -}; - diff --git a/static/js/viewer.js b/static/js/viewer.js index 24c48a2..eb4d902 100644 --- a/static/js/viewer.js +++ b/static/js/viewer.js @@ -111,7 +111,6 @@ oml.ui.viewer = function() { if (save !== false) { oml.api.addAnnotation(a) } - data.user = a.user || oml.user.id data.notes = data.notes || []; annotations.push(data); } @@ -158,13 +157,9 @@ oml.ui.viewer = function() { oml.$ui.annotationFolder.append($annotation); $annotation.annotate(); oml.$ui.annotationPanel.updateSelection(false) - oml.$ui.annotationPanel.options({hasAnnotations: true}) } else if (event == 'removeAnnotation') { oml.$ui.annotationFolder.find('#a-' + data.id).remove() data.id && removeAnnotation(data.id) - oml.$ui.annotationPanel.options({hasAnnotations: annotations.filter(function(a) { - return a.user == oml.user.id - }).length > 0}) } else if (event == 'selectAnnotation') { if (data.id) { var $annotation = oml.$ui.annotationFolder.find('#a-' + data.id) @@ -201,7 +196,7 @@ oml.ui.viewer = function() { that.getAnnotations = function() { return annotations; } - that.renderAnnotations = function(load=false) { + that.renderAnnotations = function() { var sortKey = ui.sortAnnotations if (sortKey == 'date') { sortKey = 'created' @@ -212,15 +207,9 @@ oml.ui.viewer = function() { if (sortKey == 'quote') { sortKey = 'text' } - if (load) { - loadAnnotations(function() { - that.renderAnnotations() - }) - } annotations = Ox.sortBy(annotations, sortKey) oml.$ui.annotationFolder.empty(); var visibleAnnotations = []; - var hasAnnotations = false; annotations.forEach(function(data) { //that.postMessage('removeAnnotation', {id: data.id}) if (ui.showAnnotationUsers == 'all' || data.user == oml.user.id) { @@ -228,11 +217,7 @@ oml.ui.viewer = function() { oml.$ui.annotationFolder.append($annotation); visibleAnnotations.push(data) } - if (data.user == oml.user.id) { - hasAnnotations = true - } }) - oml.$ui.annotationPanel.options({hasAnnotations: hasAnnotations}) // fixme: trigger loaded event from reader instead? setTimeout(function() { that.postMessage('addAnnotations', { @@ -240,7 +225,6 @@ oml.ui.viewer = function() { replace: true }) }, 500) - } return that.updateElement(); }; diff --git a/static/json/js.json b/static/json/js.json index e493cf5..f283185 100644 --- a/static/json/js.json +++ b/static/json/js.json @@ -58,7 +58,6 @@ "preferencesPanel.js", "previewButton.js", "previewDialog.js", - "removeAnnotations.js", "resetUIDialog.js", "rightPanel.js", "sectionButtons.js",