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) { Username = username; UserMessage = message; SendTime = sendtime; IsMyMessage = isme; Farbgebung(isme); if (IsHyperlink(message)) { VisibilityRegelung("HyperlinkMessage"); } else { VisibilityRegelung("Message"); } } // Image Ansicht public ChatMessage(string username, string message, DateTime sendtime, bool isme, ImageSource image, string originalImage, string imageName) { Username = username; UserMessage = message; SendTime = sendtime; ImageSources = image; IsMyMessage = isme; OriginalImage = originalImage; OriginalImageName = imageName; Farbgebung(isme); VisibilityRegelung("Image"); } //Image PlaceHolder | wird nicht benutzt und wird nicht gebraucht ? public ChatMessage(string username, string message, DateTime sendtime, bool isme, string originalImage, string imageName) { Username = username; UserMessage = message; SendTime = sendtime; IsMyMessage = isme; OriginalImage = originalImage; OriginalImageName = imageName; Farbgebung(isme); VisibilityRegelung("Default_Image"); } //Dokument Ansicht public ChatMessage(string username, string message, DateTime sendtime, bool isme, string url) { Username = username; UserMessage = message; SendTime = sendtime; IsMyMessage = isme; Dokpfad = (object) url; Farbgebung(isme); VisibilityRegelung("Dokumente"); } #region Farbgebung private void Farbgebung(bool isme) { if (isme) { ChatColor = new BrushConverter().ConvertFromString("#ff5e00") as SolidColorBrush; Posi = "Right"; _farbeRechtsColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush; _farbeLinksColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush; } 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; } } #endregion #region Visibility Regelung 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; } } #endregion #region Hyperlink Detection 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) { // First check to make sure the word has at least one of the characters we need to make a hyperlink try { if (word.IndexOfAny(@":.\/".ToCharArray()) != -1) { if (Uri.IsWellFormedUriString(word, UriKind.Absolute)) { // The string is an Absolute URI if (word.StartsWith("http://")) { return true; } else { return false; } } else if (UrlRegex.IsMatch(word)) { //hier der Bereich hin der die uri splittet wenn neben dem link auch text gesendet wird Uri uri = new Uri(word, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri) { // rebuild it it with http to turn it into an Absolute URI uri = new Uri(@"http://" + word, UriKind.Absolute); } if (uri.IsAbsoluteUri) { return true; } } else { return false; } } } catch (Exception e) { return false; } return false; } #endregion #region Variablen public bool IsMyMessage { get; set; } public string Username { get; private set; } public string UserMessage { get; private set; } public DateTime SendTime { get; private set; } public string UserTimeStringLeft { get { if (IsMyMessage) { return null; } return Username; //String.Format("{0} {1}", Username, SendTimeString); } } public string UserTimeStringRight { get { //if (!IsMyMessage) //{ // return null; //} return SendTimeString; } } public string SendTimeString { get { if (SendTime.Date == DateTime.Today) { return String.Format("Heute {0:HH:mm}", SendTime); } return SendTime.ToString("dd.MMM HH:mm"); } } //public long MessagePersonOid { get; private set; } public Brush ChatColor { get; private set; } public string Posi { get; private set; } public string OriginalImage { get; private set; } public string OriginalImageName { get; private set; } public Visibility ChatVisibility { get; set; } public Visibility HyperlinkVisibility { get; set; } private Visibility _pictureVisibility; public Visibility PictureVisibility { get { return _pictureVisibility; } set { _pictureVisibility = value; OnPropertyChanged("PictureVisibility"); } } private Visibility _picturePlaceHolderVisibility; public Visibility PicturePlaceHolderVisibility { get { return _picturePlaceHolderVisibility; } set { _picturePlaceHolderVisibility = value; OnPropertyChanged("PicturePlaceHolderVisibility"); } } private Visibility _gifPictureVisibility; public Visibility GifPictureVisibility { get { return _gifPictureVisibility; } set { _gifPictureVisibility = value; OnPropertyChanged("GifPictureVisibility"); } } public Visibility DokumentVisibility { get; set; } public ImageSource ImageSources { get; private set; } public object Dokpfad { get; private set; } public long? ChatMessageOid { get; private set; } //Farbe Links MEssageHeader private Brush _farbeLinksColor; public Brush FarbeLinksColor { get { return _farbeLinksColor; } set { _farbeLinksColor = value; OnPropertyChanged("FarbeLinksColor"); } } //Farbe Rechts MessageHeader private Brush _farbeRechtsColor; public Brush FarbeRechtsColor { get { return _farbeRechtsColor; } set { _farbeRechtsColor = value; OnPropertyChanged("FarbeRechtsColor"); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { var handler = PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); } #endregion } }