Adjust message queries for handshake sync
This causes problems with group messages as the received date is null sometimes even though the status is RECEIVED. The ReceivedMessageProcessor on the client filters out the synced messages at the moment.
This commit is contained in:
@ -123,7 +123,11 @@ public final class LoginCredentialProcessor implements ObjectProcessor<LoginCred
|
||||
|
||||
for (var msg : pendingMessages) {
|
||||
final var msgCommon = msg.toCommon();
|
||||
if (msg.getStatus() == SENT) {
|
||||
if (msg.getCreationDate().isAfter(credentials.getLastSync())) {
|
||||
|
||||
// Sync without side effects
|
||||
writeProxy.write(socketID, msgCommon);
|
||||
} else if (msg.getStatus() == SENT) {
|
||||
|
||||
// Send the message
|
||||
writeProxy.write(socketID, msgCommon);
|
||||
@ -146,34 +150,38 @@ public final class LoginCredentialProcessor implements ObjectProcessor<LoginCred
|
||||
|
||||
// Deliver the message to the user if he hasn't received it yet
|
||||
if (gmsg.getMemberMessageStatus().get(user.getID()) == SENT) {
|
||||
gmsg.getMemberMessageStatus().replace(user.getID(), RECEIVED);
|
||||
if (gmsg.getMemberMessageStatus().replace(user.getID(), RECEIVED) != RECEIVED) {
|
||||
|
||||
gmsg.setLastStatusChangeDate(Instant.now());
|
||||
gmsg.setLastStatusChangeDate(Instant.now());
|
||||
|
||||
writeProxy.write(socketID, gmsgCommon);
|
||||
writeProxy.write(socketID, gmsgCommon);
|
||||
|
||||
// Notify all online group members about the status change
|
||||
writeProxy.writeToOnlineContacts(gmsg.getRecipient().getContacts(),
|
||||
new GroupMessageStatusChange(gmsg.getID(), RECEIVED, Instant
|
||||
.now(),
|
||||
connectionManager.getUserIDBySocketID(socketID)));
|
||||
|
||||
if (Collections.min(gmsg.getMemberMessageStatus().values()) == RECEIVED) {
|
||||
gmsg.received();
|
||||
|
||||
// Notify online members about the status change
|
||||
// Notify all online group members about the status change
|
||||
writeProxy.writeToOnlineContacts(gmsg.getRecipient().getContacts(),
|
||||
new MessageStatusChange(gmsg.getID(), gmsg.getStatus(), Instant.now()));
|
||||
}
|
||||
new GroupMessageStatusChange(gmsg.getID(), RECEIVED, Instant.now(), connectionManager.getUserIDBySocketID(socketID)));
|
||||
|
||||
PersistenceManager.getInstance().updateMessage(gmsg);
|
||||
if (Collections.min(gmsg.getMemberMessageStatus().values()) == RECEIVED) {
|
||||
gmsg.received();
|
||||
|
||||
// Notify online members about the status change
|
||||
writeProxy.writeToOnlineContacts(gmsg.getRecipient().getContacts(),
|
||||
new MessageStatusChange(gmsg.getID(), gmsg.getStatus(), Instant.now()));
|
||||
}
|
||||
|
||||
PersistenceManager.getInstance().updateMessage(gmsg);
|
||||
} else {
|
||||
|
||||
// Just send the message without updating if it was received in the past
|
||||
writeProxy.write(socketID, gmsgCommon);
|
||||
}
|
||||
} else {
|
||||
|
||||
// Sending group message status changes
|
||||
if (gmsg.getStatus() == SENT && gmsg.getLastStatusChangeDate().isAfter(gmsg.getCreationDate())
|
||||
|| gmsg.getStatus() == RECEIVED && gmsg.getLastStatusChangeDate().isAfter(gmsg.getReceivedDate())) {
|
||||
gmsg.getMemberMessageStatus().forEach((memberID, memberStatus) ->
|
||||
writeProxy.write(socketID, new GroupMessageStatusChange(gmsg.getID(), memberStatus, gmsg.getLastStatusChangeDate(), memberID)));
|
||||
gmsg.getMemberMessageStatus()
|
||||
.forEach((memberID, memberStatus) -> writeProxy.write(socketID,
|
||||
new GroupMessageStatusChange(gmsg.getID(), memberStatus, gmsg.getLastStatusChangeDate(), memberID)));
|
||||
}
|
||||
|
||||
// Deliver just a status change instead of the whole message
|
||||
|
Reference in New Issue
Block a user