Files
Chat/ChatController/ChatKlassen/KontaktMessageBuilder.cs

394 lines
14 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
namespace ChatController.ChatKlassen
{
public class KontaktMessageBuilder
{
//Chat Ansicht
public KontaktMessageBuilder(string username, string message, string sendtime, bool isme, DateTime convertedSendTimeString)
{
Username = username;
UserMessage = message;
SendTime = sendtime;
ConvertetSendtimeString = convertedSendTimeString;
if (isme)
{
ChatColor = new BrushConverter().ConvertFromString("#ff5e00") as SolidColorBrush;
Posi = "Right";
}
else
{
ChatColor = new BrushConverter().ConvertFromString("#cccccc") as SolidColorBrush;
Posi = "Left";
}
if (IsHyperlink(message))
{
HyperlinkVisibility = Visibility.Visible;
ChatVisibility = Visibility.Collapsed;
}
else {
ChatVisibility = Visibility.Visible;
HyperlinkVisibility = Visibility.Collapsed;
}
SoundVisibility = Visibility.Collapsed;
_pictureVisibility = Visibility.Collapsed;
DokumentVisibility = Visibility.Collapsed;
_herunterladen = Visibility.Collapsed;
_gifPictureVisibility = Visibility.Collapsed;
}
// IMage Ansicht
public KontaktMessageBuilder(string username, string message, string sendtime, bool isme, ImageSource image, DateTime convertedSendTimeString)
{
Username = username;
UserMessage = message;
SendTime = sendtime;
ImageSources = image;
ConvertetSendtimeString = convertedSendTimeString;
// Dokpfad =
if (isme)
{
ChatColor = new BrushConverter().ConvertFromString("#ff5e00") as SolidColorBrush;
Posi = "Right";
}
else
{
ChatColor = new BrushConverter().ConvertFromString("#cccccc") as SolidColorBrush;
Posi = "Left";
}
//if (!isGif)
//{
_pictureVisibility = Visibility.Visible;
//_gifPictureVisibility = Visibility.Collapsed;
//}
//else
//{
// _pictureVisibility = Visibility.Collapsed;
// _gifPictureVisibility = Visibility.Visible;
//}
ChatVisibility = Visibility.Collapsed;
SoundVisibility = Visibility.Collapsed;
HyperlinkVisibility = Visibility.Collapsed;
DokumentVisibility = Visibility.Collapsed;
_herunterladen = Visibility.Collapsed;
}
//Dokument Ansicht
public KontaktMessageBuilder(string username, string message, string sendtime, bool isme, string url, DateTime convertedSendTimeString)
{
Username = username;
UserMessage = message;
SendTime = sendtime;
ConvertetSendtimeString = convertedSendTimeString;
Dokpfad = (object) url;
if (isme)
{
ChatColor = new BrushConverter().ConvertFromString("#ff5e00") as SolidColorBrush;
Posi = "Right";
}
else
{
ChatColor = new BrushConverter().ConvertFromString("#cccccc") as SolidColorBrush;
Posi = "Left";
}
DokumentVisibility = Visibility.Visible;
_pictureVisibility = Visibility.Collapsed;
ChatVisibility = Visibility.Collapsed;
SoundVisibility = Visibility.Collapsed;
_herunterladen = Visibility.Collapsed;
HyperlinkVisibility = Visibility.Collapsed;
}
#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 kram der sortiert werden muss
//Alter Kram
public KontaktMessageBuilder(string username, string message, string sendtime, long messagePersonOid, bool isme, bool loadnext, object loadObject)
{
Username = username;
UserMessage = message;
SendTime = sendtime;
MessagePersonOid = messagePersonOid;
if (messagePersonOid == 0 && !loadnext)
{
ChatColor = new SolidColorBrush(Colors.AliceBlue); //CornflowerBlue
Posi = "Center";
}
else
if (isme)
{
ChatColor = new BrushConverter().ConvertFromString("#ff5e00") as SolidColorBrush;
Posi = "Right";
}
else
{
ChatColor = new BrushConverter().ConvertFromString("#cccccc") as SolidColorBrush;
Posi = "Left";
}
if (loadnext)
{
Posi = "Right";
LoadNextVisibility = Visibility.Visible;
ChatVisibility = Visibility.Collapsed;
LoadObject = loadObject;
MainVisibility = Visibility.Collapsed;
}
else
{
LoadNextVisibility = Visibility.Collapsed;
ChatVisibility = Visibility.Visible;
LoadObject = null;
MainVisibility = Visibility.Visible;
}
SoundVisibility = Visibility.Collapsed;
_pictureVisibility = Visibility.Collapsed;
DokumentVisibility = Visibility.Collapsed;
_herunterladen = Visibility.Collapsed;
}
public KontaktMessageBuilder(string username, string message, string sendtime, long messagePersonOid, bool isme,
bool isSoundDatei, bool isPicDatei, bool isDokument, ImageSource source, string fulldokpfad, byte[] dokarray, bool isHerunterladen, object[] herunterladbares, long? chatMessageOid)
{
Username = username;
UserMessage = message;
SendTime = sendtime;
MessagePersonOid = messagePersonOid;
ChatMessageOid = chatMessageOid;
if (isme && messagePersonOid == 0)
{
ChatColor = new SolidColorBrush(Colors.CornflowerBlue);
Posi = "Center";
}
else if (isme)
{
ChatColor = new BrushConverter().ConvertFromString("#ff5e00") as SolidColorBrush;
Posi = "Right";
}
else
{
ChatColor = new BrushConverter().ConvertFromString("#cccccc") as SolidColorBrush;
Posi = "Left";
}
if (isSoundDatei)
{
ChatVisibility = Visibility.Collapsed;
SoundVisibility = Visibility.Visible;
_pictureVisibility = Visibility.Collapsed;
DokumentVisibility = Visibility.Collapsed;
_herunterladen = Visibility.Collapsed;
}
else if (isDokument)
{
ChatVisibility = Visibility.Collapsed;
SoundVisibility = Visibility.Collapsed;
_pictureVisibility = Visibility.Collapsed;
DokumentVisibility = Visibility.Visible;
_herunterladen = Visibility.Collapsed;
}
else if (isPicDatei && source != null)
{
ChatVisibility = Visibility.Collapsed;
SoundVisibility = Visibility.Collapsed;
_pictureVisibility = Visibility.Visible;
DokumentVisibility = Visibility.Collapsed;
_herunterladen = Visibility.Collapsed;
}
else if (isHerunterladen)
{
_herunterladen = Visibility.Visible;
ChatVisibility = Visibility.Collapsed;
SoundVisibility = Visibility.Collapsed;
_pictureVisibility = Visibility.Collapsed;
DokumentVisibility = Visibility.Collapsed;
}
else
{
ChatVisibility = Visibility.Visible;
SoundVisibility = Visibility.Collapsed;
_pictureVisibility = Visibility.Collapsed;
DokumentVisibility = Visibility.Collapsed;
_herunterladen = Visibility.Collapsed;
}
if (source != null)
{
ImageSources = source;
}
//Dokument
object[] array1 = new object[3];
if (fulldokpfad != null && chatMessageOid == 0)
{
Dokpfad = fulldokpfad;
}
else if (chatMessageOid > 0 && fulldokpfad != null)
{
array1[0] = fulldokpfad;
array1[1] = dokarray;
array1[2] = chatMessageOid;
Dokpfad = array1;
}
if (herunterladbares != null)
{
Herunterladbares = herunterladbares;
}
//array übergabe für Sound ermöglichen
SoundArray = null;
LoadNextVisibility = Visibility.Collapsed;
MainVisibility = Visibility.Visible;
}
public string Username { get; private set; }
public string UserMessage { get; private set; }
public string SendTime { get; private set; }
public long MessagePersonOid { get; private set; }
public Brush ChatColor { get; private set; }
public int ChatPosition { get; private set; }
public string Posi { get; private set; }
public DateTime ConvertetSendtimeString { get; set; }
public Visibility MainVisibility { get; set; }
public Visibility ChatVisibility { get; set; }
public Visibility HyperlinkVisibility { get; set; }
public Visibility LoadNextVisibility { get; set; }
public object LoadObject { get; set; }
public Visibility SoundVisibility { get; set; }
private Visibility _pictureVisibility;
public Visibility PictureVisibility { get { return _pictureVisibility; } set { _pictureVisibility = value; OnPropertyChanged("PictureVisibility"); } }
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 byte[] SoundArray { get; private set; }
public long? ChatMessageOid { get; private set; }
private Visibility _herunterladen;
public Visibility Herunterladen
{
get { return _herunterladen; }
set { _herunterladen = value; OnPropertyChanged("Herunterladen"); }
}
public object[] Herunterladbares { get; private set; }
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
}