remember mds display state until after mam catchup
This commit is contained in:
parent
dd73b01ab1
commit
6b37b6377b
|
@ -85,6 +85,7 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
|
||||||
private ChatState mOutgoingChatState = Config.DEFAULT_CHAT_STATE;
|
private ChatState mOutgoingChatState = Config.DEFAULT_CHAT_STATE;
|
||||||
private ChatState mIncomingChatState = Config.DEFAULT_CHAT_STATE;
|
private ChatState mIncomingChatState = Config.DEFAULT_CHAT_STATE;
|
||||||
private String mFirstMamReference = null;
|
private String mFirstMamReference = null;
|
||||||
|
private String displayState = null;
|
||||||
|
|
||||||
public Conversation(final String name, final Account account, final Jid contactJid,
|
public Conversation(final String name, final Account account, final Jid contactJid,
|
||||||
final int mode) {
|
final int mode) {
|
||||||
|
@ -1121,6 +1122,14 @@ public class Conversation extends AbstractEntity implements Blockable, Comparabl
|
||||||
return getName().toString();
|
return getName().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDisplayState(final String stanzaId) {
|
||||||
|
this.displayState = stanzaId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayState() {
|
||||||
|
return this.displayState;
|
||||||
|
}
|
||||||
|
|
||||||
public interface OnMessageFound {
|
public interface OnMessageFound {
|
||||||
void onMessageFound(final Message message);
|
void onMessageFound(final Message message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -282,10 +282,18 @@ public class MessageArchiveService implements OnAdvancedStreamFeaturesLoaded {
|
||||||
if (conversation != null) {
|
if (conversation != null) {
|
||||||
conversation.sort();
|
conversation.sort();
|
||||||
conversation.setHasMessagesLeftOnServer(!done);
|
conversation.setHasMessagesLeftOnServer(!done);
|
||||||
|
final var displayState = conversation.getDisplayState();
|
||||||
|
if (displayState != null) {
|
||||||
|
mXmppConnectionService.markReadUpToStanzaId(conversation, displayState);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for (Conversation tmp : this.mXmppConnectionService.getConversations()) {
|
for (final Conversation tmp : this.mXmppConnectionService.getConversations()) {
|
||||||
if (tmp.getAccount() == query.getAccount()) {
|
if (tmp.getAccount() == query.getAccount()) {
|
||||||
tmp.sort();
|
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) {
|
if (jid == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": processing mds item for " + jid);
|
|
||||||
final Element displayed = item.findChild("displayed", Namespace.MDS_DISPLAYED);
|
final Element displayed = item.findChild("displayed", Namespace.MDS_DISPLAYED);
|
||||||
final Element stanzaId =
|
final Element stanzaId =
|
||||||
displayed == null ? null : displayed.findChild("stanza-id", Namespace.STANZA_IDS);
|
displayed == null ? null : displayed.findChild("stanza-id", Namespace.STANZA_IDS);
|
||||||
final String id = stanzaId == null ? null : stanzaId.getAttribute("id");
|
final String id = stanzaId == null ? null : stanzaId.getAttribute("id");
|
||||||
final Conversation conversation = find(account, jid);
|
final Conversation conversation = find(account, jid);
|
||||||
if (id != null && conversation != null) {
|
if (id != null && conversation != null) {
|
||||||
|
conversation.setDisplayState(id);
|
||||||
markReadUpToStanzaId(conversation, 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();
|
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 Conversation conversation = self.getConversation();
|
||||||
final boolean tookProposedNickFromBookmark = conversation.getMucOptions().isTookProposedNickFromBookmark();
|
final boolean tookProposedNickFromBookmark = conversation.getMucOptions().isTookProposedNickFromBookmark();
|
||||||
Jid full = self.getFullJid();
|
Jid full = self.getFullJid();
|
||||||
|
@ -3393,11 +3393,10 @@ public class XmppConnectionService extends Service {
|
||||||
|
|
||||||
final Bookmark bookmark = conversation.getBookmark();
|
final Bookmark bookmark = conversation.getBookmark();
|
||||||
final String bookmarkedNick = bookmark == null ? null : bookmark.getNick();
|
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 Account account = conversation.getAccount();
|
||||||
final String defaultNick = MucOptions.defaultNick(account);
|
final String defaultNick = MucOptions.defaultNick(account);
|
||||||
if (TextUtils.isEmpty(bookmarkedNick) && full.getResource().equals(defaultNick)) {
|
if (Strings.isNullOrEmpty(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());
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": persist nick '" + full.getResource() + "' into bookmark for " + conversation.getJid().asBareJid());
|
Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": persist nick '" + full.getResource() + "' into bookmark for " + conversation.getJid().asBareJid());
|
||||||
|
|
Loading…
Reference in a new issue