From d58f5bd61bd3ec2c3cdd66c03977f0c788f5cb33 Mon Sep 17 00:00:00 2001 From: j Date: Thu, 31 Jan 2019 14:22:20 +0530 Subject: [PATCH 1/2] update list items by id --- static/js/folders.js | 13 ++++++------- static/js/list.js | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/static/js/folders.js b/static/js/folders.js index 812f8bd..17775b9 100644 --- a/static/js/folders.js +++ b/static/js/folders.js @@ -314,7 +314,7 @@ oml.ui.folders = function() { }; - that.updateItems = function(items) { + that.updateItems = function(list, items) { var $list; if (arguments.length == 0) { oml.getLists(function(lists) { @@ -326,12 +326,11 @@ oml.ui.folders = function() { }); }); } else { - $list = $lists.filter(function($list) { - return $list.options('selected').length; - })[0]; - if ($list && !Ox.isEmpty($list.value(ui._list))) { - $list.value(ui._list, 'items', items); - } + $lists.forEach(function($list) { + if (!Ox.isEmpty($list.value(list))) { + $list.value(list, 'items', items); + } + }) } }; diff --git a/static/js/list.js b/static/js/list.js index 9af026d..3c159ae 100644 --- a/static/js/list.js +++ b/static/js/list.js @@ -64,7 +64,7 @@ oml.ui.list = function() { && ui.find.conditions[0].key == 'list' && ui.find.conditions[0].operator == '==' )) { - oml.$ui.folders.updateItems(data.items); + oml.$ui.folders.updateItems(ui.find.conditions[0].value, data.items); } oml.$ui.statusbar.set('total', data); }, From 5b4a58f2db6c2ee2bc0ad091cbe74775f99ad26c Mon Sep 17 00:00:00 2001 From: j Date: Thu, 31 Jan 2019 15:03:54 +0530 Subject: [PATCH 2/2] don't download image in db session --- oml/item/models.py | 71 ++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/oml/item/models.py b/oml/item/models.py index cfc44e3..a104506 100644 --- a/oml/item/models.py +++ b/oml/item/models.py @@ -437,30 +437,6 @@ class Item(db.Model): if state.nodes.download_preview(u.id, self.id): break - def update_cover(self): - logger.debug('%s update cover', self.id) - key = 'cover:%s' % self.id - cover = None - if 'cover' in self.meta and self.meta['cover']: - logger.debug('download cover %s %s', self.id, self.meta['cover']) - try: - cover = ox.cache.read_url(self.meta['cover']) - except: - logger.debug('unable to read cover url %s', self.meta['cover']) - cover = None - if cover: - icons[key] = cover - self.info['coverRatio'] = get_ratio(cover) - else: - del icons[key] - if not cover: - if 'previewRatio' in self.info: - self.info['coverRatio'] = self.info['previewRatio'] - elif 'coverRatio' in self.info: - del self.info['coverRatio'] - icons.clear('cover:%s:' % self.id) - logger.debug('%s update_cover done', self.id) - def get_preview(self): key = 'preview:%s' % self.id data = icons[key] @@ -490,11 +466,14 @@ class Item(db.Model): icons.clear('preview:%s:' % self.id) logger.debug('%s update_preview done', self.id) - def update_icons(self): + def update_cover(self): if state.online: - self.update_cover() + download_cover(self.id) elif state.tasks: state.tasks.queue('getcover', self.id) + + def update_icons(self): + self.update_cover() self.update_preview() def load_metadata(self): @@ -856,15 +835,47 @@ def update_sort_table(): s.connection().execute(q) s.commit() +def download_cover(id): + key = 'cover:%s' % id + with db.session(): + i = Item.get(id) + if i: + url = i.meta.get('cover') + else: + url = None + + logger.debug('download cover %s %s', self.id, url) + ratio = None + try: + cover = ox.net.read_url(url) + ratio = get_ratio(cover) + except: + logger.debug('unable to read cover url %s', url) + cover = None + with db.session(): + i = Item.get(id, for_update=True) + if i: + if cover: + i.info['coverRatio'] = get_ratio(cover) + else: + if 'previewRatio' in i.info: + i.info['coverRatio'] = i.info['previewRatio'] + elif 'coverRatio' in i.info: + del i.info['coverRatio'] + i.save() + + if cover: + icons[key] = cover + else: + del icons[key] + icons.clear('cover:%s:' % id) + logger.debug('%s update_cover done', id) def get_cover(id): delay = 60 if state.online: # logger.debug('get_cover(%s)', id) - with db.session(): - i = Item.get(id) - if i: - i.update_cover() + download_cover(id) else: state.main.call_later(delay, lambda: state.tasks.queue('getcover', id))