2017-12-11 14:32:56 +01:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
|
using System.Windows;
|
|
|
|
|
|
using System.Windows.Media;
|
|
|
|
|
|
|
|
|
|
|
|
namespace ChatController.ChatKlassen
|
|
|
|
|
|
{
|
|
|
|
|
|
public class ChatMessage
|
|
|
|
|
|
{
|
2019-04-02 13:43:30 +02:00
|
|
|
|
//Chat-Ansicht
|
2019-05-14 13:37:20 +02:00
|
|
|
|
public ChatMessage(string username, string message, DateTime sendtime, bool isme, long pGroupId)
|
2017-12-11 14:32:56 +01:00
|
|
|
|
{
|
|
|
|
|
|
Username = username;
|
|
|
|
|
|
UserMessage = message;
|
|
|
|
|
|
SendTime = sendtime;
|
|
|
|
|
|
IsMyMessage = isme;
|
|
|
|
|
|
|
|
|
|
|
|
Farbgebung(isme);
|
2019-04-02 13:43:30 +02:00
|
|
|
|
|
|
|
|
|
|
VisibilityRegelung(IsHyperlink(message) ? "HyperlinkMessage" : "Message");
|
2019-05-14 13:37:20 +02:00
|
|
|
|
|
|
|
|
|
|
GroupId = pGroupId;
|
2017-12-11 14:32:56 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-04-02 13:43:30 +02:00
|
|
|
|
// Image-Ansicht
|
2019-05-14 13:37:20 +02:00
|
|
|
|
public ChatMessage(string username, string message, DateTime sendtime, bool isme, ImageSource image, string originalImage, string imageName, long pGroupId)
|
2017-12-11 14:32:56 +01:00
|
|
|
|
{
|
|
|
|
|
|
Username = username;
|
|
|
|
|
|
UserMessage = message;
|
|
|
|
|
|
SendTime = sendtime;
|
|
|
|
|
|
ImageSources = image;
|
|
|
|
|
|
IsMyMessage = isme;
|
|
|
|
|
|
|
|
|
|
|
|
OriginalImage = originalImage;
|
|
|
|
|
|
OriginalImageName = imageName;
|
|
|
|
|
|
|
|
|
|
|
|
Farbgebung(isme);
|
|
|
|
|
|
|
2019-05-14 13:37:20 +02:00
|
|
|
|
VisibilityRegelung("Image");
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
2019-05-14 13:37:20 +02:00
|
|
|
|
GroupId = pGroupId;
|
2017-12-11 14:32:56 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-04-02 13:43:30 +02:00
|
|
|
|
//Dokumenten-Ansicht
|
2019-05-14 13:37:20 +02:00
|
|
|
|
public ChatMessage(string pUsername, string pMessageText, DateTime pSendTime, string pSmallerImagePath, bool pIsLoggedInUsersMessage, string pUrl, long pGroupId)
|
2017-12-11 14:32:56 +01:00
|
|
|
|
{
|
2019-05-14 13:37:20 +02:00
|
|
|
|
Username = pUsername;
|
|
|
|
|
|
UserMessage = pMessageText;
|
|
|
|
|
|
SendTime = pSendTime;
|
|
|
|
|
|
IsMyMessage = pIsLoggedInUsersMessage;
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
2019-05-14 13:37:20 +02:00
|
|
|
|
FilePath = pUrl;
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
2019-05-14 13:37:20 +02:00
|
|
|
|
Farbgebung(pIsLoggedInUsersMessage);
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
2019-04-02 13:43:30 +02:00
|
|
|
|
Thumbnail = Utilities.Utils.CreateImageSourceFromPath(pSmallerImagePath);
|
|
|
|
|
|
|
|
|
|
|
|
VisibilityRegelung("Dokumente");
|
2019-05-14 13:37:20 +02:00
|
|
|
|
|
|
|
|
|
|
GroupId = pGroupId;
|
2017-12-11 14:32:56 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
2019-04-02 13:43:30 +02:00
|
|
|
|
public ImageSource Thumbnail { get; }
|
|
|
|
|
|
|
2017-12-11 14:32:56 +01:00
|
|
|
|
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";
|
|
|
|
|
|
}
|
2019-05-14 13:37:20 +02:00
|
|
|
|
|
|
|
|
|
|
_farbeRechtsColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush;
|
|
|
|
|
|
_farbeLinksColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush;
|
2017-12-11 14:32:56 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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))
|
|
|
|
|
|
{
|
2019-04-02 13:43:30 +02:00
|
|
|
|
return word.StartsWith("http://");
|
2017-12-11 14:32:56 +01:00
|
|
|
|
}
|
2019-04-02 13:43:30 +02:00
|
|
|
|
|
|
|
|
|
|
if (UrlRegex.IsMatch(word))
|
2017-12-11 14:32:56 +01:00
|
|
|
|
{
|
2019-04-02 13:43:30 +02:00
|
|
|
|
var uri = new Uri(word, UriKind.RelativeOrAbsolute);
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
|
|
|
|
|
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; }
|
2019-04-02 13:43:30 +02:00
|
|
|
|
public string Username { get; }
|
|
|
|
|
|
public string UserMessage { get; }
|
|
|
|
|
|
public DateTime SendTime { get; }
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
2019-04-02 13:43:30 +02:00
|
|
|
|
public string UserTimeStringLeft => IsMyMessage ? null : Username;
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
2019-04-02 13:43:30 +02:00
|
|
|
|
public string UserTimeStringRight => SendTimeString;
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
2019-04-02 13:43:30 +02:00
|
|
|
|
public string SendTimeString => SendTime.Date == DateTime.Today ? $"Heute {SendTime:HH:mm}" : SendTime.ToString("dd.MMM HH:mm");
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
|
|
|
|
|
public Brush ChatColor { get; private set; }
|
|
|
|
|
|
|
|
|
|
|
|
public string Posi { get; private set; }
|
|
|
|
|
|
|
2019-04-02 13:43:30 +02:00
|
|
|
|
public string OriginalImage { get; }
|
|
|
|
|
|
public string OriginalImageName { get; }
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
|
|
|
|
|
public Visibility ChatVisibility { get; set; }
|
|
|
|
|
|
public Visibility HyperlinkVisibility { get; set; }
|
|
|
|
|
|
|
|
|
|
|
|
private Visibility _pictureVisibility;
|
2019-04-02 13:43:30 +02:00
|
|
|
|
public Visibility PictureVisibility
|
|
|
|
|
|
{
|
|
|
|
|
|
get => _pictureVisibility;
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
_pictureVisibility = value;
|
|
|
|
|
|
OnPropertyChanged(nameof(PictureVisibility));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
|
|
|
|
|
private Visibility _picturePlaceHolderVisibility;
|
2019-04-02 13:43:30 +02:00
|
|
|
|
public Visibility PicturePlaceHolderVisibility
|
|
|
|
|
|
{
|
|
|
|
|
|
get => _picturePlaceHolderVisibility;
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
_picturePlaceHolderVisibility = value;
|
|
|
|
|
|
OnPropertyChanged(nameof(PicturePlaceHolderVisibility));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
|
|
|
|
|
private Visibility _gifPictureVisibility;
|
2019-04-02 13:43:30 +02:00
|
|
|
|
public Visibility GifPictureVisibility
|
|
|
|
|
|
{
|
|
|
|
|
|
get => _gifPictureVisibility;
|
|
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
_gifPictureVisibility = value;
|
|
|
|
|
|
OnPropertyChanged(nameof(GifPictureVisibility));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
|
|
|
|
|
public Visibility DokumentVisibility { get; set; }
|
2019-04-02 13:43:30 +02:00
|
|
|
|
public ImageSource ImageSources { get; }
|
2019-05-14 13:37:20 +02:00
|
|
|
|
public object FilePath { get; }
|
2017-12-11 14:32:56 +01:00
|
|
|
|
|
|
|
|
|
|
public long? ChatMessageOid { get; private set; }
|
|
|
|
|
|
|
|
|
|
|
|
private Brush _farbeLinksColor;
|
|
|
|
|
|
public Brush FarbeLinksColor
|
|
|
|
|
|
{
|
2019-04-02 13:43:30 +02:00
|
|
|
|
get => _farbeLinksColor;
|
2017-12-11 14:32:56 +01:00
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
_farbeLinksColor = value;
|
2019-04-02 13:43:30 +02:00
|
|
|
|
OnPropertyChanged(nameof(FarbeLinksColor));
|
2017-12-11 14:32:56 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private Brush _farbeRechtsColor;
|
|
|
|
|
|
public Brush FarbeRechtsColor
|
|
|
|
|
|
{
|
2019-04-02 13:43:30 +02:00
|
|
|
|
get => _farbeRechtsColor;
|
2017-12-11 14:32:56 +01:00
|
|
|
|
set
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
_farbeRechtsColor = value;
|
2019-04-02 13:43:30 +02:00
|
|
|
|
OnPropertyChanged(nameof(FarbeRechtsColor));
|
2017-12-11 14:32:56 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2019-05-14 13:37:20 +02:00
|
|
|
|
public long GroupId { get; }
|
|
|
|
|
|
|
2017-12-11 14:32:56 +01:00
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
|
|
|
|
|
|
|
|
protected virtual void OnPropertyChanged(string propertyName)
|
|
|
|
|
|
{
|
|
|
|
|
|
var handler = PropertyChanged;
|
2019-04-02 13:43:30 +02:00
|
|
|
|
handler?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
2017-12-11 14:32:56 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|