This commit is contained in:
2023-02-15 18:43:15 +01:00
parent 7367f36132
commit 101ce32c06

View File

@@ -906,66 +906,74 @@ namespace ChatController
this.Dispatch(() => this.Dispatch(() =>
{ {
foreach (var contactDependencyObject in _ContactList) try
{ {
foreach (var newContact in updatedContacts) foreach (var contactDependencyObject in _ContactList)
{ {
if (contactDependencyObject.Contact.GroupId == newContact.GroupId) foreach (var newContact in updatedContacts)
{ {
// ReceivedMessage kann null sein! if (contactDependencyObject.Contact.GroupId == newContact.GroupId)
if (!(contactDependencyObject.Contact.ReceivedMessage is null) && !contactDependencyObject.Contact.ReceivedMessage.Id.Equals(newContact.ReceivedMessage?.Id))
{ {
contactDependencyObject.Contact.ReceivedMessage = newContact.ReceivedMessage; // ReceivedMessage kann null sein!
contactDependencyObject.Contact.TimeStamp = newContact.TimeStamp; if (!(contactDependencyObject.Contact.ReceivedMessage is null) && !contactDependencyObject.Contact.ReceivedMessage.Id.Equals(newContact.ReceivedMessage?.Id))
Contact selectedContact = null;
if(Clientlist.SelectedItem is ContactDependencyObject selectedContactDependencyObject)
{ {
selectedContact = selectedContactDependencyObject.Contact; contactDependencyObject.Contact.ReceivedMessage = newContact.ReceivedMessage;
} contactDependencyObject.Contact.TimeStamp = newContact.TimeStamp;
// Angemeldeter Benutzer Contact selectedContact = null;
var userOid = Chat.ChatDaten.LoggedInUser.Response.User.Oid;
var senderId = contactDependencyObject.Contact.ReceivedMessage?.UserId; if(Clientlist.SelectedItem is ContactDependencyObject selectedContactDependencyObject)
var receiverId = userOid;
var receiverGroupId = newContact.GroupId;
var selectedGroupId = selectedContact?.GroupId;
if (senderId != receiverId && (_IsInBackground || receiverGroupId != selectedGroupId))
{
if (!(ContainingWindow is null))
{ {
ContainingWindow.Icon = Utils.ConvertIconToImageSource(Resource.oC_favico_NewMessage); selectedContact = selectedContactDependencyObject.Contact;
} }
ShowNotification(newContact.Name, newContact.ReceivedMessage, newContact.GroupId); // Angemeldeter Benutzer
} var userOid = Chat.ChatDaten.LoggedInUser.Response.User.Oid;
// Wenn der momentan ausgewählte Kontakt der aktuelle Kontakt in der Schleife ist, werden die Nachrichten nicht als ungelesen angezeigt, sonst schon. var senderId = contactDependencyObject.Contact.ReceivedMessage?.UserId;
if (!(CurrentContact is null) && newContact.GroupId == CurrentContact.GroupId) var receiverId = userOid;
{ var receiverGroupId = newContact.GroupId;
contactDependencyObject.Contact.HasUnreadMessages = false; var selectedGroupId = selectedContact?.GroupId;
}
else if (senderId != receiverId && (_IsInBackground || receiverGroupId != selectedGroupId))
{ {
contactDependencyObject.Contact.HasUnreadMessages = true; if (!(ContainingWindow is null))
contactDependencyObject.Contact.IsNewMessage = true; {
ContainingWindow.Icon = Utils.ConvertIconToImageSource(Resource.oC_favico_NewMessage);
}
ShowNotification(newContact.Name, newContact.ReceivedMessage, newContact.GroupId);
}
// Wenn der momentan ausgewählte Kontakt der aktuelle Kontakt in der Schleife ist, werden die Nachrichten nicht als ungelesen angezeigt, sonst schon.
if (!(CurrentContact is null) && newContact.GroupId == CurrentContact.GroupId)
{
contactDependencyObject.Contact.HasUnreadMessages = false;
}
else
{
contactDependencyObject.Contact.HasUnreadMessages = true;
contactDependencyObject.Contact.IsNewMessage = true;
}
} }
} }
} }
if (!updatedContacts.Contains(contactDependencyObject.Contact))
{
_ContactList.ToList().Remove(contactDependencyObject);
}
} }
if (!updatedContacts.Contains(contactDependencyObject.Contact)) ContactList.Sort((x, y) => DateTime.Compare(y.Contact.TimeStamp, x.Contact.TimeStamp));
{ OnPropertyChanged(nameof(ChatMessages));
_ContactList.ToList().Remove(contactDependencyObject); OnPropertyChanged(nameof(ContactList));
} }
catch(Exception exception)
{
Console.WriteLine(exception);
throw;
} }
ContactList.Sort((x, y) => DateTime.Compare(y.Contact.TimeStamp, x.Contact.TimeStamp));
OnPropertyChanged(nameof(ChatMessages));
OnPropertyChanged(nameof(ContactList));
}); });
}); });
} }