diff --git a/oml/__main__.py b/oml/__main__.py index 9bb7491..795f3a1 100644 --- a/oml/__main__.py +++ b/oml/__main__.py @@ -29,7 +29,7 @@ import server if len(sys.argv) > 1 and sys.argv[1] == 'server': server.run() -if len(sys.argv) > 1 and sys.argv[1] == 'ui': +elif len(sys.argv) > 1 and sys.argv[1] == 'ui': import ui ui.main(sys.argv[2:]) else: diff --git a/oml/item/scan.py b/oml/item/scan.py index 4869ac9..79c5ead 100644 --- a/oml/item/scan.py +++ b/oml/item/scan.py @@ -188,6 +188,8 @@ def run_scan(): file.item.added = file.item.accessed file.item.save() library_items = len(user.library.items) + if state.shutdown: + return if added: trigger_event('change', {}) logger.debug('imported %s unknown books', added) diff --git a/oml/node/server.py b/oml/node/server.py index 65451dc..bc2e816 100644 --- a/oml/node/server.py +++ b/oml/node/server.py @@ -317,7 +317,6 @@ class Handler(http.server.SimpleHTTPRequestHandler): self.send_header('Content-Length', str(content_length)) self.end_headers() self.wfile.write(content) - logger.debug('%s bytes response', content_length) def chunk_size(self, content_length): return min(16*1024, content_length) diff --git a/oml/nodes.py b/oml/nodes.py index 42f1703..9dda107 100644 --- a/oml/nodes.py +++ b/oml/nodes.py @@ -486,9 +486,6 @@ class Nodes(Thread): self._q = Queue() with db.session(): for u in user.models.User.query.filter_by(peered=True): - if 'local' in u.info: - del u.info['local'] - u.save() self.queue('add', u.id) get_peer(u.id) for u in user.models.User.query.filter_by(queued=True): @@ -507,6 +504,7 @@ class Nodes(Thread): while not state.shutdown: args = self._q.get() if args: + logger.debug('processing nodes queue: next: %s, %s entries in queue', args[0], self._q.qsize()) if args[0] == 'add': self._add(*args[1:]) elif args[0] == 'pull': @@ -515,6 +513,8 @@ class Nodes(Thread): self._call(*args) def queue(self, *args): + if args: + logger.debug('add %s to queue, queue currently has %s entries', args[0], self._q.qsize()) self._q.put(list(args)) def is_online(self, id): diff --git a/oml/settings.py b/oml/settings.py index 23b0f35..4ef0843 100644 --- a/oml/settings.py +++ b/oml/settings.py @@ -95,4 +95,4 @@ FULLTEXT_SUPPORT = fulltext.platform_supported() if not FULLTEXT_SUPPORT: config['itemKeys'] = [k for k in config['itemKeys'] if k['id'] != 'fulltext'] -DB_VERSION = 14 +DB_VERSION = 15 diff --git a/oml/state.py b/oml/state.py index 606a22b..cc1e804 100644 --- a/oml/state.py +++ b/oml/state.py @@ -15,7 +15,6 @@ shutdown = False websockets = [] uisockets = [] peers = {} - changelog_size = None activity = {} diff --git a/oml/update.py b/oml/update.py index 8dab498..07cddb4 100644 --- a/oml/update.py +++ b/oml/update.py @@ -371,7 +371,9 @@ class Update(Thread): db_version = migrate_12() if db_version < 13: db_version = migrate_13() - settings.server['db_version'] = settings.DB_VERSION + if db_version < 15: + db_version = migrate_15() + settings.server['db_version'] = db_version def run(self): self.status('Checking for updates...') @@ -618,10 +620,14 @@ def migrate_13(): settings.server['revision'] = revision return 13 -def migrate_14(): - from user.models import List +def migrate_15(): + from user.models import List, User with db.session(): l = List.get(':Public') if l and not len(l.items): l.remove() - return 14 + for u in User.query: + if 'local' in u.info: + del u.info['local'] + u.save() + return 15 diff --git a/oml/user/models.py b/oml/user/models.py index f90cf89..3d7284a 100644 --- a/oml/user/models.py +++ b/oml/user/models.py @@ -57,8 +57,7 @@ class User(db.Model): user = cls(id=id, peered=False, online=False) user.info = {} if state.nodes and state.nodes.local and id in state.nodes.local: - user.info['local'] = state.nodes.local[id] - user.info['username'] = user.info['local']['username'] + user.info['username'] = state.nodes.local[id]['username'] user.update_name() user.save() return user @@ -84,6 +83,8 @@ class User(db.Model): j = {} if self.info: j.update(self.info) + if state.nodes and self.id in state.nodes.local: + j['local'] = state.nodes.local[self.id].copy() j['id'] = self.id if self.pending: j['pending'] = self.pending @@ -603,25 +604,15 @@ def update_user_peering(user_id, peered, username=None): u.update_peering(peered, username) def remove_local_info(id): - with db.session(): - u = User.get(id, for_update=True) - if u and 'local' in u.info: - del u.info['local'] - u.save() - u.trigger_status() + if state.nodes: + trigger_event('status', { + 'id': id, + 'online': state.nodes.is_online(id) + }) def add_local_info(data): - with db.session(): - u = User.get(data['id'], for_update=True) - if u: - if u.info['username'] != data['username']: - u.info['username'] = data['username'] - u.update_name() - u.info['local'] = data - u.save() - if state.nodes: - state.nodes.queue('add', u.id) - + if state.nodes: + state.nodes.queue('add', data['id']) def upload(data): delay = 60 diff --git a/static/css/oml.css b/static/css/oml.css index 33ae71b..aae24a4 100644 --- a/static/css/oml.css +++ b/static/css/oml.css @@ -1,4 +1,5 @@ .OMLQuote { + padding: 8px; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-family: Georgia, Palatino, DejaVu Serif, Book Antiqua, Palatino Linotype, Times New Roman, serif; diff --git a/static/js/annotation.js b/static/js/annotation.js index aeda34a..ee77fc3 100644 --- a/static/js/annotation.js +++ b/static/js/annotation.js @@ -1,16 +1,18 @@ 'use strict'; oml.ui.annotation = function(annotation, $iframe) { - var $quote = Ox.Element().addClass('OxSelectable OMLQuote').css({ - padding: '8px' - }).html(Ox.encodeHTMLEntities(annotation.text).replace(/\n/g, '
')).on({ - click: function(event) { - that.select() - $iframe.postMessage('selectAnnotation', { - id: annotation.id + var $quote = Ox.Element() + .addClass('OxSelectable OMLQuote') + .append( + Ox.Element().html(Ox.encodeHTMLEntities(annotation.text).replace(/\n/g, '
')) + ).on({ + click: function(event) { + that.select() + $iframe.postMessage('selectAnnotation', { + id: annotation.id + }) + } }) - } - }) var notes = annotation.notes.length ? annotation.notes.map(function(note) { note.editable = !note.user return note diff --git a/static/js/utils.js b/static/js/utils.js index 3ac249e..f4bb2b9 100644 --- a/static/js/utils.js +++ b/static/js/utils.js @@ -432,7 +432,6 @@ oml.enableDragAndDrop = function($list, canMove) { ) { var targets = drag.action == 'copy' ? drag.target.id : [oml.user.ui._list, drag.target.id]; - cleanup(250); oml.doHistory(drag.action, data.ids, targets, function() { Ox.Request.clearCache('find'); oml.api.find({ @@ -455,6 +454,7 @@ oml.enableDragAndDrop = function($list, canMove) { if (drag.action == 'move') { oml.$ui.list.updateElement(); } + cleanup(250); }); } else { cleanup() @@ -492,7 +492,6 @@ oml.enableDragAndDrop = function($list, canMove) { text = Ox._('You cannot move books
out of a smart list.'); } } else if (drag.target) { - console.log(drag.target) targetText = drag.target.type == 'libraries' ? Ox._('a library') : drag.target.type == 'library' ? drag.target.user == ''