From b63e5f5f9fc0fcd85adf2f93f65d61abd4cc0681 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Fri, 24 Mar 2017 10:40:48 +0100 Subject: Some caching and fix gpgme on some systems --- libdino/src/service/avatar_manager.vala | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'libdino/src/service/avatar_manager.vala') diff --git a/libdino/src/service/avatar_manager.vala b/libdino/src/service/avatar_manager.vala index 1c0a3b51..de3d86fb 100644 --- a/libdino/src/service/avatar_manager.vala +++ b/libdino/src/service/avatar_manager.vala @@ -22,6 +22,7 @@ public class AvatarManager : StreamInteractionModule, Object { private HashMap user_avatars = new HashMap(Jid.hash_func, Jid.equals_func); private HashMap vcard_avatars = new HashMap(Jid.hash_func, Jid.equals_func); private AvatarStorage avatar_storage = new AvatarStorage(get_storage_dir()); + private HashMap cached_pixbuf = new HashMap(); private const int MAX_PIXEL = 192; public static void start(StreamInteractor stream_interactor, Database db) { @@ -45,6 +46,17 @@ public class AvatarManager : StreamInteractionModule, Object { modules.add(new Xep.VCard.Module(avatar_storage)); } + private Pixbuf? get_avatar_by_hash(string hash) { + if (cached_pixbuf.has_key(hash)) { + return cached_pixbuf[hash]; + } + Pixbuf? image = avatar_storage.get_image(hash); + if (image != null) { + cached_pixbuf[hash] = image; + } + return image; + } + public Pixbuf? get_avatar(Account account, Jid jid) { Jid jid_ = jid; if (!stream_interactor.get_module(MucManager.IDENTITY).is_groupchat_occupant(jid, account)) { @@ -52,11 +64,11 @@ public class AvatarManager : StreamInteractionModule, Object { } string? user_avatars_id = user_avatars[jid_]; if (user_avatars_id != null) { - return avatar_storage.get_image(user_avatars_id); + return get_avatar_by_hash(user_avatars_id); } string? vcard_avatars_id = vcard_avatars[jid_]; if (vcard_avatars_id != null) { - return avatar_storage.get_image(vcard_avatars_id); + return get_avatar_by_hash(vcard_avatars_id); } return null; } -- cgit v1.2.3-54-g00ecf