|
|
@@ -49,7 +49,7 @@ class AvatarReader(object):
|
|
|
except Exception:
|
|
|
pass
|
|
|
|
|
|
- def get_avatar_from_avtdir(self, avtid):
|
|
|
+ def get_avatar_from_avtdir(self, avtid) -> Image.Image | None:
|
|
|
dir1, dir2 = avtid[:2], avtid[2:4]
|
|
|
candidates = glob.glob(os.path.join(self.avt_dir, dir1, dir2, f"*{avtid}*"))
|
|
|
candidates = sorted(set(candidates), key=_filename_priority, reverse=True)
|
|
|
@@ -83,7 +83,16 @@ class AvatarReader(object):
|
|
|
ret = self.get_avatar_from_avtdir(avtid)
|
|
|
if ret is not None:
|
|
|
return ret
|
|
|
- logger.warning("Avatar for {} not found anywhere.".format(username))
|
|
|
+ logger.warning("Avatar file for {} not found.".format(username))
|
|
|
+
|
|
|
+ def save_avatar_to_avtdir(self, username: str, im: Image.Image):
|
|
|
+ """Save a downloaded avatar to avtdir so it can be reused next time."""
|
|
|
+ avtid = md5(username.encode('utf-8'))
|
|
|
+ dir1, dir2 = avtid[:2], avtid[2:4]
|
|
|
+ fname = os.path.join(self.avt_dir, dir1, dir2, f"user_{avtid}.png")
|
|
|
+ os.makedirs(os.path.dirname(fname), exist_ok=True)
|
|
|
+ logger.info(f"Caching downloaded avatar for {username} to {fname}.")
|
|
|
+ im.save(fname, 'PNG')
|
|
|
|
|
|
def read_img_from_block(self, filename, pos, size):
|
|
|
file_idx = pos >> 32
|