use emoji cover for failures
This commit is contained in:
+23
-12
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user