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)) 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); },