try to get preview from peers, fixes #79

This commit is contained in:
j 2016-01-21 12:35:49 +05:30
commit 5f8094bba3
5 changed files with 33 additions and 12 deletions

View file

@ -93,14 +93,12 @@ class Icons(dict):
icons = Icons(icons_db_path)
@run_async
def get_icon(id, type_, size, callback):
def get_icon_sync(id, type_, size):
if size:
skey = '%s:%s:%s' % (type_, id, size)
data = icons[skey]
if data:
callback(bytes(data))
return
return bytes(data)
key = '%s:%s' % (type_, id)
data = icons[key]
if not data:
@ -128,7 +126,11 @@ def get_icon(id, type_, size, callback):
if size:
data = icons[skey] = resize_image(data, size=size)
data = bytes(data) or ''
callback(data)
return data
@run_async
def get_icon(id, type_, size, callback):
callback(get_icon_sync(id, type_, size))
def clear_default_cover_cache():
icons.clear('default:cover:')

View file

@ -366,6 +366,11 @@ class Item(db.Model):
path = self.get_path()
if path:
return getattr(media, self.info['extension']).cover(path)
else:
for u in self.users:
if u.id != settings.USER_ID:
if state.nodes.download_preview(u.id, self.id):
break
def update_cover(self):
key = 'cover:%s'%self.id
@ -388,6 +393,14 @@ class Item(db.Model):
del self.info['coverRatio']
icons.clear('cover:%s:' % self.id)
def get_preview(self):
key = 'preview:%s'%self.id
data = icons[key]
if not data:
preview = self.extract_preview()
if preview:
icons[key] = preview
def update_preview(self):
key = 'preview:%s'%self.id
preview = self.extract_preview()