Change summary
src/main/java/eu/siacs/conversations/entities/Conversation.java | 9
src/main/java/eu/siacs/conversations/services/MessageArchiveService.java | 10
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 9
3 files changed, 22 insertions(+), 6 deletions(-)
Detailed changes
@@ -85,6 +85,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
private ChatState mOutgoingChatState = Config.DEFAULT_CHAT_STATE;
private ChatState mIncomingChatState = Config.DEFAULT_CHAT_STATE;
private String mFirstMamReference = null;
+ private String displayState = null;
public Conversation(final String name, final Account account, final Jid contactJid,
final int mode) {
@@ -1121,6 +1122,14 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
return getName().toString();
}
+ public void setDisplayState(final String stanzaId) {
+ this.displayState = stanzaId;
+ }
+
+ public String getDisplayState() {
+ return this.displayState;
+ }
+
public interface OnMessageFound {
void onMessageFound(final Message message);
}
@@ -282,10 +282,18 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
if (conversation != null) {
conversation.sort();
conversation.setHasMessagesLeftOnServer(!done);
+ final var displayState = conversation.getDisplayState();
+ if (displayState != null) {
+ mXmppConnectionService.markReadUpToStanzaId(conversation, displayState);
+ }
} else {
- for (Conversation tmp : this.mXmppConnectionService.getConversations()) {
+ for (final Conversation tmp : this.mXmppConnectionService.getConversations()) {
if (tmp.getAccount() == query.getAccount()) {
tmp.sort();
+ final var displayState = tmp.getDisplayState();
+ if (displayState != null) {
+ mXmppConnectionService.markReadUpToStanzaId(tmp, displayState);
+ }
}
}
}
@@ -1952,13 +1952,13 @@ public class XmppConnectionService extends Service {
if (jid == null) {
return;
}
- Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": processing mds item for " + jid);
final Element displayed = item.findChild("displayed", Namespace.MDS_DISPLAYED);
final Element stanzaId =
displayed == null ? null : displayed.findChild("stanza-id", Namespace.STANZA_IDS);
final String id = stanzaId == null ? null : stanzaId.getAttribute("id");
final Conversation conversation = find(account, jid);
if (id != null && conversation != null) {
+ conversation.setDisplayState(id);
markReadUpToStanzaId(conversation, id);
}
}
@@ -3381,7 +3381,7 @@ public class XmppConnectionService extends Service {
new Thread(() -> onMediaLoaded.onMediaLoaded(fileBackend.convertToAttachments(databaseBackend.getRelativeFilePaths(account, jid, limit)))).start();
}
- public void persistSelfNick(MucOptions.User self) {
+ public void persistSelfNick(final MucOptions.User self) {
final Conversation conversation = self.getConversation();
final boolean tookProposedNickFromBookmark = conversation.getMucOptions().isTookProposedNickFromBookmark();
Jid full = self.getFullJid();
@@ -3393,11 +3393,10 @@ public class XmppConnectionService extends Service {
final Bookmark bookmark = conversation.getBookmark();
final String bookmarkedNick = bookmark == null ? null : bookmark.getNick();
- if (bookmark != null && (tookProposedNickFromBookmark || TextUtils.isEmpty(bookmarkedNick)) && !full.getResource().equals(bookmarkedNick)) {
+ if (bookmark != null && (tookProposedNickFromBookmark || Strings.isNullOrEmpty(bookmarkedNick)) && !full.getResource().equals(bookmarkedNick)) {
final Account account = conversation.getAccount();
final String defaultNick = MucOptions.defaultNick(account);
- if (TextUtils.isEmpty(bookmarkedNick) && full.getResource().equals(defaultNick)) {
- Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": do not overwrite empty bookmark nick with default nick for " + conversation.getJid().asBareJid());
+ if (Strings.isNullOrEmpty(bookmarkedNick) && full.getResource().equals(defaultNick)) {
return;
}
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": persist nick '" + full.getResource() + "' into bookmark for " + conversation.getJid().asBareJid());