Nullabfrage hinzugefügt

This commit is contained in:
2023-06-28 19:04:03 +02:00
parent 6ea4a47b98
commit c691dd281f
6 changed files with 88 additions and 72 deletions

View File

@@ -46,6 +46,7 @@
<HintPath>..\PrototypChat\packages\RestSharp.105.2.3\lib\net45\RestSharp.dll</HintPath> <HintPath>..\PrototypChat\packages\RestSharp.105.2.3\lib\net45\RestSharp.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Web" /> <Reference Include="System.Web" />

View File

@@ -319,7 +319,7 @@ namespace ChatController
_ContainingWindow.Activate(); _ContainingWindow.Activate();
var selectedContact = _ContactList?.FirstOrDefault(f => f?.Contact.GroupId == pGroupId); var selectedContact = _ContactList?.FirstOrDefault(f => f?.Contact.GroupId == pGroupId);
if(!(selectedContact is null)) if(!(selectedContact?.Contact is null))
{ {
SelectContact(selectedContact.Contact); SelectContact(selectedContact.Contact);
} }
@@ -374,83 +374,93 @@ namespace ChatController
return; return;
} }
if(Clientlist?.SelectedItem is ContactDependencyObject selectedContactDependencyObject) if(Clientlist?.SelectedItem is ContactDependencyObject selectedContactDependencyObject && !(selectedContactDependencyObject.Contact is null))
{ {
SelectContact(selectedContactDependencyObject.Contact); SelectContact(selectedContactDependencyObject.Contact);
} }
} }
// ToDo: Hier kommt es immer wieder zu einer NullPointerException
private void SelectContact(Contact contact) private void SelectContact(Contact contact)
{ {
if(contact is null) try
{ {
return; if(contact is null)
}
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))
{ {
Clientlist.SelectedItem = item; return;
} }
}
_ChatMessages.Clear(); ChatMessageFileWrapper = null;
OnPropertyChanged(nameof(_ChatMessages));
Chat.LoadChatMessagesForContactAsync(currentContact, GetFirstMessage(), chatMessages => ShouldInterruptContactsThread = true;
{
this.Dispatch(() => // Zeigt die Warteanimation (das Rädchen)
StartWaitingImmediately();
_ScrollPrueferAktivieren = false;
if(contact.HasUnreadMessages)
{ {
_ChatMessages.Clear(); contact.HasUnreadMessages = false;
_ChatMessages.AddRangeIfElementsNotIn(chatMessages);
OnPropertyChanged(nameof(_ChatMessages));
WpfUtils.ScrollToBottomOfListBox(ChatListBox); Clientlist?.Items.Refresh();
OnPropertyChanged(nameof(ContactList));
}
ChatListBox.ContextMenu = Chat.ErstelleKontextMenue(); var currentContact = contact;
SetContextHandler();
_ScrollPrueferAktivieren = true;
ListenForMessages(); contact.IsNewMessage = false;
Cursor = Cursors.Arrow;
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() private void SetContextHandler()

View File

@@ -357,20 +357,20 @@ namespace ChatController.HauptKlassen
return result; return result;
} }
var messageId = 0; var messageId = 0;
var userName = ChatDaten.LoggedInUser.Response.User.UserName; var userName = ChatDaten.LoggedInUser.Response.User.UserName;
var sendTime = DateTime.Now; var sendTime = DateTime.Now;
var fileName = Path.GetFileName(pathToScaledFile); var fileName = Path.GetFileName(pathToScaledFile);
var imageFile = GetImageFile(pathToScaledFile, out var fileSize); var imageFile = GetImageFile(pathToScaledFile, out var fileSize);
var isImage = Constants.ImageFileExtensions.Contains(Path.GetExtension(pathToScaledFile).ToUpperInvariant()); var isImage = Constants.ImageFileExtensions.Contains(Path.GetExtension(pathToScaledFile).ToUpperInvariant());
var messageText = string.IsNullOrWhiteSpace(chatBoxText) ? fileName : chatBoxText; var messageText = string.IsNullOrWhiteSpace(chatBoxText) ? fileName : chatBoxText;
var filePath = isImage ? null : pathToScaledFile; var filePath = isImage ? null : pathToScaledFile;
var originalImage = isImage ? pathToScaledFile : null; var originalImage = isImage ? pathToScaledFile : null;
var imageName = isImage ? fileName : null; var imageName = isImage ? fileName : null;
var linkToThumbnail = isImage ? null : $"{ChatDaten.ServerUrl}/document.png"; 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 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); 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<ChatMessage> AddSeparators(List<ChatMessage> chatMessages) private static List<ChatMessage> AddSeparators(List<ChatMessage> chatMessages)
{ {
if(chatMessages is null)
{
chatMessages = new List<ChatMessage>();
}
var messagesWithoutSeparators = chatMessages.Where(message => !message.IsSeparator).OrderBy(message => message.SendTime).ToList(); var messagesWithoutSeparators = chatMessages.Where(message => !message.IsSeparator).OrderBy(message => message.SendTime).ToList();
var separators = new List<ChatMessage>(); var separators = new List<ChatMessage>();
var previousMessage = messagesWithoutSeparators.OrderBy(message => message.SendTime).FirstOrDefault(); var previousMessage = messagesWithoutSeparators.OrderBy(message => message.SendTime).FirstOrDefault();
foreach(var message in messagesWithoutSeparators.OrderBy(message => message.SendTime)) foreach(var message in messagesWithoutSeparators.OrderBy(message => message.SendTime))
{ {
if(!message.Equals(previousMessage) && !(previousMessage is null)) if(!message.Equals(previousMessage) && !(previousMessage is null))

View File

@@ -1,5 +1,4 @@
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden // Allgemeine Informationen über eine Assembly werden über die folgenden

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="ClrHeapAllocationAnalyzer" version="3.0.0" targetFramework="net45" />
<package id="RestSharp" version="105.2.3" targetFramework="net45" /> <package id="RestSharp" version="105.2.3" targetFramework="net45" />
</packages> </packages>

View File

@@ -7,6 +7,7 @@ namespace ownChat
public ExceptionWindow(Exception exception) public ExceptionWindow(Exception exception)
{ {
InitializeComponent(); InitializeComponent();
ExceptionViewControl.Exception = exception; ExceptionViewControl.Exception = exception;
} }