From 1753dcac76a87d5194047df0dabc1d58135e5e45 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 17 Dec 2017 16:23:19 +0100 Subject: [PATCH] save muc subject to disk and use crypto targets for offline name generation --- .../conversations/entities/Conversation.java | 12 +++---- .../conversations/entities/MucOptions.java | 35 ++++++++++++++----- .../conversations/parser/MessageParser.java | 4 ++- .../conversations/services/AvatarService.java | 2 +- 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 301d2b83c..7cf4618e3 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -495,12 +495,12 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl public String getName() { if (getMode() == MODE_MULTI) { - if (getMucOptions().getSubject() != null) { - return getMucOptions().getSubject(); - } else if (bookmark != null - && bookmark.getBookmarkName() != null - && !bookmark.getBookmarkName().trim().isEmpty()) { - return bookmark.getBookmarkName().trim(); + final String subject = getMucOptions().getSubject(); + final String bookmarkName = bookmark != null ? bookmark.getBookmarkName() : null; + if (subject != null && !subject.trim().isEmpty()) { + return subject; + } else if (bookmarkName != null && !bookmarkName.trim().isEmpty()) { + return bookmarkName; } else { String generatedName = getMucOptions().createNameFromParticipants(); if (generatedName != null) { diff --git a/src/main/java/eu/siacs/conversations/entities/MucOptions.java b/src/main/java/eu/siacs/conversations/entities/MucOptions.java index 6bb6f3120..a708a009b 100644 --- a/src/main/java/eu/siacs/conversations/entities/MucOptions.java +++ b/src/main/java/eu/siacs/conversations/entities/MucOptions.java @@ -3,7 +3,6 @@ package eu.siacs.conversations.entities; import android.annotation.SuppressLint; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -362,12 +361,11 @@ public class MucOptions { private final Set users = new HashSet<>(); private final List features = new ArrayList<>(); private Data form = new Data(); - private Conversation conversation; + private final Conversation conversation; private boolean isOnline = false; private Error error = Error.NONE; public OnRenameListener onRenameListener = null; private User self; - private String subject = null; private String password = null; public MucOptions(Conversation conversation) { @@ -661,18 +659,39 @@ public class MucOptions { return self; } - public void setSubject(String content) { - this.subject = content; + public boolean setSubject(String subject) { + return this.conversation.setAttribute("subject",subject); } public String getSubject() { - return this.subject; + return this.conversation.getAttribute("subject"); + } + + public List getFallbackUsersFromCryptoTargets() { + List users = new ArrayList<>(); + for(Jid jid : conversation.getAcceptedCryptoTargets()) { + User user = new User(this,null); + user.setRealJid(jid); + users.add(user); + } + return users; + } + + public List getUsersRelevantForNameAndAvatar() { + final List users; + if (isOnline) { + users = getUsers(5); + } else { + users = getFallbackUsersFromCryptoTargets(); + } + return users; } public String createNameFromParticipants() { - if (getUserCount() >= 2) { + List users = getUsersRelevantForNameAndAvatar(); + if (users.size() >= 2) { StringBuilder builder = new StringBuilder(); - for (User user : getUsers(5)) { + for (User user : users) { if (builder.length() != 0) { builder.append(", "); } diff --git a/src/main/java/eu/siacs/conversations/parser/MessageParser.java b/src/main/java/eu/siacs/conversations/parser/MessageParser.java index 1bc9b7321..4979af5de 100644 --- a/src/main/java/eu/siacs/conversations/parser/MessageParser.java +++ b/src/main/java/eu/siacs/conversations/parser/MessageParser.java @@ -674,7 +674,9 @@ public class MessageParser extends AbstractParser implements OnMessagePacketRece if (conversation != null && conversation.getMode() == Conversation.MODE_MULTI) { conversation.setHasMessagesLeftOnServer(conversation.countMessages() > 0); String subject = packet.findChildContent("subject"); - conversation.getMucOptions().setSubject(subject); + if (conversation.getMucOptions().setSubject(subject)) { + mXmppConnectionService.updateConversation(conversation); + } final Bookmark bookmark = conversation.getBookmark(); if (bookmark != null && bookmark.getBookmarkName() == null) { if (bookmark.setBookmarkName(subject)) { diff --git a/src/main/java/eu/siacs/conversations/services/AvatarService.java b/src/main/java/eu/siacs/conversations/services/AvatarService.java index 5573b2561..54f571a10 100644 --- a/src/main/java/eu/siacs/conversations/services/AvatarService.java +++ b/src/main/java/eu/siacs/conversations/services/AvatarService.java @@ -213,7 +213,7 @@ public class AvatarService implements OnAdvancedStreamFeaturesLoaded { if (bitmap != null || cachedOnly) { return bitmap; } - final List users = mucOptions.getUsers(5); + final List users = mucOptions.getUsersRelevantForNameAndAvatar(); if (users.size() == 0) { Conversation c = mucOptions.getConversation(); bitmap = getImpl(c.getName(),c.getJid().toBareJid().toString(),size);