persist muc avatar and show in bookmarks

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/parser/MessageParser.java           | 10 
src/main/java/eu/siacs/conversations/parser/PresenceParser.java          |  1 
src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java    |  2 
src/main/java/eu/siacs/conversations/services/AvatarService.java         | 10 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 18 
5 files changed, 27 insertions(+), 14 deletions(-)

Detailed changes

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);

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();

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 + "=?";

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 {

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 {