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;
}