Files
Chat/ChatController/ChatKlassen/ChatMessage.cs
Lyndon 3fbf8afe0d Anzeige von neuen Nachrichten und die Ladegeschwindigkeit von Konversationen verbessert
Aufgrund der Benutzung von Threads anstelle von Timern hat das Aufrufen der einzelnen Konversationen ca. 2 Sekunden gedauert.
Die Synchronisationsdatei enthält, ob die letzte Nachrichte bereits gelesen wurde, sodass man,
wenn man den Chat beendet bevor man eine neue Nachricht gelesen hat, diese nach dem erneuten Öffnen immer noch als neu angezeigt wird.

- Dateinamen verbessert
- Diverse Verbesserungen des Codes
2019-05-14 13:37:20 +02:00

268 lines
9.2 KiB
C#

using System;
using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Windows;
using System.Windows.Media;
namespace ChatController.ChatKlassen
{
public class ChatMessage
{
//Chat-Ansicht
public ChatMessage(string username, string message, DateTime sendtime, bool isme, long pGroupId)
{
Username = username;
UserMessage = message;
SendTime = sendtime;
IsMyMessage = isme;
Farbgebung(isme);
VisibilityRegelung(IsHyperlink(message) ? "HyperlinkMessage" : "Message");
GroupId = pGroupId;
}
// Image-Ansicht
public ChatMessage(string username, string message, DateTime sendtime, bool isme, ImageSource image, string originalImage, string imageName, long pGroupId)
{
Username = username;
UserMessage = message;
SendTime = sendtime;
ImageSources = image;
IsMyMessage = isme;
OriginalImage = originalImage;
OriginalImageName = imageName;
Farbgebung(isme);
VisibilityRegelung("Image");
GroupId = pGroupId;
}
//Dokumenten-Ansicht
public ChatMessage(string pUsername, string pMessageText, DateTime pSendTime, string pSmallerImagePath, bool pIsLoggedInUsersMessage, string pUrl, long pGroupId)
{
Username = pUsername;
UserMessage = pMessageText;
SendTime = pSendTime;
IsMyMessage = pIsLoggedInUsersMessage;
FilePath = pUrl;
Farbgebung(pIsLoggedInUsersMessage);
Thumbnail = Utilities.Utils.CreateImageSourceFromPath(pSmallerImagePath);
VisibilityRegelung("Dokumente");
GroupId = pGroupId;
}
public ImageSource Thumbnail { get; }
private void Farbgebung(bool isme)
{
if (isme)
{
ChatColor = new BrushConverter().ConvertFromString("#ff5e00") as SolidColorBrush;
Posi = "Right";
}
else
{
ChatColor = new BrushConverter().ConvertFromString("#FFFFFF") as SolidColorBrush; //"#cccccc"
Posi = "Left";
}
_farbeRechtsColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush;
_farbeLinksColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush;
}
private void VisibilityRegelung(string Ansicht)
{
switch (Ansicht)
{
case "Message":
ChatVisibility = Visibility.Visible;
HyperlinkVisibility = Visibility.Collapsed;
_pictureVisibility = Visibility.Collapsed;
DokumentVisibility = Visibility.Collapsed;
_gifPictureVisibility = Visibility.Collapsed;
_picturePlaceHolderVisibility = Visibility.Collapsed;
break;
case "HyperlinkMessage":
HyperlinkVisibility = Visibility.Visible;
ChatVisibility = Visibility.Collapsed;
_pictureVisibility = Visibility.Collapsed;
DokumentVisibility = Visibility.Collapsed;
_gifPictureVisibility = Visibility.Collapsed;
_picturePlaceHolderVisibility = Visibility.Collapsed;
break;
case "Image":
_pictureVisibility = Visibility.Visible;
ChatVisibility = Visibility.Collapsed;
HyperlinkVisibility = Visibility.Collapsed;
DokumentVisibility = Visibility.Collapsed;
_picturePlaceHolderVisibility = Visibility.Collapsed;
break;
case "Default_Image":
_picturePlaceHolderVisibility = Visibility.Visible;
_pictureVisibility = Visibility.Collapsed;
ChatVisibility = Visibility.Collapsed;
HyperlinkVisibility = Visibility.Collapsed;
DokumentVisibility = Visibility.Collapsed;
break;
case "Dokumente":
DokumentVisibility = Visibility.Visible;
_pictureVisibility = Visibility.Collapsed;
ChatVisibility = Visibility.Collapsed;
HyperlinkVisibility = Visibility.Collapsed;
_picturePlaceHolderVisibility = Visibility.Collapsed;
break;
}
}
private static readonly Regex UrlRegex = new Regex(@"(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~/|/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?");
public static bool IsHyperlink(string word)
{
try
{
if (word.IndexOfAny(@":.\/".ToCharArray()) != -1)
{
if (Uri.IsWellFormedUriString(word, UriKind.Absolute))
{
return word.StartsWith("http://");
}
if (UrlRegex.IsMatch(word))
{
var uri = new Uri(word, UriKind.RelativeOrAbsolute);
if (!uri.IsAbsoluteUri)
{
uri = new Uri(@"http://" + word, UriKind.Absolute);
}
if (uri.IsAbsoluteUri)
{
return true;
}
}
else
{
return false;
}
}
}
catch (Exception e)
{
return false;
}
return false;
}
public bool IsMyMessage { get; set; }
public string Username { get; }
public string UserMessage { get; }
public DateTime SendTime { get; }
public string UserTimeStringLeft => IsMyMessage ? null : Username;
public string UserTimeStringRight => SendTimeString;
public string SendTimeString => SendTime.Date == DateTime.Today ? $"Heute {SendTime:HH:mm}" : SendTime.ToString("dd.MMM HH:mm");
public Brush ChatColor { get; private set; }
public string Posi { get; private set; }
public string OriginalImage { get; }
public string OriginalImageName { get; }
public Visibility ChatVisibility { get; set; }
public Visibility HyperlinkVisibility { get; set; }
private Visibility _pictureVisibility;
public Visibility PictureVisibility
{
get => _pictureVisibility;
set
{
_pictureVisibility = value;
OnPropertyChanged(nameof(PictureVisibility));
}
}
private Visibility _picturePlaceHolderVisibility;
public Visibility PicturePlaceHolderVisibility
{
get => _picturePlaceHolderVisibility;
set
{
_picturePlaceHolderVisibility = value;
OnPropertyChanged(nameof(PicturePlaceHolderVisibility));
}
}
private Visibility _gifPictureVisibility;
public Visibility GifPictureVisibility
{
get => _gifPictureVisibility;
set
{
_gifPictureVisibility = value;
OnPropertyChanged(nameof(GifPictureVisibility));
}
}
public Visibility DokumentVisibility { get; set; }
public ImageSource ImageSources { get; }
public object FilePath { get; }
public long? ChatMessageOid { get; private set; }
private Brush _farbeLinksColor;
public Brush FarbeLinksColor
{
get => _farbeLinksColor;
set
{
_farbeLinksColor = value;
OnPropertyChanged(nameof(FarbeLinksColor));
}
}
private Brush _farbeRechtsColor;
public Brush FarbeRechtsColor
{
get => _farbeRechtsColor;
set
{
_farbeRechtsColor = value;
OnPropertyChanged(nameof(FarbeRechtsColor));
}
}
public long GroupId { get; }
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
handler?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}