diff --git a/ChatController/ChatController.csproj b/ChatController/ChatController.csproj index f9cd21c..406f321 100644 --- a/ChatController/ChatController.csproj +++ b/ChatController/ChatController.csproj @@ -46,6 +46,7 @@ ..\PrototypChat\packages\RestSharp.105.2.3\lib\net45\RestSharp.dll + diff --git a/ChatController/ChatMainControl.xaml.cs b/ChatController/ChatMainControl.xaml.cs index b39cb63..6be474c 100644 --- a/ChatController/ChatMainControl.xaml.cs +++ b/ChatController/ChatMainControl.xaml.cs @@ -319,7 +319,7 @@ namespace ChatController _ContainingWindow.Activate(); var selectedContact = _ContactList?.FirstOrDefault(f => f?.Contact.GroupId == pGroupId); - if(!(selectedContact is null)) + if(!(selectedContact?.Contact is null)) { SelectContact(selectedContact.Contact); } @@ -374,83 +374,93 @@ namespace ChatController return; } - if(Clientlist?.SelectedItem is ContactDependencyObject selectedContactDependencyObject) + if(Clientlist?.SelectedItem is ContactDependencyObject selectedContactDependencyObject && !(selectedContactDependencyObject.Contact is null)) { SelectContact(selectedContactDependencyObject.Contact); } } + // ToDo: Hier kommt es immer wieder zu einer NullPointerException private void SelectContact(Contact contact) { - if(contact is null) + try { - return; - } - - ChatMessageFileWrapper = null; - - ShouldInterruptContactsThread = true; - - StartWaitingImmediately(); - - _ScrollPrueferAktivieren = false; - - if(contact.HasUnreadMessages) - { - contact.HasUnreadMessages = false; - - Clientlist.Items.Refresh(); - OnPropertyChanged(nameof(ContactList)); - } - - var currentContact = contact; - contact.IsNewMessage = false; - - var shouldChangeIcon = _ContactList.Any(contactDependencyObject => contactDependencyObject.Contact.IsNewMessage); - if(shouldChangeIcon) - { - ContainingWindow.Icon = Utils.ConvertIconToImageSource(Resource.ownchat_favicon); - } - - CurrentContact = currentContact; - - OnPropertyChanged(nameof(IsSendButtonEnabled)); - - foreach(ContactDependencyObject item in Clientlist.Items) - { - if(item.Contact.Equals(contact)) + if(contact is null) { - Clientlist.SelectedItem = item; + return; } - } - _ChatMessages.Clear(); - OnPropertyChanged(nameof(_ChatMessages)); + ChatMessageFileWrapper = null; - Chat.LoadChatMessagesForContactAsync(currentContact, GetFirstMessage(), chatMessages => - { - this.Dispatch(() => + ShouldInterruptContactsThread = true; + + // Zeigt die Warteanimation (das Rädchen) + StartWaitingImmediately(); + + _ScrollPrueferAktivieren = false; + + if(contact.HasUnreadMessages) { - _ChatMessages.Clear(); - _ChatMessages.AddRangeIfElementsNotIn(chatMessages); - OnPropertyChanged(nameof(_ChatMessages)); + contact.HasUnreadMessages = false; - WpfUtils.ScrollToBottomOfListBox(ChatListBox); + Clientlist?.Items.Refresh(); + OnPropertyChanged(nameof(ContactList)); + } - ChatListBox.ContextMenu = Chat.ErstelleKontextMenue(); - SetContextHandler(); - _ScrollPrueferAktivieren = true; + var currentContact = contact; - ListenForMessages(); - Cursor = Cursors.Arrow; + contact.IsNewMessage = false; - WriteToNewSyncFile(); + var shouldChangeIcon = _ContactList.Any(contactDependencyObject => contactDependencyObject.Contact.IsNewMessage); + if(shouldChangeIcon) + { + ContainingWindow.Icon = Utils.ConvertIconToImageSource(Resource.ownchat_favicon); + } - ShouldInterruptContactsThread = false; + CurrentContact = currentContact; - EndWaiting(); + OnPropertyChanged(nameof(IsSendButtonEnabled)); + + foreach(ContactDependencyObject item in Clientlist.Items) + { + if(item.Contact.Equals(contact)) + { + Clientlist.SelectedItem = item; + } + } + + _ChatMessages.Clear(); + OnPropertyChanged(nameof(_ChatMessages)); + + Chat.LoadChatMessagesForContactAsync(currentContact, GetFirstMessage(), chatMessages => + { + this.Dispatch(() => + { + _ChatMessages.Clear(); + _ChatMessages.AddRangeIfElementsNotIn(chatMessages); + OnPropertyChanged(nameof(_ChatMessages)); + + WpfUtils.ScrollToBottomOfListBox(ChatListBox); + + ChatListBox.ContextMenu = Chat.ErstelleKontextMenue(); + SetContextHandler(); + _ScrollPrueferAktivieren = true; + + ListenForMessages(); + Cursor = Cursors.Arrow; + + WriteToNewSyncFile(); + + ShouldInterruptContactsThread = false; + + EndWaiting(); + }); }); - }); + } + catch(Exception exception) + { + throw; + } } private void SetContextHandler() diff --git a/ChatController/HauptKlassen/Chat.cs b/ChatController/HauptKlassen/Chat.cs index d19ad3b..6a62a5f 100644 --- a/ChatController/HauptKlassen/Chat.cs +++ b/ChatController/HauptKlassen/Chat.cs @@ -357,20 +357,20 @@ namespace ChatController.HauptKlassen return result; } - var messageId = 0; - var userName = ChatDaten.LoggedInUser.Response.User.UserName; - var sendTime = DateTime.Now; - var fileName = Path.GetFileName(pathToScaledFile); - var imageFile = GetImageFile(pathToScaledFile, out var fileSize); - var isImage = Constants.ImageFileExtensions.Contains(Path.GetExtension(pathToScaledFile).ToUpperInvariant()); - var messageText = string.IsNullOrWhiteSpace(chatBoxText) ? fileName : chatBoxText; - var filePath = isImage ? null : pathToScaledFile; - var originalImage = isImage ? pathToScaledFile : null; - var imageName = isImage ? fileName : null; + var messageId = 0; + var userName = ChatDaten.LoggedInUser.Response.User.UserName; + var sendTime = DateTime.Now; + var fileName = Path.GetFileName(pathToScaledFile); + var imageFile = GetImageFile(pathToScaledFile, out var fileSize); + var isImage = Constants.ImageFileExtensions.Contains(Path.GetExtension(pathToScaledFile).ToUpperInvariant()); + var messageText = string.IsNullOrWhiteSpace(chatBoxText) ? fileName : chatBoxText; + var filePath = isImage ? null : pathToScaledFile; + var originalImage = isImage ? pathToScaledFile : null; + var imageName = isImage ? fileName : null; var linkToThumbnail = isImage ? null : $"{ChatDaten.ServerUrl}/document.png"; - var logo = isImage ? imageFile : null; + var logo = isImage ? imageFile : null; var chatMessageType = isImage ? ChatMessageType.Image : ChatMessageType.Document; - var senderId = ChatDaten.LoggedInUser.Response.User.Oid; + var senderId = ChatDaten.LoggedInUser.Response.User.Oid; var chatMessage = new ChatMessage(groupId, messageId, userName, messageText, sendTime, true, fileSize, filePath, originalImage, imageName, linkToThumbnail, logo, chatMessageType, senderId); @@ -925,11 +925,17 @@ namespace ChatController.HauptKlassen private static List AddSeparators(List chatMessages) { + if(chatMessages is null) + { + chatMessages = new List(); + } + var messagesWithoutSeparators = chatMessages.Where(message => !message.IsSeparator).OrderBy(message => message.SendTime).ToList(); var separators = new List(); var previousMessage = messagesWithoutSeparators.OrderBy(message => message.SendTime).FirstOrDefault(); + foreach(var message in messagesWithoutSeparators.OrderBy(message => message.SendTime)) { if(!message.Equals(previousMessage) && !(previousMessage is null)) diff --git a/ChatController/Properties/AssemblyInfo.cs b/ChatController/Properties/AssemblyInfo.cs index 96c7324..b8fb540 100644 --- a/ChatController/Properties/AssemblyInfo.cs +++ b/ChatController/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // Allgemeine Informationen über eine Assembly werden über die folgenden diff --git a/ChatController/packages.config b/ChatController/packages.config index e327997..a63cb4d 100644 --- a/ChatController/packages.config +++ b/ChatController/packages.config @@ -1,5 +1,4 @@  - \ No newline at end of file diff --git a/PrototypChat/ExceptionWindow.xaml.cs b/PrototypChat/ExceptionWindow.xaml.cs index 7db6408..082d0d9 100644 --- a/PrototypChat/ExceptionWindow.xaml.cs +++ b/PrototypChat/ExceptionWindow.xaml.cs @@ -7,6 +7,7 @@ namespace ownChat public ExceptionWindow(Exception exception) { InitializeComponent(); + ExceptionViewControl.Exception = exception; }