Add a cache for vCard avatars.
This commit is contained in:
parent
3775e476b6
commit
ae7d2b4f9d
2 changed files with 25 additions and 2 deletions
|
@ -519,6 +519,7 @@ def check_create_cache_dir():
|
|||
|
||||
try:
|
||||
makedirs(CACHE_DIR)
|
||||
makedirs(path.join(CACHE_DIR, 'avatars'))
|
||||
makedirs(path.join(CACHE_DIR, 'images'))
|
||||
except OSError:
|
||||
pass
|
||||
|
|
|
@ -14,7 +14,7 @@ import sys
|
|||
import time
|
||||
from datetime import datetime
|
||||
from hashlib import sha1, sha512
|
||||
from os import path
|
||||
from os import path, makedirs
|
||||
|
||||
from slixmpp import InvalidJID
|
||||
from slixmpp.xmlstream.stanzabase import StanzaBase, ElementBase
|
||||
|
@ -384,7 +384,21 @@ class HandlerCore:
|
|||
contact = roster[jid]
|
||||
if not contact:
|
||||
return
|
||||
log.debug('Received vCard avatar update from %s', jid)
|
||||
avatar_hash = pres['vcard_temp_update']['photo']
|
||||
log.debug('Received vCard avatar update from %s: %s', jid, avatar_hash)
|
||||
|
||||
# First check whether we have it in cache.
|
||||
cache_dir = path.join(CACHE_DIR, 'avatars', jid)
|
||||
cached_path = path.join(cache_dir, avatar_hash)
|
||||
try:
|
||||
with open(cached_path, 'rb') as avatar_file:
|
||||
contact.avatar = avatar_file.read()
|
||||
log.debug('Using cached avatar')
|
||||
return
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
# If we didn’t have any, query the vCard instead.
|
||||
try:
|
||||
result = yield from self.core.xmpp['xep_0054'].get_vcard(jid,
|
||||
cached=True,
|
||||
|
@ -396,6 +410,14 @@ class HandlerCore:
|
|||
return
|
||||
log.debug('Received %s avatar: %s', jid, avatar['TYPE'])
|
||||
|
||||
# Now we save the data on the file system to not have to request it again.
|
||||
try:
|
||||
makedirs(cache_dir)
|
||||
with open(cached_path, 'wb') as avatar_file:
|
||||
avatar_file.write(contact.avatar)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
def on_nick_received(self, message):
|
||||
"""
|
||||
Called when a pep notification for an user nickname
|
||||
|
|
Loading…
Reference in a new issue