From dfb95f0a843334e8ecb4c54569d6eced9fda5ec4 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 30 Jun 2018 13:35:17 +0200 Subject: [PATCH] persist muc avatar and show in bookmarks --- .../conversations/parser/MessageParser.java | 10 ++++++---- .../conversations/parser/PresenceParser.java | 1 + .../persistance/DatabaseBackend.java | 2 +- .../conversations/services/AvatarService.java | 10 ++++++++-- .../services/XmppConnectionService.java | 18 +++++++++++------- 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index ca38f404e..26ded9f1f 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -183,10 +183,12 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece mXmppConnectionService.updateAccountUi(); } else { Contact contact = account.getRoster().getContact(from); - contact.setAvatar(avatar); - mXmppConnectionService.getAvatarService().clear(contact); - mXmppConnectionService.updateConversationUi(); - mXmppConnectionService.updateRosterUi(); + if (contact.setAvatar(avatar)) { + mXmppConnectionService.syncRoster(account); + mXmppConnectionService.getAvatarService().clear(contact); + mXmppConnectionService.updateConversationUi(); + mXmppConnectionService.updateRosterUi(); + } } } else if (mXmppConnectionService.isDataSaverDisabled()) { mXmppConnectionService.fetchAvatar(account, avatar); diff --git a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java index 5bd714937..959179099 100644 --- a/src/main/java/eu/siacs/conversations/parser/PresenceParser.java +++ b/src/main/java/eu/siacs/conversations/parser/PresenceParser.java @@ -233,6 +233,7 @@ public class PresenceParser extends AbstractParser implements mXmppConnectionService.updateConversationUi(); mXmppConnectionService.updateAccountUi(); } else if (contact.setAvatar(avatar)) { + mXmppConnectionService.syncRoster(account); mXmppConnectionService.getAvatarService().clear(contact); mXmppConnectionService.updateConversationUi(); mXmppConnectionService.updateRosterUi(); diff --git a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java index 6071bbb7f..5daafea1d 100644 --- a/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java @@ -888,7 +888,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { final SQLiteDatabase db = this.getWritableDatabase(); db.beginTransaction(); for (Contact contact : roster.getContacts()) { - if (contact.getOption(Contact.Options.IN_ROSTER)) { + if (contact.getOption(Contact.Options.IN_ROSTER) || contact.getAvatar() != null) { db.insert(Contact.TABLENAME, null, contact.getContentValues()); } else { String where = Contact.ACCOUNT + "=? AND " + Contact.JID + "=?"; diff --git a/src/main/java/eu/siacs/conversations/services/AvatarService.java b/src/main/java/eu/siacs/conversations/services/AvatarService.java index 02f351c8b..012be5793 100644 --- a/src/main/java/eu/siacs/conversations/services/AvatarService.java +++ b/src/main/java/eu/siacs/conversations/services/AvatarService.java @@ -53,7 +53,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded { protected XmppConnectionService mXmppConnectionService = null; - public AvatarService(XmppConnectionService service) { + AvatarService(XmppConnectionService service) { this.mXmppConnectionService = service; } @@ -213,7 +213,13 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded { if (bookmark.getConversation() != null) { return get(bookmark.getConversation(), size, cachedOnly); } else { - String seed = bookmark.getJid() != null ? bookmark.getJid().asBareJid().toString() : null; + Jid jid = bookmark.getJid(); + Account account = bookmark.getAccount(); + Contact contact = jid == null ? null : account.getRoster().getContact(jid); + if (contact != null && contact.getAvatar() != null) { + return get(contact, size, cachedOnly); + } + String seed = jid != null ? jid.asBareJid().toString() : null; return get(bookmark.getDisplayName(), seed, size, cachedOnly); } } else { diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 6aa05cf9e..90a460b77 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -2886,10 +2886,12 @@ public class XmppConnectionService extends Service { updateAccountUi(); } else { Contact contact = a.getRoster().getContact(avatar.owner); - contact.setAvatar(avatar); - getAvatarService().clear(contact); - updateConversationUi(); - updateRosterUi(); + if (contact.setAvatar(avatar)) { + syncRoster(account); + getAvatarService().clear(contact); + updateConversationUi(); + updateRosterUi(); + } } if (callback != null) { callback.success(avatar); @@ -2943,9 +2945,11 @@ public class XmppConnectionService extends Service { updateAccountUi(); } else { Contact contact = account.getRoster().getContact(avatar.owner); - contact.setAvatar(avatar); - getAvatarService().clear(contact); - updateRosterUi(); + if (contact.setAvatar(avatar)) { + syncRoster(account); + getAvatarService().clear(contact); + updateRosterUi(); + } } updateConversationUi(); } else {