use emoji cover for failures

This commit is contained in:
Yuxin Wu
2017-11-29 03:55:09 -08:00
parent b82bcc7673
commit 8e68c59893
4 changed files with 53 additions and 31 deletions
+23 -12
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python2
# -*- coding: UTF-8 -*-
# File: res.py
# Date: Wed Nov 29 03:24:17 2017 -0800
# Date: Wed Nov 29 03:43:50 2017 -0800
# Author: Yuxin Wu <[email protected]>
import glob
@@ -196,10 +196,12 @@ class Resource(object):
return big_file
return get_jpg_b64(small_file)
def _get_res_emoji(self, md5, pack_id):
path = self.emoji_dir
if pack_id:
path = os.path.join(path, pack_id)
def _get_res_emoji(self, md5, pack_id, allow_cover=False):
"""
pack_id: can be None
allow_cover: Cover is non-animated. Can be used as a fallback.
"""
path = os.path.join(self.emoji_dir, pack_id or '')
candidates = glob.glob(os.path.join(path, '{}*'.format(md5)))
candidates = [k for k in candidates if not k.endswith('_thumb') \
and not re.match('.*_[0-9]+$', k)]
@@ -210,14 +212,11 @@ class Resource(object):
return None
return f[0]
f = try_use([k for k in candidates if not k.endswith('_cover')])
if f:
return get_file_b64(f), imghdr.what(f)
candidates = [k for k in candidates if (allow_cover or not k.endswith('_cover'))]
# don't try do use cover anymore. cover is not animated
#f = try_use([k for k in candidates if k.endswith('_cover')])
#if f:
#return get_file_b64(f), imghdr.what(f)
for cand in candidates:
if imghdr.what(cand):
return get_file_b64(cand), imghdr.what(cand)
return None, None
def _get_internal_emoji(self, fname):
@@ -226,24 +225,36 @@ class Resource(object):
def get_emoji_by_md5(self, md5):
""" :returns: (b64 img, format)"""
assert md5, md5
if md5 in self.parser.internal_emojis:
# TODO this seems broken
emoji_img, format = self._get_internal_emoji(self.parser.internal_emojis[md5])
logger.warn("Cannot get emoji {}".format(md5))
return None, None
else:
# check cache
img, format = self.emoji_cache.query(md5)
if format:
return img, format
# check resource/emoji/ dir
group = self.parser.emoji_groups.get(md5, None)
emoji_img, format = self._get_res_emoji(md5, group)
if format:
return emoji_img, format
# check url
url = self.parser.emoji_url.get(md5, None)
if url:
emoji_img, format = self.emoji_cache.fetch(md5, url)
if format:
return emoji_img, format
# check resource/emoji dir again, for cover
emoji_img, format = self._get_res_emoji(md5, group, allow_cover=True)
if format:
return emoji_img, format
# first 1k in emoji is encrypted
logger.warn("Cannot get emoji {} in {}".format(md5, group))
return None, None