Nullabfrage hinzugefügt
This commit is contained in:
@@ -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" />
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -7,6 +7,7 @@ namespace ownChat
|
|||||||
public ExceptionWindow(Exception exception)
|
public ExceptionWindow(Exception exception)
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
ExceptionViewControl.Exception = exception;
|
ExceptionViewControl.Exception = exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user