commit 09f67a41df7d826fcc99351441728be8bf66d7eb Author: Waldi Date: Tue Sep 12 14:32:34 2017 +0200 neue klassen diff --git a/ChatController/ChatController.csproj b/ChatController/ChatController.csproj new file mode 100644 index 0000000..2adfa40 --- /dev/null +++ b/ChatController/ChatController.csproj @@ -0,0 +1,103 @@ + + + + + Debug + AnyCPU + {8A83C4DC-A0B1-4A51-AE1D-366D7A05B298} + Library + Properties + ChatController + ChatController + v4.5 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\..\..\..\Desktop\Newtonsoft.Json.dll + + + ..\..\BeWo\Lib\NHibernate.dll + + + + + + + + + + + + + + + + + + + + ChatEmojiiControl.xaml + + + + + + + ChatMainControl.xaml + + + + + LoginControl.xaml + + + + + + + + + + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + + + + + + + + + + \ No newline at end of file diff --git a/ChatController/ChatEmojiiControl.xaml b/ChatController/ChatEmojiiControl.xaml new file mode 100644 index 0000000..c3f1e95 --- /dev/null +++ b/ChatController/ChatEmojiiControl.xaml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChatController/ChatEmojiiControl.xaml.cs b/ChatController/ChatEmojiiControl.xaml.cs new file mode 100644 index 0000000..71583d6 --- /dev/null +++ b/ChatController/ChatEmojiiControl.xaml.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Windows.Threading; +using ChatController.HauptKlassen; + +namespace ChatController +{ + /// + /// Interaktionslogik für ChatEmojiiControl.xaml + /// + public partial class ChatEmojiiControl : UserControl + { + + ChatMainControl chatView; + private ChatEmoji _emojii; + + public ChatEmojiiControl() + { + InitializeComponent(); + + _emojii = new ChatEmoji(); + + + SetEmojis(); + } + + public void InitChatView(ChatMainControl c) + { + chatView = c; + } + + public void SetEmojis() + { + EmojisListBox1.ItemsSource = _emojii.EmojisListBox1; + EmojisListBox2.ItemsSource = _emojii.EmojisListBox2; + EmojisListBox3.ItemsSource = _emojii.EmojisListBox3; + EmojisListBox4.ItemsSource = _emojii.EmojisListBox4; + EmojisListBox5.ItemsSource = _emojii.EmojisListBox5; + EmojisListBox6.ItemsSource = _emojii.EmojisListBox6; + EmojisListBox7.ItemsSource = _emojii.EmojisListBox7; + + TabItem1.Header = _emojii.TabItem1; + TabItem2.Header = _emojii.TabItem2; + TabItem3.Header = _emojii.TabItem3; + TabItem4.Header = _emojii.TabItem4; + TabItem5.Header = _emojii.TabItem5; + TabItem6.Header = _emojii.TabItem6; + TabItem7.Header = _emojii.TabItem7; + } + + private void OnEmojiClick(object sender, RoutedEventArgs e) + { + + foreach (Object selecteditem in EmojisListBox1.SelectedItems) + { + DirectoryListing Item = selecteditem as DirectoryListing; + + if (Item.EmojiCode != "") + { + ÜbergebeEmojiAnChatView(Item.EmojiCode, Item.Pfad); + } + } + + foreach (Object selecteditem in EmojisListBox2.SelectedItems) + { + DirectoryListing Item = selecteditem as DirectoryListing; + + if (Item.EmojiCode != "") + { + ÜbergebeEmojiAnChatView(Item.EmojiCode, Item.Pfad); + } + } + + + foreach (Object selecteditem in EmojisListBox3.SelectedItems) + { + DirectoryListing Item = selecteditem as DirectoryListing; + + if (Item.EmojiCode != "") + { + ÜbergebeEmojiAnChatView(Item.EmojiCode, Item.Pfad); + } + } + + foreach (Object selecteditem in EmojisListBox4.SelectedItems) + { + DirectoryListing Item = selecteditem as DirectoryListing; + + if (Item.EmojiCode != "") + { + ÜbergebeEmojiAnChatView(Item.EmojiCode, Item.Pfad); + } + } + + foreach (Object selecteditem in EmojisListBox5.SelectedItems) + { + DirectoryListing Item = selecteditem as DirectoryListing; + + if (Item.EmojiCode != "") + { + ÜbergebeEmojiAnChatView(Item.EmojiCode, Item.Pfad); + } + } + + foreach (Object selecteditem in EmojisListBox6.SelectedItems) + { + DirectoryListing Item = selecteditem as DirectoryListing; + + if (Item.EmojiCode != "") + { + ÜbergebeEmojiAnChatView(Item.EmojiCode, Item.Pfad); + } + } + + foreach (Object selecteditem in EmojisListBox7.SelectedItems) + { + DirectoryListing Item = selecteditem as DirectoryListing; + + if (Item.EmojiCode != "") + { + ÜbergebeEmojiAnChatView(Item.EmojiCode, Item.Pfad); + } + } + + EmojisListBox1.SelectedIndex = -1; + EmojisListBox2.SelectedIndex = -1; + EmojisListBox3.SelectedIndex = -1; + EmojisListBox4.SelectedIndex = -1; + EmojisListBox5.SelectedIndex = -1; + EmojisListBox6.SelectedIndex = -1; + EmojisListBox7.SelectedIndex = -1; + + // ChatEmojiView.Activate(); + } + + public void ÜbergebeEmojiAnChatView(string emojiicode, string muell) + { + try + { + Dispatcher.Invoke( + DispatcherPriority.Normal, + (ThreadStart)delegate + { + chatView.Chatbox.Focus(); + chatView.Chatbox.Text += " " + emojiicode; + chatView.Chatbox.SelectionStart = chatView.Chatbox.Text.Length; + + }); + } + catch (Exception e) + { + MessageBox.Show(e.Message); + } + } + + } +} diff --git a/ChatController/ChatKlassen/AktuellerKontakt.cs b/ChatController/ChatKlassen/AktuellerKontakt.cs new file mode 100644 index 0000000..2d6049d --- /dev/null +++ b/ChatController/ChatKlassen/AktuellerKontakt.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media; + +namespace ChatController.ChatKlassen +{ + public class AktuellerKontakt + { + public KontaktlistBuilder Kontakt { get; set; } + + public string Name { get; private set; } + public ImageSource Image { get; private set; } + public DateTime TimeStamp { get; set; } + public long GroupId { get; set; } + public long? CustomerPersonOid { get; set; } + + + public AktuellerKontakt(KontaktlistBuilder kontakt) + { + if(kontakt != null) { + Kontakt = kontakt; + Image = kontakt.Image; + TimeStamp = kontakt.TimeStamp; + Name = kontakt.Name; + CustomerPersonOid = kontakt.CustomerPersonOid; + GroupId = kontakt.GroupId; + } + } + } +} diff --git a/ChatController/ChatKlassen/KontaktMessageBuilder.cs b/ChatController/ChatKlassen/KontaktMessageBuilder.cs new file mode 100644 index 0000000..5e3956b --- /dev/null +++ b/ChatController/ChatKlassen/KontaktMessageBuilder.cs @@ -0,0 +1,293 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Media; + +namespace ChatController.ChatKlassen +{ + public class KontaktMessageBuilder + { + //kram für Die Dokumentation erstellen zb. MessagePersonOid + + 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"; + } + + ChatVisibility = Visibility.Visible; + SoundVisibility = Visibility.Collapsed; + _pictureVisibility = Visibility.Collapsed; + DokumentVisibility = Visibility.Collapsed; + _herunterladen = Visibility.Collapsed; + _gifPictureVisibility = Visibility.Collapsed; + } + + public KontaktMessageBuilder(string username, string message, string sendtime, bool isme, ImageSource image, DateTime convertedSendTimeString) + { + Username = username; + UserMessage = message; + SendTime = sendtime; + ImageSources = image; + ConvertetSendtimeString = convertedSendTimeString; + + 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; + + DokumentVisibility = Visibility.Collapsed; + _herunterladen = Visibility.Collapsed; + } + + + + #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 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 + + + } +} diff --git a/ChatController/ChatKlassen/KontaktlistBuilder.cs b/ChatController/ChatKlassen/KontaktlistBuilder.cs new file mode 100644 index 0000000..98e588d --- /dev/null +++ b/ChatController/ChatKlassen/KontaktlistBuilder.cs @@ -0,0 +1,236 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media; + +namespace ChatController.ChatKlassen +{ + public class KontaktlistBuilder + { + + public string Name { get; private set; } + + private string _receiveMs; + public string ReceiveMs + { + get + { + var WordsArray = _receiveMs.Split(); + + //var verkuerzterText = _receiveMs.Substring(0,10); + if (WordsArray.Length > 4) + { + string Items = WordsArray[0] + " " + WordsArray[1] + " " + WordsArray[2] + " " + WordsArray[3] + "..."; + + return Items; + } + else + { + //if(_receiveMs.Length > 15) + return _receiveMs; + } + } + + set + { + _receiveMs = value; + OnPropertyChanged("ReceiveMs"); + } + } + + private Brush _color; + public Brush Color + { + get + { + return _color; + } + set + { + + _color = value; + + OnPropertyChanged("Color"); + } + } + + private int _setzeGelesen; + public int SetzeGelesen + { + get { return _setzeGelesen; } + + set + { + _setzeGelesen = value; + + if (_setzeGelesen == 1) + { + _color = new BrushConverter().ConvertFromString("#ff5e00") as SolidColorBrush; + } + else + { + _color = new SolidColorBrush(Colors.Gray); + } + + OnPropertyChanged("SetzeGelesen"); + OnPropertyChanged("Color"); + } + } + + public ImageSource Image { get; private set; } + public DateTime TimeStamp { get; set; } + public long GroupId { get; set; } + public long UserId { get; set; } + public long? CustomerPersonOid { get; set; } + + public KontaktlistBuilder(string name, ImageSource image, string lastMs, DateTime timestamp, long groupid,long? customerPersonOid) + { + Name = name; + ReceiveMs = lastMs; + Image = image; + TimeStamp = timestamp; + GroupId = groupid; + CustomerPersonOid = customerPersonOid; + SetzeGelesen = 1; + + } + + //public KontaktlistBuilder(string name, StatusType statustyp, ImageSource image, long empfaengerid, ChatType typeChat, CompactCustomerDC customer) + //{ + // this.Customer = customer; + // this.Name = name; + // this.StatusTyp = statustyp; + // this.Image = image; + // this.EmpfaengerOid = empfaengerid; + + // Receivems = ""; + // TypeChat = typeChat; + + // if (statustyp == StatusType.Online) + // { + // this.Color = new BrushConverter().ConvertFromString("#00ae00") as SolidColorBrush; + // } + // else if (statustyp == StatusType.Offline) + // { + // this.Color = new SolidColorBrush(Colors.Red); + // } + // else + // { + // this.Color = new SolidColorBrush(Colors.Orange); + // } + + // if (typeChat == ChatType.Team) + // { + // _colorType = new SolidColorBrush(Colors.DarkViolet); + // } + // else if (typeChat == ChatType.Klienten) + // { + // _colorType = new SolidColorBrush(Colors.Blue); + // } + // else + // { + // _colorType = new SolidColorBrush(Colors.Green); + // } + //} + + //public string Name { get; private set; } + + //private StatusType _statustyp; + //public StatusType StatusTyp + //{ + // get { return _statustyp; } + // set + // { + // _statustyp = value; + + // if (_statustyp == StatusType.Online) + // { + // _color = new BrushConverter().ConvertFromString("#00ae00") as SolidColorBrush; + // } + // else if (_statustyp == StatusType.Offline) + // { + // _color = new SolidColorBrush(Colors.Red); + // } + // else + // { + // _color = new SolidColorBrush(Colors.Orange); + // } + + // OnPropertyChanged("Lastms"); + // } + //} + + //public ImageSource Image { get; private set; } + + //public long EmpfaengerOid { get; private set; } + + //private string _receivems; + //public string Receivems { get { return _receivems; } set { _receivems = value; OnPropertyChanged("Receivems"); } } + + //public ChatType TypeChat { get; set; } + + //private Brush _color; + //public Brush Color + //{ + // get + // { + // return _color; + // } + // set + // { + // if (StatusTyp == StatusType.Online) + // { + // _color = new BrushConverter().ConvertFromString("#00ae00") as SolidColorBrush; + // } + // else if (StatusTyp == StatusType.Offline) + // { + // _color = new SolidColorBrush(Colors.Red); + // } + // else + // { + // _color = new SolidColorBrush(Colors.Orange); + // } + + // OnPropertyChanged("Color"); + // } + //} + + //private Brush _colorType; + //public Brush ColorType + //{ + // get + // { + // return _colorType; + // } + // set + // { + // if (TypeChat == ChatType.Team) + // { + // _colorType = new SolidColorBrush(Colors.DarkViolet); + // } + // else if (TypeChat == ChatType.Klienten) + // { + // _colorType = new SolidColorBrush(Colors.Blue); + // } + // else + // { + // _colorType = new SolidColorBrush(Colors.Green); + // } + + // OnPropertyChanged("ColorType"); + // } + //} + //public CompactCustomerDC Customer { get; set; } + + public event PropertyChangedEventHandler PropertyChanged; + + protected virtual void OnPropertyChanged(string propertyName) + { + var handler = PropertyChanged; + if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/ChatController/ChatKlassen/MessageCounter.cs b/ChatController/ChatKlassen/MessageCounter.cs new file mode 100644 index 0000000..6079360 --- /dev/null +++ b/ChatController/ChatKlassen/MessageCounter.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ChatController.ChatKlassen +{ + public class MessageCounter + { + public double MessageCount { get; set; } + } +} diff --git a/ChatController/ChatMainControl.xaml b/ChatController/ChatMainControl.xaml new file mode 100644 index 0000000..f69822c --- /dev/null +++ b/ChatController/ChatMainControl.xaml @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChatController/ChatMainControl.xaml.cs b/ChatController/ChatMainControl.xaml.cs new file mode 100644 index 0000000..0c4dc0e --- /dev/null +++ b/ChatController/ChatMainControl.xaml.cs @@ -0,0 +1,643 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Windows.Threading; +using ChatController.ChatKlassen; +using ChatController.HauptKlassen; +using ChatController.Klassen; + +namespace ChatController +{ + /// + /// Interaktionslogik für ChatMainWindow.xaml + /// + public partial class ChatMainControl : UserControl + { + + + private Chat _chat; + private AktuellerKontakt _aktuellerKontakt; + + private bool isChatBoxOnFocus = false; + + private ChatEmojiiControl _emojiView; + + private IOrderedEnumerable _Orderedmessagelist; + private IOrderedEnumerable _kontaktlist; + + private readonly List _messagelist = new List(); + + private ChatDatenUebergabe _chatDaten; + + private bool scrollPrueferAktivieren = false; + + public Thread newThread; + public bool threadBool = true; + + public Thread AlleKontakteThread; + public bool AlleNachrichtenThreadBool = true; + private double? AlleNachrichtenCount = null; + + + private Dictionary> menuItemName2Callback = new Dictionary>(); + public ChatMainControl() + { + InitializeComponent(); + } + + public void InitMitChatdaten(ChatDatenUebergabe cdu) + { + _chatDaten = cdu; + _chat = new Chat(cdu); + + _kontaktlist = _chat.GroupklassenInChatKontakteUmwandler(); + + Clientlist.ItemsSource = _kontaktlist; + + //Neu + CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(Clientlist.ItemsSource); + view.Filter = UserFilter; + //NEu + + HorcheAlleGruppenNachrichten(); + } + + public AktuellerKontakt GetAktuellenKontakt() + { + if (AktChatUser != null) + { + var kontakt = (AktuellerKontakt) AktChatUser.Items[0]; + + if (kontakt.CustomerPersonOid == null) + { + return null; + } + + return kontakt; + } + else + { + return null; + } + } + + public List GetSelectedMessages() + { + List itemListe = new List(); + + foreach (Object selecteditem in Chat.SelectedItems) + { + KontaktMessageBuilder Item = selecteditem as KontaktMessageBuilder; + + //if (Item.MessagePersonOid == 0) + //{ + itemListe.Add(Item); + //} + } + + if(itemListe.Count > 0) { + + return itemListe; + } + else + { + return null; + } + } + + #region Lade KontaktDaten und Lade sie in den Chat + private void AktChatUser_OnMouseDoubleClick(object sender, MouseButtonEventArgs e) + { + _chat.ShowKontaktPicture(_aktuellerKontakt); + } + + private void Clientlist_OnSelectionChanged(object sender, SelectionChangedEventArgs e) + { + if(Clientlist.SelectedItem != null) { + + Cursor = Cursors.Wait; + scrollPrueferAktivieren = false; + Chat.ItemsSource = null; + + AktChatUser.Items.Clear(); + + var kontakt = (KontaktlistBuilder)Clientlist.SelectedItem; + + if(kontakt.SetzeGelesen == 1) { + kontakt.SetzeGelesen = 0; + + Clientlist.Items.Refresh(); + } + + var aktuellerKontakt = new AktuellerKontakt(kontakt); + + AktChatUser.Items.Add(aktuellerKontakt); + _aktuellerKontakt = aktuellerKontakt; + + var x = _chat.LadeChatNachrichtenVomKontakt(aktuellerKontakt); + + Chat.ItemsSource = x; + + Chat.Items.MoveCurrentToLast(); + Chat.ScrollIntoView(Chat.Items.CurrentItem); + + Chat.ContextMenu = _chat.ErstelleKontextMenue(); + SetContextHandler(); + scrollPrueferAktivieren = true; + + HorcheAktivNachNachrichten(); + Cursor = Cursors.Arrow; + } + } + + private void SetContextHandler() + { + var contextItems = Chat.ContextMenu.Items; + + foreach (var menuItemText in menuItemName2Callback.Keys) + { + var cb = menuItemName2Callback[menuItemText]; + + MenuItem item = new MenuItem(); + + item.Click += (s, e2) => + { + cb(menuItemText); + }; + item.Header = menuItemText; + + contextItems.Add(item); + } + + var item2 = (MenuItem)contextItems[0]; + item2.Click += Item2OnClick; + var item3 = (MenuItem)contextItems[1]; + item3.Click += Item3OnClick; + } + + + public delegate void ContextDelegate(); + + public event ContextDelegate CreateNewContextItems; + + private void Chat_OnMouseRightButtonDown(object sender, MouseButtonEventArgs e) + { + + + var contextItems = Chat.ContextMenu.Items; + + //abfragen für on right click vom Bewoplaner Chat hinzufügen + + + + + + + } + + private void Item2OnClick(object sender, RoutedEventArgs routedEventArgs) + { + foreach (var items in Chat.SelectedItems) + { + var item = (KontaktMessageBuilder)items; + + _chat.SpeichernUnterFunkion(item); + } + } + + private void Item3OnClick(object sender, RoutedEventArgs routedEventArgs) + { + // _chat.Einfuegen(); + } + #endregion + + #region Sende Media Nachrichten + private void MediaButton_OnClick(object sender, RoutedEventArgs e) + { + var kontakt = (AktuellerKontakt)AktChatUser.Items[0]; + + _chat.HoleUndSendeMediumAnKontakt(kontakt); + + Chat.ItemsSource = null; + Chat.ItemsSource = _chat.LadeChatNachrichtenVomKontakt(kontakt); + + Chat.Items.MoveCurrentToLast(); + Chat.ScrollIntoView(Chat.Items.CurrentItem); + } + #endregion + + #region Sende Normale Nachrichten + private void SendButton_OnClick(object sender, RoutedEventArgs e) + { + if (!AktChatUser.Items.IsEmpty && !Chatbox.Text.Equals("") && isChatBoxOnFocus) + { + if (!Chatbox.Text.Equals("")) + { + var kontakt = (AktuellerKontakt)AktChatUser.Items[0]; + + var text = Chatbox.Text; + + _chat.SendMessage(Chatbox.Text, kontakt.GroupId); + + + Chatbox.Text = ""; + + //Lade Nachrichten nach + + Chat.Items.MoveCurrentToLast(); + Chat.ScrollIntoView(Chat.Items.CurrentItem); + + if (Chatbox.Text.Equals("")) + { + Chatbox.Text = "Nachricht schreiben"; + Chatbox.Foreground = new SolidColorBrush(Colors.DarkGray); + isChatBoxOnFocus = false; + } + } + } + else + { + if (AktChatUser.Items.IsEmpty) + { + MessageBox.Show("Bitte wählen Sie einen Chatpartner aus.", "Fehler", MessageBoxButton.OK); + if (Chatbox.Text.Equals("")) + { + Chatbox.Text = "Nachricht schreiben"; + Chatbox.Foreground = new SolidColorBrush(Colors.DarkGray); + isChatBoxOnFocus = false; + } + } + else if (Chatbox.Text.Equals("")) + { + MessageBox.Show("Sie können keine lehre Nachricht verschicken.", "Fehler", MessageBoxButton.OK); + if (Chatbox.Text.Equals("")) + { + Chatbox.Text = "Nachricht schreiben"; + Chatbox.Foreground = new SolidColorBrush(Colors.DarkGray); + isChatBoxOnFocus = false; + } + } + } + + } + + private void Chatbox_OnGotFocus(object sender, RoutedEventArgs e) + { + if (Chatbox.Text.Equals("Nachricht schreiben")) + { + Chatbox.Text = ""; + Chatbox.Foreground = new SolidColorBrush(Colors.Black); + isChatBoxOnFocus = true; + } + + //hier bereich wie Dokumentieren + + + } + + private void Chatbox_OnKeyDownHandler(object sender, KeyEventArgs e) + { + try + { + if (e.Key == Key.Return) + { + if (!AktChatUser.Items.IsEmpty && !Chatbox.Text.Equals("")) + { + var kontakt = (AktuellerKontakt)AktChatUser.Items[0]; + + var text = Chatbox.Text; + + _chat.SendMessage(Chatbox.Text, kontakt.GroupId); + + Chatbox.Text = ""; + + + //lade Nachrichten nach + + } + else + { + if (AktChatUser.Items.IsEmpty) + { + MessageBox.Show("Bitte wählen Sie einen Chatpartner aus.", "Fehler", MessageBoxButton.OK); + } + else if (Chatbox.Text.Equals("")) + { + MessageBox.Show("Sie können keine lehre Nachricht verschicken.", "Fehler", MessageBoxButton.OK); + } + } + } + } + catch (Exception ed) + { + MessageBox.Show("Beim Senden einer Nachricht ist ein Fehler aufgetreten. " + ed.Message + "\n" + ed.StackTrace, "Fehler", MessageBoxButton.OK); + } + } + #endregion + + #region Add Emoji To ChatBox + public delegate void EmojiiDelegate(Button x); + + public event EmojiiDelegate OnEmojii; + + private void EmojiButton_OnClick(object sender, RoutedEventArgs e) + { + //hier wie bei login + if (OnEmojii != null) + { + OnEmojii(EmojiButton); + } + } + #endregion + + public void AddContextMenu(string menuItemText, Action callBackAction) + { + if (!menuItemName2Callback.ContainsKey(menuItemText)) + { + menuItemName2Callback.Add(menuItemText, callBackAction); + } + } + + + #region Nachladen weiterer Chat Nachrichten + private void Chat_OnScrollChanged(object sender, ScrollChangedEventArgs e) + { + List scrollBarList = GetVisualChildCollection(Chat); + foreach (ScrollBar scrollBar in scrollBarList) + { + if (scrollBar.Orientation == Orientation.Horizontal) + { + scrollBar.ValueChanged += HorizontalScrollbarChanged; + scrollPrueferAktivieren = true; + } + else + { + scrollBar.ValueChanged += VerticalScrollbarChanged; + } + } + } + + private void VerticalScrollbarChanged(object sender, RoutedPropertyChangedEventArgs routedPropertyChangedEventArgs) + { + if (scrollPrueferAktivieren == true) + { + var x = (ScrollBar) sender; + + if (x.Value > 0) + { + //nix + } + else + { + scrollPrueferAktivieren = false; + + Chat.Items.MoveCurrentToFirst(); + KontaktMessageBuilder item = Chat.Items.CurrentItem as KontaktMessageBuilder; + + Chat.ItemsSource = null; + + var kontakt = (KontaktlistBuilder)Clientlist.SelectedItem; + + var xy = _chat.LadeWeiterNachrichten(kontakt); + + Chat.ItemsSource = xy; + + Chat.ScrollIntoView(item); + } + } + } + + private void HorizontalScrollbarChanged(object sender, RoutedPropertyChangedEventArgs routedPropertyChangedEventArgs) + { + //nix + + } + + #region Get Scollbar von listbox + private static List GetVisualChildCollection(object parent) where T : Visual + { + List visualCollection = new List(); + GetVisualChildCollection(parent as DependencyObject, visualCollection); + return visualCollection; + } + + private static void GetVisualChildCollection(DependencyObject parent, List visualCollection) where T : Visual + { + int count = VisualTreeHelper.GetChildrenCount(parent); + for (int i = 0; i < count; i++) + { + DependencyObject child = VisualTreeHelper.GetChild(parent, i); + if (child is T) + { + visualCollection.Add(child as T); + } + else if (child != null) + { + GetVisualChildCollection(child, visualCollection); + } + } + } + + #endregion + + #endregion + + #region Funktion Nachrichten Listener + + private void HorcheAktivNachNachrichten() + { + threadBool = false; + + if (newThread != null) + { + newThread.Join(); + newThread = null; + } + + var kontakt = (AktuellerKontakt)AktChatUser.Items[0]; + + //thred besser verwalten + newThread = new Thread(DoWork); + newThread.IsBackground = true; + newThread.Start(kontakt); + + } + + private void DoWork(object o) + { + threadBool = true; + + bool _schaueNachMs = false; + + var kontakt = (AktuellerKontakt) o; + while (true) + { + _schaueNachMs = _chat.SchaueNachNeuenNachrichten(kontakt); + + if (_schaueNachMs == true) + { + + this.Dispatcher.BeginInvoke( + DispatcherPriority.Background, + (Action)delegate + { + if(kontakt != null) { + + //neuer Aufruf villeicht nur von + //Cursor = Cursors.Wait; + + Chat.ItemsSource = null; + + //Wichtig Verbessern + var x = _chat.LadeChatNachrichtenVomKontakt(kontakt); + + //foreach (var liste in _Orderedmessagelist) + //{ + // foreach (var neu in alist) + // { + + // if (liste.ChatMessageOid == neu.ChatMessageOid) + // { + // //_Orderedmessagelist.CreateOrderedEnumerable(neu,,true); + + // //if (!liste.ReceiveMs.Equals(neu.ReceiveMs)) + // //{ + // // liste.ReceiveMs = neu.ReceiveMs; + // // liste.SetzeGelesen = 1; + // // //Vorher noch abfragen ob die id gleich den chat ist und dann nur wenn nicht zutrifft dann auf 1 setzen + // //} + // } + // } + //} + + + Chat.ItemsSource = x; + + //Cursor = Cursors.Arrow; + + Chat.Items.MoveCurrentToLast(); + Chat.ScrollIntoView(Chat.Items.CurrentItem); + + + } + }); + + _schaueNachMs = false; + + } + + if (threadBool == false) + { + break; + } + + Task.Delay(2000); + //Thread.Sleep(2000); + } + + } + + #endregion + + #region Für alle Nachrichten Count Listener + private void HorcheAlleGruppenNachrichten() + { + AlleKontakteThread = new Thread(DoWorkAlleNachrichten); + AlleKontakteThread.IsBackground = true; + AlleKontakteThread.Start(); + } + + private void DoWorkAlleNachrichten() + { + while (true) + { + var x = _chat.SchaueNachAllenMessageCounts(); + + if (AlleNachrichtenCount == null) + { + AlleNachrichtenCount = x; + } + + if (x > AlleNachrichtenCount) + { + this.Dispatcher.BeginInvoke( + DispatcherPriority.Background, + (Action)delegate + { + var alist = _chat.NeueGroupklassenKontakte(); + + var aktuellerKontakt =(AktuellerKontakt)AktChatUser.Items[0]; + + foreach (var liste in _kontaktlist) + { + foreach (var neu in alist) + { + if (liste.GroupId == neu.GroupId) + { + if (!liste.ReceiveMs.Equals(neu.ReceiveMs)) { + liste.ReceiveMs = neu.ReceiveMs; + + if (neu.GroupId == aktuellerKontakt.GroupId) + { + liste.SetzeGelesen = 0; + } + else + { + liste.SetzeGelesen = 1; + } + } + } + } + } + + Clientlist.Items.Refresh(); + }); + + AlleNachrichtenCount = x; + } + + if (AlleNachrichtenThreadBool == false) + { + break; + } + + Task.Delay(5000); + + //Thread.Sleep(5000); + } + } + + #endregion + + #region Suche Nach Person + + private void Suche_OnTextChanged(object sender, TextChangedEventArgs e) + { + CollectionViewSource.GetDefaultView(Clientlist.ItemsSource).Refresh(); + } + + private bool UserFilter(object item) + { + if (String.IsNullOrEmpty(Suche.Text)) + return true; + else + return ((item as KontaktlistBuilder).Name.IndexOf(Suche.Text, StringComparison.OrdinalIgnoreCase) >= 0); + } + + #endregion + + } +} diff --git a/ChatController/HauptKlassen/Chat.cs b/ChatController/HauptKlassen/Chat.cs new file mode 100644 index 0000000..b839fef --- /dev/null +++ b/ChatController/HauptKlassen/Chat.cs @@ -0,0 +1,1232 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Web; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Forms; +using System.Windows.Controls; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using ChatController.ChatKlassen; +using ChatController.Klassen; +using Newtonsoft.Json; +using ContextMenu = System.Windows.Controls.ContextMenu; +using DataFormats = System.Windows.Forms.DataFormats; +using Image = System.Windows.Controls.Image; +using MenuItem = System.Windows.Forms.MenuItem; +using Size = System.Drawing.Size; + +namespace ChatController.HauptKlassen +{ + public class Chat + { + private readonly List Kontaktliste = new List(); + private readonly List Messages = new List(); + + public ChatDatenUebergabe ChatDaten; + + private UserMessages _userMessages; + private UserMessages _weitereUserMessages; + + private string _nextPage = null; + private bool _hasNextPage = false; + + public Chat(ChatDatenUebergabe chatDaten) + { + ChatDaten = chatDaten; + } + + #region Gruppen In Kontaktliste Wandler + public IOrderedEnumerable GroupklassenInChatKontakteUmwandler() + { + foreach (var kontakt in ChatDaten.Groupconect.Response) + { + foreach (var value in kontakt.Value) + { + string message = ""; + DateTime timestamp = new DateTime(); + + var lastMS = value.LastMessage; + + if (lastMS != null) + { + if (lastMS.Text != null) + { + message = lastMS.Text; + timestamp = DateTime.Parse(lastMS.Timestamp.Date); + } + } + //null steht für employee + Kontaktliste.Add(new KontaktlistBuilder(value.Name, AvatarToImageSourceConverter(value.Avatar), + message, timestamp, value.Oid, null)); + } + } + + + var sortedKontaktliste = Kontaktliste.OrderByDescending(r => r.TimeStamp); + + return sortedKontaktliste; + + + //Search Bereich + //CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(Clientlist.ItemsSource); + //view.SortDescriptions.Add(new SortDescription("TimeStamp", ListSortDirection.Descending)); + //// view.SortDescriptions.Add(new SortDescription("StatusType", ListSortDirection.Descending)); + //view.Filter = UserFilter; + } + + private ImageSource AvatarToImageSourceConverter(string avatar) + { + if (!avatar.Equals("")) + { + try + { + Bitmap bitmap; + var request = WebRequest.Create(avatar); + using (var response = request.GetResponse()) + using (var stream = response.GetResponseStream()) + { + bitmap = new Bitmap(stream); + } + + MemoryStream ms = new MemoryStream(); + bitmap.Save(ms, ImageFormat.Png); + ms.Position = 0; + BitmapImage bi = new BitmapImage(); + bi.BeginInit(); + bi.StreamSource = ms; + bi.EndInit(); + + return bi; + } + catch (Exception e) + { + return null; + } + } + else + { + try + { + BitmapImage bix = new BitmapImage(); + bix.BeginInit(); + bix.UriSource = new Uri ("pack://application:,,,/ChatController;component/Ressourcen/mitarbeiter-avatar.png"); + bix.EndInit(); + return bix; + } + catch (Exception e) + { + return null; + } + } + } + #endregion + + #region Lade Nachrichten vom Kontakt in den Chat + public IOrderedEnumerable LadeChatNachrichtenVomKontakt(AktuellerKontakt kontakt) + { + if (kontakt != null) + { + HoleNachrichtenVomServer(kontakt.GroupId); + Messages.Clear(); + + foreach (var ChatMessage in _userMessages.Response.Messages) + { + if (ChatMessage.UserId == ChatDaten.Userid.Value) + { + //var timeformated = DateTime.Parse(ChatMessage.Timestamp.Date); + + var time = DateTime.Parse(ChatMessage.Timestamp.Date); + var clientZone = TimeZoneInfo.Local; + var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone); + + + if (!ChatMessage.File.Equals("")) // Bilder werden Sichtbar + { + //bool isGif = false; + + //if (ChatMessage.File.Contains(".gif")) + //{ + // isGif = true; + //} + + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text, + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, LadeBildNach(ChatMessage.File), + timeformated)); + + } + else + { + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text, + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, timeformated)); + } + } + else + { + //var timeformated = DateTime.Parse(ChatMessage.Timestamp.Date); + + var time = DateTime.Parse(ChatMessage.Timestamp.Date); + var clientZone = TimeZoneInfo.Local; + var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone); + + if (!ChatMessage.File.Equals("")) // Bilder werden Sichtbar + { + //bool isGif = false; + //if (ChatMessage.File.Contains(".gif")) + //{ + // isGif = true; + //} + + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text, + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, LadeBildNach(ChatMessage.File), + timeformated)); + } + else + { + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text, + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, timeformated)); + } + } + } + + + var x = Messages.OrderBy(r => r.ConvertetSendtimeString); + + return x; + } + else + { + return Messages.OrderBy(r => r.ConvertetSendtimeString); + } + } + + private ImageSource LadeBildNach(string link) + { + try + { + BitmapImage bix = new BitmapImage(); + bix.BeginInit(); + bix.UriSource = new Uri(link); + bix.EndInit(); + return bix; + } + catch (Exception edf) + { + return null; + } + } + + private void HoleNachrichtenVomServer(long groupId) + { + try + { + var endurl = ChatDaten.ServerUrl + "/api/chat/messages?groupid=" + groupId; + + WebRequest request = WebRequest.Create(endurl); + + request.Credentials = CredentialCache.DefaultCredentials; + request.Headers["Token"] = ChatDaten.AuthToken; + request.Headers["CustomerID"] = ChatDaten.Kundennummer; + request.Proxy = null; + + // Get the response. + WebResponse response = request.GetResponse(); + + // Display the status. + var statusResponse = ((HttpWebResponse)response).StatusDescription; + + + string responseFromServer = ReadStream(response); + + //verarbeite hier zu json + if (!responseFromServer.Equals("")) + { + _userMessages = null; + //################# Deserialisierung mit Json ############################### + var jsonDaten = JsonConvert.DeserializeObject(responseFromServer); + + _userMessages = jsonDaten; + + if (_userMessages.Response.HasMorePages == true) + { + _nextPage = _userMessages.Response.NextPage; + _hasNextPage = true; + } + else + { + _hasNextPage = false; + } + } + else + { + // MessageBox.Show("Keine Daten Vorhanden."); + } + + response.Close(); + } + catch (Exception e) + { + // MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK); + } + + } + + private string ReadStream(WebResponse response) + { + try + { + Stream dataStream = response.GetResponseStream(); + + StreamReader reader = new StreamReader(dataStream); + + string responseFromServer = reader.ReadToEnd(); + + + dataStream.Dispose(); + reader.Dispose(); + + dataStream.Close(); + reader.Close(); + + return responseFromServer; + } + catch (Exception e) + { + // MessageBox.Show(e.Message); + return null; + } + } + + #endregion + + #region Verbesserung der LadeNachricht nach senden einer Nachricht + + //public IOrderedEnumerable LadeNeueNachrichtUndFuegeDieseHinzu(KontaktlistBuilder kontakt) + //{ + // if (kontakt != null) + // { + // var neue = HoleNachrichtFV(kontakt.GroupId); + // //Messages.Clear(); + + // foreach (var neueMessage in neue.Response.Messages) + // { + // if (!_userMessages.Response.Messages.Contains(neueMessage)) + // { + // if (neueMessage.UserId == ChatDaten.Userid.Value) + // { + // var time = DateTime.Parse(neueMessage.Timestamp.Date); + // var clientZone = TimeZoneInfo.Local; + // var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone); + + + // if (!neueMessage.File.Equals("")) // Bilder werden Sichtbar + // { + // Messages.Add(new KontaktMessageBuilder(neueMessage.User_Name, neueMessage.Text, + // timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, LadeBildNach(neueMessage.File), + // timeformated)); + + // } + // else + // { + // Messages.Add(new KontaktMessageBuilder(neueMessage.User_Name, neueMessage.Text, + // timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, timeformated)); + // } + // } + // else + // { + // var time = DateTime.Parse(neueMessage.Timestamp.Date); + // var clientZone = TimeZoneInfo.Local; + // var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone); + + // if (!neueMessage.File.Equals("")) // Bilder werden Sichtbar + // { + // Messages.Add(new KontaktMessageBuilder(neueMessage.User_Name, neueMessage.Text, + // timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, LadeBildNach(neueMessage.File), + // timeformated)); + // } + // else + // { + // Messages.Add(new KontaktMessageBuilder(neueMessage.User_Name, neueMessage.Text, + // timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, timeformated)); + // } + // } + // } + // } + // var x = Messages.OrderBy(r => r.ConvertetSendtimeString); + + // return x; + // } + // else + // { + // return Messages.OrderBy(r => r.ConvertetSendtimeString); + // } + + //} + + //private UserMessages HoleNachrichtFV(long groupId) + //{ + // try + // { + // var endurl = ChatDaten.ServerUrl + "/api/chat/messages?groupid=" + groupId; + + // WebRequest request = WebRequest.Create(endurl); + + // request.Credentials = CredentialCache.DefaultCredentials; + // request.Headers["Token"] = ChatDaten.AuthToken; + // request.Headers["CustomerID"] = ChatDaten.Kundennummer; + // request.Proxy = null; + + // // Get the response. + // WebResponse response = request.GetResponse(); + + // // Display the status. + // var statusResponse = ((HttpWebResponse)response).StatusDescription; + + + // string responseFromServer = ReadStream(response); + + // UserMessages jsonDaten = null; + // //verarbeite hier zu json + // if (!responseFromServer.Equals("")) + // { + // // _userMessages = null; + // //################# Deserialisierung mit Json ############################### + // jsonDaten = JsonConvert.DeserializeObject(responseFromServer); + + // //_userMessages = jsonDaten; + + // //if (_userMessages.Response.HasMorePages == true) + // //{ + // // _nextPage = _userMessages.Response.NextPage; + // // _hasNextPage = true; + // //} + // //else + // //{ + // // _hasNextPage = false; + // //} + // } + // else + // { + // // MessageBox.Show("Keine Daten Vorhanden."); + // } + + // response.Close(); + + // return jsonDaten; + // } + // catch (Exception e) + // { + // return null; + // } + //} + + #endregion + + #region Lade Weiter Nachrichten + + public IOrderedEnumerable LadeWeiterNachrichten(KontaktlistBuilder kontakt) + { + if (_hasNextPage == true) + { + HoleWeitereNachrichtenVomServer(kontakt.GroupId, _nextPage); + + foreach (var ChatMessage in _weitereUserMessages.Response.Messages) + { + if (ChatMessage.UserId == ChatDaten.Userid.Value) + { + //var timeformated = DateTime.Parse(ChatMessage.Timestamp.Date); + + var time = DateTime.Parse(ChatMessage.Timestamp.Date); + var clientZone = TimeZoneInfo.Local; + var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone); + + + if (!ChatMessage.File.Equals("")) // Bilder werden Sichtbar + { + //bool isGif = false; + + //if (ChatMessage.File.Contains(".gif")) + //{ + // isGif = true; + //} + + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text, + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, LadeBildNach(ChatMessage.File), timeformated)); + + } + else + { + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text, + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, timeformated)); + } + } + else + { + //var timeformated = DateTime.Parse(ChatMessage.Timestamp.Date); + + var time = DateTime.Parse(ChatMessage.Timestamp.Date); + var clientZone = TimeZoneInfo.Local; + var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone); + + if (!ChatMessage.File.Equals("")) // Bilder werden Sichtbar + { + //bool isGif = false; + //if (ChatMessage.File.Contains(".gif")) + //{ + // isGif = true; + //} + + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text, + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, LadeBildNach(ChatMessage.File), timeformated)); + } + else + { + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text, + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, timeformated)); + } + } + } + } + + + var x = Messages.OrderBy(r => r.ConvertetSendtimeString); + + return x; + } + + private void HoleWeitereNachrichtenVomServer(long groupId,string page) + { + try + { + var pa = page.Split('='); + var endurl = ChatDaten.ServerUrl + "/api/chat/messages?groupid=" + groupId+"&page="+pa[1]; + + WebRequest request = WebRequest.Create(endurl); + + request.Credentials = CredentialCache.DefaultCredentials; + request.Headers["Token"] = ChatDaten.AuthToken; + request.Headers["CustomerID"] = ChatDaten.Kundennummer; + request.Proxy = null; + + // Get the response. + WebResponse response = request.GetResponse(); + + // Display the status. + var statusResponse = ((HttpWebResponse)response).StatusDescription; + + + string responseFromServer = ReadStream(response); + + //verarbeite hier zu json + if (!responseFromServer.Equals("")) + { + _weitereUserMessages = null; + //################# Deserialisierung mit Json ############################### + var jsonDaten = JsonConvert.DeserializeObject(responseFromServer); + + _weitereUserMessages = jsonDaten; + + if (_weitereUserMessages.Response.HasMorePages == true) //neu + { + _nextPage = _weitereUserMessages.Response.NextPage; + _hasNextPage = true; + } + else + { + _hasNextPage = false; + } + + } + else + { + // MessageBox.Show("Keine Daten Vorhanden."); + } + + response.Close(); + } + catch (Exception e) + { + // MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK); + } + } + + #endregion + + #region Prüfe ob Neue Nachrichten vorhanden sind + + private double? _oldMessageCount; + + public bool SchaueNachNeuenNachrichten(AktuellerKontakt kontakt) + { + TimeSpan lastTs = DateTime.UtcNow.TimeOfDay; + + double timespan = lastTs.TotalSeconds; + + if (_userMessages != null && _userMessages.Response.Messages.Length > 0) + { + timespan = _userMessages.Response.Messages.First().CreatetdAt; + } + + if (kontakt != null) + { + var newMsCount = SendeTimestamp(kontakt.GroupId, timespan); + + if (_oldMessageCount == null) + { + _oldMessageCount = newMsCount; + } + + if (newMsCount.Value == _oldMessageCount.Value) + { + return false; + } + else + { + _oldMessageCount = newMsCount; + return true; + } + } + else + { + return false; + } + } + + private double? SendeTimestamp(long groupId,double lastStamp) + { + try + { + var endurl = ChatDaten.ServerUrl + "/api/ownchat/news/" + groupId+"/"+lastStamp; + + WebRequest request = WebRequest.Create(endurl); + + request.Credentials = CredentialCache.DefaultCredentials; + request.Headers["Token"] = ChatDaten.AuthToken; + request.Headers["CustomerID"] = ChatDaten.Kundennummer; + request.Proxy = null; + + // Get the response. + WebResponse response = request.GetResponse(); + + // Display the status. + var statusResponse = ((HttpWebResponse)response).StatusDescription; + + + string responseFromServer = ReadStream(response); + + var jsonDaten = JsonConvert.DeserializeObject(responseFromServer); + + return jsonDaten.MessageCount; + + } + catch (Exception e) + { + return null; + } + } + + #endregion + + #region Prüfe für alle ob neue Nachrichten vorhanden sind + + public double SchaueNachAllenMessageCounts() + { + TimeSpan lastTs = DateTime.UtcNow.TimeOfDay; + + double timespan = lastTs.TotalSeconds; + + var x = SendeTimestampForEach(0, timespan); + + + return x; + } + + private double SendeTimestampForEach(long groupId, double lastStamp) + { + try + { + var endurl = ChatDaten.ServerUrl + "/api/ownchat/news/" + groupId + "/" + lastStamp; + + WebRequest request = WebRequest.Create(endurl); + + request.Credentials = CredentialCache.DefaultCredentials; + request.Headers["Token"] = ChatDaten.AuthToken; + request.Headers["CustomerID"] = ChatDaten.Kundennummer; + ((HttpWebRequest) request).KeepAlive = false; + + // Get the response. + WebResponse response = request.GetResponse(); + + // Display the status. + var statusResponse = ((HttpWebResponse)response).StatusDescription; + + + string responseFromServer = ReadStream(response); + + var jsonDaten = JsonConvert.DeserializeObject(responseFromServer); + + return jsonDaten.MessageCount; + + } + catch (Exception e) + { + return 0; + } + + + + } + + public IOrderedEnumerable NeueGroupklassenKontakte() + { + List Kontakt = new List(); + + var daten = GruppenHolen(); + + foreach (var kontakt in daten.Response) + { + foreach (var value in kontakt.Value) + { + string message = ""; + DateTime timestamp = new DateTime(); + + var lastMS = value.LastMessage; + + if (lastMS != null) + { + if (lastMS.Text != null) + { + message = lastMS.Text; + timestamp = DateTime.Parse(lastMS.Timestamp.Date); + } + } + //null steht für employee + Kontakt.Add(new KontaktlistBuilder(value.Name, AvatarToImageSourceConverter(value.Avatar), + message, timestamp, value.Oid, null)); + } + } + + + var sortedKontaktliste = Kontakt.OrderByDescending(r => r.TimeStamp); + + return sortedKontaktliste; + + + //Search Bereich + //CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(Clientlist.ItemsSource); + //view.SortDescriptions.Add(new SortDescription("TimeStamp", ListSortDirection.Descending)); + //// view.SortDescriptions.Add(new SortDescription("StatusType", ListSortDirection.Descending)); + //view.Filter = UserFilter; + } + + private ChatGruppenDaten GruppenHolen() + { + try + { + var endurl = ChatDaten.ServerUrl + "/api/chat/groups"; + + WebRequest request = WebRequest.Create(endurl); + + request.Credentials = CredentialCache.DefaultCredentials; + request.Headers["Token"] = ChatDaten.AuthToken; + request.Headers["CustomerID"] = ChatDaten.Kundennummer; + //((HttpWebRequest) request).KeepAlive = false; + + // Get the response. + WebResponse response = request.GetResponse(); + + // Display the status. + var statusResponse = ((HttpWebResponse)response).StatusDescription; + + + string responseFromServer = ReadStream(response); + + //verarbeite hier zu json + //################# Deserialisierung mit Json ############################### + + var jsonDaten = JsonConvert.DeserializeObject(responseFromServer); + + + response.Close(); + + + return jsonDaten; + } + catch (Exception e) + { + // MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK); + return null; + } + + } + #endregion + + #region Sende Normale Message an Kontakt + + private HttpWebRequest requesten; + + public async void SendMessage(string message, long groupId) + { + try + { + var endurl = ChatDaten.ServerUrl + "/api/chat/messages/send"; + + Dictionary postparameter = new Dictionary(); + + postparameter.Add("groupid", groupId + ""); + postparameter.Add("text", message); + + + //Original + //string postdaten = ""; + + //foreach (var key in postparameter.Keys) + //{ + // postdaten += HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(postparameter[key]) + "&"; + //} + + //requesten = (HttpWebRequest)WebRequest.Create(endurl); + + //requesten.Method = "POST"; + //requesten.Headers["Token"] = ChatDaten.AuthToken; + //requesten.Headers["CustomerID"] = ChatDaten.Kundennummer; + ////requesten.KeepAlive = false; + + + //requesten.ContentType = "application/x-www-form-urlencoded"; + + //byte[] daten = Encoding.ASCII.GetBytes(postdaten); + + //requesten.ContentLength = daten.Length; + + //Stream requestStream = requesten.GetRequestStream(); + + //requestStream.Write(daten, 0, daten.Length); + + //requestStream.Dispose(); + + //requestStream.Close(); + + //Original ende + + //WebResponse myHttpWebResponse = requesten.GetResponse(); + + //string page = ReadStream(myHttpWebResponse); + + //MessageBox.Show(page); + + + + //########################## neuer versuch für bessere performance| hat geklappt ################################################# + + using (MultipartFormDataContent multiPartContent = new MultipartFormDataContent()) + { + multiPartContent.Add(new StringContent(groupId + ""), "groupid"); + multiPartContent.Add(new StringContent(message), "text"); + + Uri requestUri = new Uri(endurl); + + HttpRequestMessage httpRequest = new HttpRequestMessage(); + httpRequest.Method = HttpMethod.Post; + httpRequest.RequestUri = requestUri; + + //wegen Kontent nachschauen + httpRequest.Content = multiPartContent; + + httpRequest.Headers.Add("Token", ChatDaten.AuthToken); + httpRequest.Headers.Add("CustomerID", ChatDaten.Kundennummer); + + + HttpResponseMessage httpResponse = null; + + HttpClient httpClient = new HttpClient(); + //httpClient.Timeout = TimeSpan.FromSeconds(300); + httpResponse = await httpClient.SendAsync(httpRequest, CancellationToken.None).ConfigureAwait(false); + + //string antwortResponse = await httpResponse.Content.ReadAsStringAsync(); + + } + //################################################################################################################## + + } + catch (Exception e) + { + // MessageBox.Show("Fehler: " + e.Message); + } + } + + #endregion + + #region Sende Media Nachricht an Kontakt + + public void HoleUndSendeMediumAnKontakt(AktuellerKontakt kontakt) + { + try + { + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + + //if (typ == 1) + openFileDialog1.Filter = "Bilder |*.jpg;*.png;*.jpeg;*.jpe;*.gif;*.bmp"; + //else + // openFileDialog1.Filter = "Office Dokumente |*.doc;*.xls;*.ppt;*.txt"; + + DialogResult result = openFileDialog1.ShowDialog(); + + if (result == System.Windows.Forms.DialogResult.OK) + { + VerarbeiteMedia(openFileDialog1.FileName,kontakt); + } + } + catch (Exception e) + { + + } + } + + private void VerarbeiteMedia(string file,AktuellerKontakt kontakt) + { + byte[] mdatei; + using (Stream reader = File.OpenRead(file)) + { + mdatei = ReadFully(reader); + } + + string filename = Path.GetFileName(file); + + SendMediaMessage(filename, kontakt.GroupId, mdatei); + + //LoadKontakt(); + } + + private static byte[] ReadFully(Stream stream) + { + byte[] buffer = new byte[32768]; + using (MemoryStream ms = new MemoryStream()) + { + while (true) + { + int read = stream.Read(buffer, 0, buffer.Length); + if (read <= 0) + { + return ms.ToArray(); + } + + ms.Write(buffer, 0, read); + } + } + } + + private HttpRequestMessage httpRequest; + + private async void SendMediaMessage(string message, long groupId, byte[] mediaDatei) + { + try + { + #region test Multiplatform + using (MultipartFormDataContent multiPartContent = new MultipartFormDataContent()) + { + Uri requestUri = new Uri(ChatDaten.ServerUrl + "/api/chat/messages/send"); + + multiPartContent.Add(new ByteArrayContent(mediaDatei, 0, mediaDatei.Count()), "file", message); + multiPartContent.Add(new StringContent(groupId + ""), "groupid"); + + httpRequest = new HttpRequestMessage(); + httpRequest.Method = HttpMethod.Post; + httpRequest.RequestUri = requestUri; + httpRequest.Content = multiPartContent; + + httpRequest.Headers.Add("Token", ChatDaten.AuthToken); + httpRequest.Headers.Add("CustomerID", ChatDaten.Kundennummer); + + + HttpResponseMessage httpResponse = null; + + HttpClient httpClient = new HttpClient(); + //httpClient.Timeout = TimeSpan.FromSeconds(300); + httpResponse = await httpClient.SendAsync(httpRequest, CancellationToken.None).ConfigureAwait(false); + + + string antwortResponse = await httpResponse.Content.ReadAsStringAsync(); + + //MessageBox.Show(antwortResponse); + } + #endregion + } + catch (Exception e) + { + + } + } + + #endregion + + #region Context Menue Für Chat inkl. Funktionen + public ContextMenu ErstelleKontextMenue() + { + ContextMenu context = new ContextMenu(); + + System.Windows.Controls.MenuItem item1 = new System.Windows.Controls.MenuItem(); + System.Windows.Controls.MenuItem item2 = new System.Windows.Controls.MenuItem(); + + context.Items.Add(item1); + context.Items.Add(item2); + + item1.Header = "Speichern unter"; + item1.Visibility = Visibility.Visible; + + item2.Header = "Einfügen"; + item2.Visibility = Visibility.Visible; + + //Image icon = new Image(); + //icon.Source = new BitmapImage(new Uri(@"..\..\Ressource\ClipboardDisabled.png", UriKind.Relative)); + //icon.Height = 16; + //icon.Width = 16;//(new Size(16, 16)); + //item1.Icon = icon; + + return context; + } + + #region Speichere Chat Doku/MEdia aufm PC + public void SpeichernUnterFunkion(KontaktMessageBuilder item) + { + if (item.ImageSources != null) + { + string filename = item.ImageSources.ToString(); + + SpeichernUnter(1, filename, + DownloadMediaDatei(filename)); + } + } + + private byte[] DownloadMediaDatei(string pfad) + { + try + { + byte[] pic = null; + + using (WebClient client = new WebClient()) + { + pic = client.DownloadData(pfad); + } + + return pic; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + private void SpeichernUnter(int filterTyp, string dateiname, byte[] datensatz) + { + try + { + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + + saveFileDialog1.FileName = Path.GetFileName(dateiname); + + if (filterTyp == 1) // Bilder + { + saveFileDialog1.Filter = "Bilder |*.jpg;*.png;*.jpeg;*.jpe;*.gif;*.bmp"; + saveFileDialog1.Title = "Bild Speichern"; + saveFileDialog1.ShowDialog(); + } + + if (filterTyp == 2) //Office + { + saveFileDialog1.Filter = "Office Dokumente |*.doc;*.xls;*.ppt;*.txt"; + saveFileDialog1.Title = "Dokument Speichern"; + saveFileDialog1.ShowDialog(); + } + + if (filterTyp == 3) // Audio + { + saveFileDialog1.Filter = "Audio Datei|*.wav;*.mp3;*.wma;*.aac;*.ogg;"; + saveFileDialog1.Title = "Audio Speichern"; + saveFileDialog1.ShowDialog(); + } + + if (saveFileDialog1.FileName != "") + { + FileStream fs = (FileStream)saveFileDialog1.OpenFile(); + + fs.Write(datensatz, 0, datensatz.Length); + + fs.Close(); + } + } + catch (Exception e) + { + //throw fehler + } + } + + #endregion + + #region Fuege Daten Bilder usw via DragAndDrop in den Chat / muss noch bearbeitet werden + public void Einfuegen() + { + //var item = context.Items[2] as MenuItem; + + //item.Visibility = Visibility.Collapsed; + //Chat.SelectionMode = SelectionMode.Single; + //Chat.Focusable = true; + + var d = System.Windows.Forms.Clipboard.GetDataObject(); + + if (d.GetDataPresent(DataFormats.FileDrop)) + { + string[] files = (String[])d.GetData(DataFormats.FileDrop); + + string imgFileString = files[0]; + + + //if (isAnImage(imgFileString)) + //{ + // ZeigeProgressWärendUpload(1, imgFileString); + //} + //else + //{ + // ZeigeProgressWärendUpload(2, imgFileString); + //} + + System.Windows.Forms.Clipboard.Clear(); + } + else + { + if (d.GetDataPresent(DataFormats.Text)) + { + string files = (String)d.GetData(DataFormats.Text); + + string imgFileString = files; + + try + { + byte[] data; + using (WebClient client = new WebClient()) + { + data = client.DownloadData(imgFileString); + } + + string filename = Path.GetFileName(imgFileString); + + //string isloaded = LoadDokumentFromInet(data, filename); + + //if (!isloaded.IsNullOrEmpty() && isAnImage(isloaded)) + //{ + // //ZeigeProgressWärendUpload(1, isloaded); + //} + //else + //{ + // //ZeigeProgressWärendUpload(2, isloaded); + //} + + System.Windows.Forms.Clipboard.Clear(); + } + catch (Exception s) + { + //MessageBox.Show("Der Chat kann den Zwischen-Speicher nicht verarbeiten.", "Fehler", + // MessageBoxButton.OK); + } + } + else + { + if (d.GetDataPresent(DataFormats.Bitmap)) + { + Bitmap pic = (Bitmap)d.GetData(DataFormats.Bitmap); + + var bildname = GeneriereZuffalsNamen() + ".jpg"; + + System.Drawing.Image img = pic; + + //var data = Utils.CreateByteArrayFromImage(img); + + //string isloaded = LoadDokumentFromInet(data, bildname); + + //if (!isloaded.IsNullOrEmpty() && isAnImage(isloaded)) + //{ + // //ZeigeProgressWärendUpload(1, isloaded); + //} + //else + //{ + // //ZeigeProgressWärendUpload(2, isloaded); + //} + + System.Windows.Forms.Clipboard.Clear(); + } + else + { + //MessageBox.Show("Der Chat kann den Zwischen-Speicher nicht verarbeiten.", "Fehler", + // MessageBoxButton.OK); + } + } + } + } + + private string GeneriereZuffalsNamen() + { + int lenght = 6; + const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + + "abcdefghijklmnopqrstuvwxyz" + + "0123456789"; + var random = new Random(); + String Code = new string(Enumerable.Repeat(chars, lenght) + .Select(s => s[random.Next(s.Length)]).ToArray()); + + return Code; + } + #endregion + + #endregion + + #region Zeige Kontakt Bild / hat noch probleme + + public void ShowKontaktPicture(AktuellerKontakt curItem ) + { + using (Form form = new Form()) + { + Image imgg = new Image(); + + imgg.Source = curItem.Image; + + BmpBitmapEncoder encoder = new BmpBitmapEncoder(); + MemoryStream ms = new MemoryStream(); + encoder.Frames.Add(BitmapFrame.Create((BitmapSource)imgg.Source)); + encoder.Save(ms); + System.Drawing.Image img = System.Drawing.Image.FromStream(ms); + + Bitmap imgbit = new Bitmap(img); + + form.StartPosition = FormStartPosition.CenterScreen; + form.Size = imgbit.Size; + form.FormBorderStyle = FormBorderStyle.Sizable; + + PictureBox pb = new PictureBox(); + pb.Dock = DockStyle.Fill; + pb.Image = imgbit; + + pb.SizeMode = PictureBoxSizeMode.StretchImage; + + + form.Controls.Add(pb); + form.ShowDialog(); + } + } + + #endregion + + + + } +} diff --git a/ChatController/HauptKlassen/ChatEmoji.cs b/ChatController/HauptKlassen/ChatEmoji.cs new file mode 100644 index 0000000..cfe348b --- /dev/null +++ b/ChatController/HauptKlassen/ChatEmoji.cs @@ -0,0 +1,477 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Threading; + +namespace ChatController.HauptKlassen +{ + public class ChatEmoji + { + public List EmojisListBox1 = new List(); + public List EmojisListBox2 = new List(); + public List EmojisListBox3 = new List(); + public List EmojisListBox4 = new List(); + public List EmojisListBox5 = new List(); + public List EmojisListBox6 = new List(); + public List EmojisListBox7 = new List(); + + public string TabItem1; + public string TabItem2; + public string TabItem3; + public string TabItem4; + public string TabItem5; + public string TabItem6; + public string TabItem7; + + public ChatEmoji() + { + LoadEmojipicsInView(); + } + + + private void LoadEmojipicsInView() + { + + #region Normale + + List normal = new List + { + "D83DDE00", "D83DDE01", "D83DDE02", "D83DDE03", "D83DDE04", "D83DDE05", "D83DDE06", "D83DDE09", "D83DDE0A", "D83DDE0B", "D83DDE0E", + "D83DDE0D","D83DDE18","D83DDE17","D83DDE19","D83DDE1A","263A","D83DDE42","D83DDE10","D83DDE11","D83DDE36","D83DDE0F","D83DDE23","D83DDE25","D83DDE2E","D83DDE2F", + "D83DDE2A","D83DDE2B","D83DDE34","D83DDE0C","D83DDE1B","D83DDE1C","D83DDE1D","D83DDE12","D83DDE13","D83DDE14","D83DDE15","D83DDE32","2639","D83DDE41","D83DDE16", + "D83DDE1E","D83DDE1F","D83DDE24","D83DDE22","D83DDE2D","D83DDE26","D83DDE27","D83DDE28","D83DDE29","D83DDE2C","D83DDE30","D83DDE31","D83DDE33","D83DDE35","D83DDE21", + "D83DDE20","D83DDE07","D83DDE37" + }; + + foreach (var x in normal) + { + EmojisListBox1.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + string tabheader1 = string.Join("", (from Match m in Regex.Matches("D83DDE0A", @"\S{4}") select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()); + + + TabItem1 = tabheader1; + + #endregion + + #region Variable + + List variable = new List { "D83DDE08", "D83DDC7F", "D83DDC79", "D83DDC7A", "D83DDC80", "2620", "D83DDC7B", "D83DDC7D", "D83DDC7E", "D83DDCA9" }; + + + foreach (var x in variable) + { + EmojisListBox1.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + #endregion + + + #region Tier + + List tier = new List + { + "D83DDE3A","D83DDE38","D83DDE39","D83DDE3B","D83DDE3C","D83DDE3D","D83DDE40","D83DDE3F","D83DDE3E","D83DDE48","D83DDE49","D83DDE4A","D83D DC35","D83D DC12", + "D83D DC36", "D83D DC15","D83D DC29","D83D DC3A","D83D DC31","D83D DC08","D83D DC2F","D83D DC05","D83D DC06","D83D DC34","D83D DC0E 0009","D83D DC2E","D83D DC02", + "D83D DC03","D83D DC04","D83D DC37","D83D DC16","D83D DC17","D83D DC3D","D83D DC0F","D83D DC11","D83D DC10","D83D DC2A","D83D DC2B","D83D DC18","D83D DC2D","D83D DC01", + "D83D DC00","D83D DC39","D83D DC30","D83D DC07","D83D DC3F","D83D DC3B","D83D DC28","D83D DC3C","D83D DC3E","D83D DC14","D83D DC13","D83D DC23","D83D DC24","D83D DC25", + "D83D DC26","D83D DC27","D83D DD4A","D83D DC38","D83D DC0A","D83D DC22","D83D DC0D","D83D DC32","D83D DC09","D83D DC33","D83D DC0B","D83D DC2C","D83D DC1F","D83D DC20", + "D83D DC21","D83D DC19","D83D DC1A","D83D DC0C","D83D DC1B","D83D DC1C","D83D DC1D","D83D DC1E","D83D DD77","D83D DD78" + + }; + + foreach (var x in tier) + { + EmojisListBox2.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + #endregion + + + #region Mensch + + List mensch = new List + { + "D83DDC66","D83DDC67","D83DDC68","D83DDC69","D83DDC74","D83DDC75","D83DDC76","D83DDC7C","D83DDC6E","D83DDD75","D83DDC82","D83DDC77","D83DDC73", + "D83DDC71","D83CDF85","D83DDC78","D83DDC70","D83DDC72","D83DDE4D","D83DDE4E","D83DDE45","D83DDE46","D83DDC81","D83DDE4B","D83DDE47","D83DDC86", + "D83DDC87","D83DDEB6","D83CDFC3","D83DDC83","D83DDC6F","D83DDD74","D83DDDE3","D83DDC64","D83DDC65","D83DDC6B","D83DDC6C","D83DDC6D","D83DDC8F", + "D83DDC69 200D2764FE0F200DD83DDC8B200DD83DDC68","D83DDC68200D2764FE0F200DD83DDC8B200DD83DDC68","D83DDC69200D2764FE0F200DD83DDC8B200DD83DDC69", + "D83DDC91","D83DDC69200D2764FE0F200DD83DDC68","D83DDC68200D2764FE0F200DD83DDC68","D83DDC69200D2764FE0F200DD83DDC69", + "D83DDC6A","D83DDC68200DD83DDC69200DD83DDC66","D83DDC68200DD83DDC69200DD83DDC67","D83DDC68200DD83DDC69200DD83DDC67200DD83DDC66", + "D83DDC68200DD83DDC69200DD83DDC66200DD83DDC66","D83DDC68200DD83DDC69200DD83DDC67200DD83DDC67","D83DDC68200DD83DDC68200DD83DDC66", + "D83DDC68200DD83DDC68200DD83DDC67","D83DDC68200DD83DDC68200DD83DDC67200DD83DDC66","D83DDC68200DD83DDC68200DD83DDC66200DD83DDC66", + "D83DDC68200DD83DDC68200DD83DDC67200DD83DDC67","D83DDC69200DD83DDC69200DD83DDC66","D83DDC69200DD83DDC69200DD83DDC67", + "D83DDC69200DD83DDC69200DD83DDC67200DD83DDC66","D83DDC69200DD83DDC69200DD83DDC66200DD83DDC66","D83DDC69200DD83DDC69200DD83DDC67200DD83DDC67" + }; + + foreach (var x in mensch) + { + EmojisListBox1.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + #endregion + + #region Zeichen + + List zeichen = new List + { + "D83DDCAA","D83DDC48","D83DDC49","261D","D83DDC46","D83DDD95","D83DDC47","270C","D83DDD96","D83DDD90","270B","D83DDC4C","D83DDC4D","D83DDC4E","270A", + "D83DDC4A","D83DDC4B","D83DDC4F","270D","D83DDC50","D83DDE4C","D83DDE4F","D83DDC85","D83DDC42","D83DDC43","D83DDC63","D83DDC40","D83DDC41","D83DDC41200DD83DDDE8" + }; + + foreach (var x in zeichen) + { + EmojisListBox7.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + string tabheader7 = string.Join("", (from Match m in Regex.Matches("270C", @"\S{4}") select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()); + + + TabItem7 = tabheader7; + + #endregion + + #region Nur die Liebe Zählt + + List liebe = new List + { + "D83DDC45","D83DDC44","D83DDC8B","D83DDC98","2764","D83DDC93","D83DDC94","D83DDC95","D83DDC96","D83DDC97","D83DDC99","D83DDC9A","D83DDC9B","D83DDC9C", + "D83DDC9D","D83DDC9E","D83DDC9F","2763","D83DDC8C" + }; + + foreach (var x in liebe) + { + EmojisListBox1.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + #endregion + + #region Sonstiges + + List sonstiges = new List + { + "D83DDCA4","D83DDCA2","D83DDCA3","D83DDCA5","D83DDCA6", "D83DDCA8","D83DDCAB","D83DDCAC","D83DDDE8","D83DDDEF","D83DDCAD","D83DDD73" + + }; + + foreach (var x in sonstiges) + { + EmojisListBox1.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + #endregion + + #region Kleidung + + List kleidung = new List + { + "D83D DC53","D83D DD76","D83D DC54","D83DDC55","D83D DC56","D83D DC57","D83D DC58","D83D DC59","D83D DC5A","D83D DC5B","D83D DC5C","D83D DC5D","D83D DECD","D83C DF92", + "D83D DC5E","D83D DC5F","D83D DC60","D83D DC61","D83D DC62","D83D DC51","D83D DC52","D83C DFA9","D83C DF93","26D1","D83D DC84","D83D DC8D","D83D DC8E" + }; + + foreach (var x in kleidung) + { + EmojisListBox1.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + #endregion + + #region Pflanzen + + List pflanzen = new List + { + "D83DDC90","D83CDF38","D83DDCAE","D83CDFF5","D83CDF39","D83CDF3A","D83CDF3B","D83CDF3C","D83CDF37","D83CDF31","D83CDF32","D83CDF33","D83CDF34", + "D83CDF35","D83CDF3E","D83CDF3F","2618","D83CDF40","D83CDF41","D83CDF42","D83CDF43" + + }; + + foreach (var x in pflanzen) + { + EmojisListBox2.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + string tabheader2 = string.Join("", (from Match m in Regex.Matches("D83CDF3C", @"\S{4}") select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()); + + + TabItem2 = tabheader2; + + #endregion + + #region Nahrung + + List nahrung = new List + { + "D83CDF47","D83CDF48","D83CDF49","D83CDF4A","D83CDF4B","D83CDF4C","D83CDF4D","D83CDF4E","D83CDF4F","D83CDF50","D83CDF51","D83CDF52","D83CDF53", + "D83CDF45","D83CDF46","D83CDF3D","D83CDF36","D83CDF44","D83CDF30","D83CDF5E","D83CDF56","D83CDF57","D83CDF54","D83CDF5F","D83CDF55","D83CDF73", + "D83CDF72","D83CDF71","D83CDF58","D83CDF59","D83CDF5A","D83CDF5B","D83CDF5C","D83CDF5D","D83CDF60","D83CDF62","D83CDF63","D83CDF64","D83CDF65", + "D83CDF61","D83CDF66","D83CDF67","D83CDF68","D83CDF69","D83CDF6A","D83CDF82","D83CDF70","D83CDF6B","D83CDF6C","D83CDF6D","D83CDF6E","D83CDF6F", + "D83CDF7C","2615","D83CDF75","D83CDF76","D83CDF77","D83CDF78","D83CDF79","D83CDF7A","D83CDF7B","D83CDF7D","D83CDF74","D83DDD2A" + + }; + + foreach (var x in nahrung) + { + EmojisListBox3.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + string tabheader3 = string.Join("", (from Match m in Regex.Matches("D83CDF74", @"\S{4}") select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()); + + + TabItem3 = tabheader3; + + #endregion + + #region planet + + List planet = new List + { + "D83CDF0D","D83CDF0E","D83CDF0F","D83CDF10","D83DDDFA","D83DDDFE","D83CDFD4","26F0","D83CDF0B","D83CDFD5","D83CDFD6","D83CDFDC","D83CDFDD","D83CDFDE" + + }; + + foreach (var x in planet) + { + EmojisListBox2.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + #endregion + + + #region Tuck Tuck + + List tucktuck = new List + { + "D83DDE82","D83DDE83","D83DDE84","D83DDE85","D83DDE86","D83DDE87","D83DDE88","D83DDE89","D83DDE8A","D83DDE9D","D83DDE9E","D83DDE8B","D83DDE8C", + "D83DDE8D","D83DDE8E","D83DDE90","D83DDE91","D83DDE92","D83DDE93","D83DDE94","D83DDE95","D83DDE96","D83DDE97","D83DDE98","D83DDE99","D83DDE9A", + "D83DDE9B","D83DDE9C","D83DDEB2","D83CDFCE","D83CDFCD","D83DDE8F","D83DDEE3","D83DDEE4","26FD","D83DDEA8","D83DDEA5","D83DDEA6","D83DDEA7","2693", + "26F5","D83DDEA4","D83DDEF3","26F4","D83DDEE5","D83DDEA2","2708","D83DDEE9","D83DDEEB","D83DDEEC","D83DDCBA","D83DDE81","D83DDE9F","D83DDEA0","D83DDEA1", + "D83DDE80","D83DDEF0" + + }; + + foreach (var x in tucktuck) + { + EmojisListBox5.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + string tabheader5 = string.Join("", (from Match m in Regex.Matches("D83DDE97", @"\S{4}") select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()); + + + TabItem5 = tabheader5; + #endregion + + + #region Bauten kunst + + List bauten = new List + { + "D83CDFDF","D83CDFDB","D83CDFD7","D83CDFD8","D83CDFD9","D83CDFDA","D83CDFE0","D83CDFE1","D83CDFE2","D83CDFE3","D83CDFE4","D83CDFE5","D83CDFE6", + "D83CDFE8","D83CDFE9","D83CDFEA","D83CDFEB","D83CDFEC","D83CDFED","D83CDFEF","D83CDFF0","D83DDC92","D83DDDFC","D83DDDFD","26EA","26E9","26F2","26FA", + "D83CDF01","D83CDF03","D83CDF04","D83CDF05","D83CDF06","D83CDF07","D83CDF09","2668","D83CDF0C","D83CDFA0","D83CDFA1","D83CDFA2","D83DDC88","D83CDFAA", + "D83CDFAD","D83DDDBC","D83CDFA8","D83CDFB0", + + }; + + foreach (var x in bauten) + { + EmojisListBox5.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + #endregion + + + #region Klingel Bett UhrZeit wetter + + + List klingbett = new List + { + "D83DDECE","D83DDEAA","D83DDECC","D83DDECF","D83DDECB","D83DDEBD","D83DDEBF","D83DDEC0","D83DDEC1","231B","23F3","231A","23F0","23F1","23F2","D83DDD70","D83DDD5B", + "D83DDD67","D83DDD50","D83DDD5C","D83DDD51","D83DDD5D","D83DDD52","D83DDD5E","D83DDD53","D83DDD5F","D83DDD54","D83DDD60","D83DDD55","D83DDD61","D83DDD56", + "D83DDD62","D83DDD57","D83DDD63","D83DDD58","D83DDD64","D83DDD59","D83DDD65","D83DDD5A","D83DDD66","D83CDF11","D83CDF12","D83CDF13","D83CDF14","D83CDF15", + "D83CDF16","D83CDF17","D83CDF18","D83CDF19","D83CDF1A","D83CDF1B","D83CDF1C","D83CDF21","2600","D83CDF1D","D83CDF1E","2B50","D83CDF1F","D83CDF20","2601", + "26C5","26C8","D83CDF24","D83CDF25","D83CDF26","D83CDF27","D83CDF28","D83CDF29","D83CDF2A","D83CDF2B","D83CDF2C","D83CDF00","D83CDF08","D83CDF02", + "2602","2614","26F1","26A1","2744","2603","26C4","2604","D83DDD25","D83DDCA7","D83CDF0A" + + }; + + foreach (var x in klingbett) + { + EmojisListBox2.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + #endregion + + #region Party + + List party = new List + { + "D83CDF83","D83CDF84","D83CDF86","D83CDF87","2728","D83CDF88","D83CDF89","D83CDF8A","D83CDF8B","D83CDF8D","D83CDF8E","D83CDF8F","D83CDF90", + "D83CDF91","D83CDF80","D83CDF81","D83CDF97","D83CDF9F","D83CDFAB" + + }; + + foreach (var x in party) + { + EmojisListBox1.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + #endregion + + + #region Sport + + List sport = new List + { + "D83CDF96","D83CDFC6","D83CDFC5","26BD","26BE","D83CDFC0","D83CDFC8","D83CDFC9","D83CDFBE","D83CDFB1","D83CDFB3","D83CDFAF", + "26F3","26F8","D83CDFA3","D83CDFBD","D83CDFBF","D83CDFC7","26F7","D83CDFC2","D83CDFCC","D83CDFC4","D83DDEA3000A","D83CDFCA", + "26F9","D83CDFCB","D83DDEB4","D83DDEB5" + }; + + foreach (var x in sport) + { + EmojisListBox4.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + string tabheader4 = string.Join("", (from Match m in Regex.Matches("26BD", @"\S{4}") select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()); + + + TabItem4 = tabheader4; + + + #endregion + + + #region Gaming Sound technik + + + List gaming = new List + { + "D83CDFAE","D83DDD79","D83CDFB2","2660","2665","2666","2663","D83CDCCF","D83CDC04","D83CDFB4","D83DDD07","D83DDD08","D83DDD09","D83DDD0A","D83DDCE2", + "D83DDCE3","D83DDCEF","D83DDD14","D83DDD15","D83CDFBC","D83CDFB5","D83CDFB6","D83CDF99","D83CDF9A","D83CDF9B","D83CDFA4","D83CDFA7","D83DDCFB","D83CDFB7", + "D83CDFB8","D83CDFB9","D83CDFBA","D83CDFBB","D83DDCF1","D83DDCF2","260E","D83DDCDE","D83DDCDF","D83DDCE0","D83DDD0B","D83DDD0C","D83DDCBB","D83DDDA5", + "D83DDDA8","2328","D83DDDB1","D83DDDB2","D83DDCBD","D83DDCBE","D83DDCBF","D83DDCC0","D83CDFA5","D83CDF9E","D83DDCFD","D83CDFAC","D83DDCFA","D83DDCF7", + "D83DDCF8","D83DDCF9","D83DDCFC","D83DDD0D","D83DDD0E","D83DDD2C","D83DDD2D","D83DDCE1","D83DDD6F","D83DDCA1","D83DDD26","D83CDFEE" + + }; + + foreach (var x in gaming) + { + EmojisListBox6.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + string tabheader6 = string.Join("", (from Match m in Regex.Matches("D83DDD79", @"\S{4}") select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()); + + + TabItem6 = tabheader6; + + + #endregion + + + #region Schule und so + + List schule = new List + { + "D83DDCD4","D83DDCD5","D83DDCD6","D83DDCD7","D83DDCD8","D83DDCD9","D83DDCDA","D83DDCD3","D83DDCD2","D83DDCC3","D83DDCDC","D83DDCC4","D83DDCF0","D83DDDDE", + "D83DDCD1","D83DDD16","D83CDFF7","D83DDCB0","D83DDCB4","D83DDCB5","D83DDCB6","D83DDCB7","D83DDCB8","D83DDCB3","D83DDCB9","D83DDCB1","D83DDCB2","2709", + "D83DDCE7","D83DDCE8","D83DDCE9","D83DDCE4","D83DDCE5","D83DDCE6","D83DDCEB","D83DDCEA","D83DDCEC","D83DDCED","D83DDCEE","D83DDDF3","270F","2712","D83DDD8B", + "D83DDD8A","D83DDD8C","D83DDD8D","D83DDCDD","D83DDCBC","D83DDCC1","D83DDCC2","D83DDDC2","D83DDCC5","D83DDCC6","D83DDDD2","D83DDDD3","D83DDCC7","D83DDCC8", + "D83DDCC9","D83DDCCA","D83DDCCB","D83DDCCC","D83DDCCD","D83DDCCE","D83DDD87","D83DDCCF","D83DDCD0","2702","D83DDDC3","D83DDDC4","D83DDDD1","D83DDD12", + "D83DDD13","D83DDD0F","D83DDD10","D83DDD11","D83DDDDD" + + }; + + foreach (var x in schule) + { + EmojisListBox6.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + #endregion + + + #region waffen + + List waffen = new List + { + "D83DDD28","26CF","2692","D83DDEE0","D83DDDE1","2694","D83DDD2B","D83DDEE1","D83DDD27","D83DDD29","2699","D83DDDDC","2697","2696","D83DDD17", + "26D3","D83DDC89","D83DDC8A","D83DDEAC","26B0","26B1","D83DDDFF","D83DDEE2","D83DDD2E" + + + }; + + foreach (var x in waffen) + { + EmojisListBox6.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + #endregion + + #region Schilder + + List schilder = new List + { + + "D83CDFE7","D83DDEAE","D83DDEB0","267F","D83DDEB9","D83DDEBA","D83DDEBB","D83DDEBC","D83DDEBE","D83DDEC2","D83DDEC3","D83DDEC4","D83DDEC5","26A0","D83DDEB8", + "26D4","D83DDEAB","D83DDEB3","D83DDEAD","D83DDEAF","D83DDEB1","D83DDEB7","D83DDCF5","D83DDD1E","2622","2623","2B06","2197","27A1","2198","2B07","2199","2B05", + "2196","2195","2194","21A9","21AA","2934","2935","D83DDD03","D83DDD04","D83DDD19","D83DDD1A","D83DDD1B","D83DDD1C","D83DDD1D","269B","D83DDD49","2721","2638", + "262F","271D","2626","262A","262E","D83DDD2F","267B","D83DDCDB","269C","D83DDD30","D83DDD31","2B55","2705","2611","2714","2716","274C","274E","2795","2796", + "2797","27B0","27BF","303D","2733","2734","2747","203C","2049","2753","2754","2755","2757 0009","3030","00A9","00AE","2122","2648","2649","264A","264B","264C", + "264D","264E","264F","2650","2651","2652","2653","26CE","D83DDD00","D83DDD01","D83DDD02","25B6","23E9","23ED","23EF","25C0","23EA","23EE","D83D DD3C","23EB", + "D83DDD3D","23EC","23F8","23F9","23FA","23CF","D83CDFA6","D83DDD05","D83DDD06","D83DDCF6","D83DDCF3","D83DDCF4","D83DDCAF","D83DDD20","D83DDD21", + "D83DDD22","D83DDD23","D83DDD24","D83CDD70","D83CDD8E","D83CDD71","D83CDD91","D83CDD92","D83CDD93","D83CDD94","24C2","D83CDD95","D83CDD96","D83CDD7E", + "D83CDD97","D83CDD7F","D83CDD98","D83CDD99","D83CDD9A","D83CDE01","D83CDE02","D83CDE37","D83CDE36","D83CDE2F" ,"D83CDE50","D83CDE39","D83CDE1A","D83CDE32", + "D83CDE51","D83CDE38","D83CDE34","D83CDE33","3297","3299","D83CDE3A","D83CDE35","25AA","25AB","25FB","25FC","25FD","25FE","2B1B","2B1C","D83DDD36","D83DDD37", + "D83DDD38","D83DDD39","D83DDD3A","D83DDD3B","D83DDCA0","D83DDD18","D83DDD32","D83DDD33","26AA","26AB","D83DDD34","D83DDD35","D83CDFC1","D83DDEA9","D83CDF8C", + "D83CDFF4","D83CDFF3" + + }; + + foreach (var x in schilder) + { + EmojisListBox7.Add(new DirectoryListing("", string.Join("", (from Match m in Regex.Matches(x, @"\S{4}") + select (char)int.Parse(m.Value, NumberStyles.HexNumber)).ToArray()))); + } + + #endregion + + } + + } + + + + public class DirectoryListing + { + public DirectoryListing(String pfad, String emojiCode) + { + Pfad = pfad; + EmojiCode = emojiCode; + } + + public string Pfad { get; set; } + public string EmojiCode { get; set; } + } +} diff --git a/ChatController/HauptKlassen/Login.cs b/ChatController/HauptKlassen/Login.cs new file mode 100644 index 0000000..51f64b2 --- /dev/null +++ b/ChatController/HauptKlassen/Login.cs @@ -0,0 +1,298 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using System.Web; +using ChatController.Klassen; +using Newtonsoft.Json; + +namespace ChatController.HauptKlassen +{ + public class Login + { + private string _url = "https://bewoplaner.beyondsoft.de/voucher_check.php"; + + private string _serverUrl = ""; + private string _authToken = ""; + + private readonly string _benutzername; + private readonly string _passwort; + private readonly string _kundennummer; + private readonly string _chatCode; + + private long? _userid; + + private bool _verbindungsaufbauOK = false; + private bool _ownchatVerbindungsaufbauOK = false; + private bool _gruppeholenverbindungsaufbauOK = false; + + private AuthentifizierungsDaten _serverconect; + private UserDaten _userconect; + private ChatGruppenDaten _groupconect; + + public Login(string kundennummer, string chatCode,string benutzername,string passwort) + { + _kundennummer = kundennummer; + _chatCode = chatCode; + _benutzername = benutzername; + _passwort = passwort; + } + + public ChatDatenUebergabe AnmeldevorgangDurchFuehren() + { + BaueEineVerbindungAuf(); + + if (_verbindungsaufbauOK) + { + Dictionary dic = new Dictionary(); + + dic.Add("username", _benutzername); + dic.Add("password", _passwort); + + VerbindeMitChatServer(dic); + } + + + // Gruppen abfragen + if (_ownchatVerbindungsaufbauOK) + { + GruppenHolen(); + } + + + if (_gruppeholenverbindungsaufbauOK) + { + + ChatDatenUebergabe ubergabe = new ChatDatenUebergabe(_serverconect, _userconect, _groupconect, _serverUrl, _authToken, _userid, _kundennummer); + + return ubergabe; + } + + return null; + } + + //throw fehler anpassungen überall + private void BaueEineVerbindungAuf() + { + try + { + string endurl = _url + "?k=" + _kundennummer + "&Voucher=" + _chatCode; + + + WebRequest request = WebRequest.Create(endurl); + + request.Credentials = CredentialCache.DefaultCredentials; + + WebResponse response; + + try + { + response = request.GetResponse(); + } + catch (Exception e) + { + //throw fehler + // MessageBox.Show("Die Kundennummer oder der Chatcode ist falsch.\nOder Beides!", "Fehler", MessageBoxButton.OK); + return; + } + + // Display the status. + var statusResponse = ((HttpWebResponse)response).StatusDescription; + + + + string responseFromServer = ReadStream(response); + + + if (!responseFromServer.Equals("")) + { + //_voucherCheckOk = true; + //################# Deserialisierung mit Json ############################### + var jsonDaten = JsonConvert.DeserializeObject>(responseFromServer); + + var serv = jsonDaten[_chatCode].ServerName; + + //################################################################################# + + _serverUrl = serv; + + _serverconect = jsonDaten[_chatCode]; + + _verbindungsaufbauOK = true; + } + else + { + //throw fehler + //MessageBox.Show("Die Kundennummer oder der Chatcode ist falsch.\nOder Beides!", "Fehler", MessageBoxButton.OK); + } + + response.Close(); + } + catch (Exception e) + { + //thorw fehler + //MessageBox.Show("Es konnte keine Verbindung aufgebaut werden.", "Fehler", MessageBoxButton.OK); + } + } + + private void VerbindeMitChatServer(Dictionary postparameter) + { + try + { + var endurl = _serverUrl + "/api/user/login"; + + string postdaten = ""; + + int i = 0; + foreach (var key in postparameter.Keys) + { + postdaten += HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(postparameter[key]) + "&"; + + } + + WebRequest requesten = WebRequest.Create(endurl); + + requesten.Method = "POST"; + requesten.ContentType = "application/x-www-form-urlencoded"; + requesten.Headers["CustomerID"] = _kundennummer; + + byte[] daten = Encoding.ASCII.GetBytes(postdaten); + + requesten.ContentLength = daten.Length; + + Stream requestStream = requesten.GetRequestStream(); + + requestStream.Write(daten, 0, daten.Length); + + requestStream.Close(); + + HttpWebResponse myHttpWebResponse = (HttpWebResponse)requesten.GetResponse(); + + Stream responseStream = myHttpWebResponse.GetResponseStream(); + + StreamReader myStreamReader = new StreamReader(responseStream, Encoding.Default); + + string pageContent = myStreamReader.ReadToEnd(); + + + //Baue pagekontent in Json um + + if (!pageContent.Equals("")) + { + //_serverCheckOK = true; + + //string[] array = responseFromServer.Split(':'); + + //Json Verarbeitungsgedöns Dictionary < string, TestKlasse> + var jsonDaten = JsonConvert.DeserializeObject(pageContent); + + //var serv = jsonDaten[_chatcode].ServerName; + + foreach (var datev in jsonDaten.Response) + { + _authToken = datev.Value.Token; + _userid = datev.Value.Oid; + } + + _userconect = jsonDaten; + + _ownchatVerbindungsaufbauOK = true; + } + else + { + //throw fehler + // MessageBox.Show("Keine Daten Vorhanden."); + } + + + // MessageBox.Show(pageContent); + + myStreamReader.Close(); + responseStream.Close(); + + } + catch (WebException e) + { + //throw fehler + //MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK); + } + } + + private void GruppenHolen() + { + try + { + var endurl = _serverUrl + "/api/chat/groups"; + + WebRequest request = WebRequest.Create(endurl); + + request.Credentials = CredentialCache.DefaultCredentials; + request.Headers["Token"] = _authToken; + request.Headers["CustomerID"] = _kundennummer; + + // Get the response. + WebResponse response = request.GetResponse(); + + // Display the status. + var statusResponse = ((HttpWebResponse)response).StatusDescription; + + + string responseFromServer = ReadStream(response); + + //verarbeite hier zu json + if (!responseFromServer.Equals("")) + { + //################# Deserialisierung mit Json ############################### + var jsonDaten = JsonConvert.DeserializeObject(responseFromServer); + + _groupconect = jsonDaten; + // var serv = jsonDaten[_chatcode].ServerName; + + //MessageBox.Show(responseFromServer); + _gruppeholenverbindungsaufbauOK = true; + } + else + { + // MessageBox.Show("Keine Daten Vorhanden."); + } + + response.Close(); + } + catch (Exception e) + { + // MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK); + } + + } + + private string ReadStream(WebResponse response) + { + try + { + Stream dataStream = response.GetResponseStream(); + + StreamReader reader = new StreamReader(dataStream); + + string responseFromServer = reader.ReadToEnd(); + + + dataStream.Dispose(); + reader.Dispose(); + + dataStream.Close(); + reader.Close(); + + return responseFromServer; + } + catch (Exception e) + { + // MessageBox.Show(e.Message); + return null; + } + } + + } +} diff --git a/ChatController/LoginControl.xaml b/ChatController/LoginControl.xaml new file mode 100644 index 0000000..385d171 --- /dev/null +++ b/ChatController/LoginControl.xaml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ChatController/LoginControl.xaml.cs b/ChatController/LoginControl.xaml.cs new file mode 100644 index 0000000..f248a78 --- /dev/null +++ b/ChatController/LoginControl.xaml.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using ChatController.HauptKlassen; +using ChatController.Klassen; + +namespace ChatController +{ + /// + /// Interaktionslogik für Login.xaml + /// + public partial class LoginControl : UserControl + { + public delegate void LoginDelegate(ChatDatenUebergabe cdu); + + public event LoginDelegate OnLogin; + + private string _dateiPfad = "ChatAnmeldeDaten.txt"; + + public LoginControl() + { + InitializeComponent(); + LeseDateiFallsVorhanden(); + } + + private void AnmeldenButton_OnClick(object sender, RoutedEventArgs e) + { +#if DEBUG + Cursor = Cursors.Wait; + + + Login _login = new Login("4368658435", "ZMCKb-BckTt", "RuppelW", "ABXT32wgtruppeldiedup"); + + var x = _login.AnmeldevorgangDurchFuehren(); + + if (OnLogin != null) + { + if (Merken.IsChecked == true) + { + SpeichereDatenInDatei(); + } + else + { + LoescheGespeicherteDatei(); + } + + OnLogin(x); + } + + Cursor = Cursors.Arrow; +#else + if (!TextBoxKundennummer.Text.Equals("") && !TextBoxChatCode.Text.Equals("") && + !TextBoxBenutzerName.Text.Equals("") && !TextBoxPasswort.Password.Equals("")) + { + Cursor = Cursors.Wait; + + Login _login = new Login(TextBoxKundennummer.Text, TextBoxChatCode.Text, TextBoxBenutzerName.Text, TextBoxPasswort.Password); + + var x = _login.AnmeldevorgangDurchFuehren(); + + if (OnLogin != null && x != null) + { + if (Merken.IsChecked == true) + { + SpeichereDatenInDatei(); + } + else + { + LoescheGespeicherteDatei(); + } + + OnLogin(x); + } + else + { + MessageBox.Show("Die AnmeldeDaten sind Falsch!", "Info", MessageBoxButton.OK); + } + + Cursor = Cursors.Arrow; + } + else + { + MessageBox.Show("Bitte alle Felder ausfüllen!", "Info", MessageBoxButton.OK); + } +#endif + + } + + + #region Speichern / Laden / Löschen der Datei + + private void LeseDateiFallsVorhanden() + { + try + { + if (File.Exists(_dateiPfad)) { + List daten = new List(); + using (StreamReader sr = new StreamReader(_dateiPfad)) + { + string line = ""; + + while ((line = sr.ReadLine()) != null) + { + daten.Add(line); + } + } + + if(daten.Count == 5) { + TextBoxKundennummer.Text = daten[0]; + TextBoxChatCode.Text = daten[1]; + TextBoxBenutzerName.Text = daten[2]; + TextBoxPasswort.Password = daten[3]; + Merken.IsChecked = Convert.ToBoolean(daten[4]); + } + } + } + catch (Exception e) + { + + } + } + + private void SpeichereDatenInDatei() + { + try + { + // Write each directory name to a file. + using (StreamWriter sw = new StreamWriter(_dateiPfad)) + { + sw.WriteLine( TextBoxKundennummer.Text); + sw.WriteLine(TextBoxChatCode.Text); + sw.WriteLine(TextBoxBenutzerName.Text); + sw.WriteLine(TextBoxPasswort.Password); + sw.WriteLine(Merken.IsChecked.ToString()); + } + } + catch (Exception e) + { + MessageBox.Show(e.Message); + } + } + + private void LoescheGespeicherteDatei() + { + try + { + if (File.Exists(_dateiPfad)) + { + File.Delete(_dateiPfad); + } + } + catch (Exception e) + { + MessageBox.Show(e.Message); + } + } + + #endregion + + } + + +} diff --git a/ChatController/LoginKlassen/AuthentifizierungsDaten.cs b/ChatController/LoginKlassen/AuthentifizierungsDaten.cs new file mode 100644 index 0000000..3d3470d --- /dev/null +++ b/ChatController/LoginKlassen/AuthentifizierungsDaten.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ChatController.Klassen +{ + public class AuthentifizierungsDaten + { + public string CustomerId { get; set; } + public string ServerName { get; set; } + } +} diff --git a/ChatController/LoginKlassen/ChatDatenUebergabe.cs b/ChatController/LoginKlassen/ChatDatenUebergabe.cs new file mode 100644 index 0000000..66f897a --- /dev/null +++ b/ChatController/LoginKlassen/ChatDatenUebergabe.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ChatController.Klassen +{ + public class ChatDatenUebergabe + { + private AuthentifizierungsDaten _serverconect { get; set; } + private UserDaten _userconect { get; set; } + private ChatGruppenDaten _groupconect { get; set; } + + private string _serverUrl { get; set; } + private string _authToken { get; set; } + private long? _userid { get; set; } + private string _kundennummer { get; set; } + + public ChatDatenUebergabe(AuthentifizierungsDaten serverConect, UserDaten userConect, ChatGruppenDaten groupConect, string serverUrl, string authToken, long? userid, string kundennummer) + { + _serverconect = serverConect; + _userconect = userConect; + _groupconect = groupConect; + + _serverUrl = serverUrl; + _authToken = authToken; + _userid = userid; + _kundennummer = kundennummer; + } + + public AuthentifizierungsDaten Serverconect + { + get + { + return _serverconect; + } + private set + { + _serverconect = value; + } + } + + public UserDaten Userconect + { + get + { + return _userconect; + } + private set + { + _userconect = value; + } + } + + public ChatGruppenDaten Groupconect + { + get + { + return _groupconect; + } + private set + { + _groupconect = value; + } + } + + public string ServerUrl + { + get + { + return _serverUrl; + } + private set + { + _serverUrl = value; + } + } + + public string AuthToken + { + get + { + return _authToken; + } + private set + { + _authToken = value; + } + } + + public long? Userid + { + get + { + return _userid; + } + private set + { + _userid = value; + } + } + + public string Kundennummer + { + get + { + return _kundennummer; + } + private set + { + _kundennummer = value; + } + } + } +} diff --git a/ChatController/LoginKlassen/ChatGruppenDaten.cs b/ChatController/LoginKlassen/ChatGruppenDaten.cs new file mode 100644 index 0000000..22ee4ac --- /dev/null +++ b/ChatController/LoginKlassen/ChatGruppenDaten.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ChatController.Klassen +{ + public class ChatGruppenDaten + { + public Dictionary Response { get; set; } + public string Message { get; set; } + public string Errors { get; set; } + public bool Success { get; set; } + } + + + public class GroupInput + { + public long Oid { get; set; } + public string Name { get; set; } + public string Avatar { get; set; } + public string Mobile { get; set; } + public GroupLastMessage LastMessage { get; set; } + public GroupUsers[] Users { get; set; } + } + + public class GroupLastMessage + { + public long Id { get; set; } + public string Text { get; set; } + public string File { get; set; } + public string OriginalFileName { get; set; } + public string SmallerImage { get; set; } + public LastMessageTimeStamp Timestamp { get; set; } + public long CreatedAt { get; set; } + public long UserId { get; set; } + public string UserName { get; set; } + public string UserPicture { get; set; } + public string GroupId { get; set; } + } + + public class GroupUsers + { + public long Oid { get; set; } + public string Firstname { get; set; } + public string Lastname { get; set; } + public string Mobile { get; set; } + public string Picture { get; set; } + public bool IsEmployee { get; set; } + } + + public class LastMessageTimeStamp + { + public string Date { get; set; } + public int TimezoneType { get; set; } + public string Timezone { get; set; } + } +} diff --git a/ChatController/LoginKlassen/UserDaten.cs b/ChatController/LoginKlassen/UserDaten.cs new file mode 100644 index 0000000..36dcac7 --- /dev/null +++ b/ChatController/LoginKlassen/UserDaten.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ChatController.Klassen +{ + public class UserDaten + { + public Dictionary Response { get; set; } + public string Message { get; set; } + public string Errors { get; set; } + public bool Success { get; set; } + } + + public class InputTest + { + public TestInput User { get; set; } + } + + public class TestInput + { + public long? Oid { get; set; } + public string UserId { get; set; } + public string Firstname { get; set; } + public string Lastname { get; set; } + public string Mobile { get; set; } + public string Picture { get; set; } + public bool Is_Employee { get; set; } + public string Token { get; set; } + + } +} diff --git a/ChatController/LoginKlassen/UserMessages.cs b/ChatController/LoginKlassen/UserMessages.cs new file mode 100644 index 0000000..f45787d --- /dev/null +++ b/ChatController/LoginKlassen/UserMessages.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ChatController.Klassen +{ + class UserMessages + { + public UserMessageInput Response { get; set; } + public string Message { get; set; } + public string Errors { get; set; } + public bool Success { get; set; } + } + + public class UserMessageInput + { + public string currentPage { get; set; } + public bool HasMorePages { get; set; } + public string NextPage { get; set; } + public int PerPage { get; set; } + public string PreviousPage { get; set; } + public Messages[] Messages { get; set; } + } + + public class Messages + { + public long Id { get; set; } + public string Text { get; set; } + public string File { get; set; } + public string Original_Filename { get; set; } + public string Smaller_Images { get; set; } + public LastMessageTimeStamp Timestamp { get; set; } + public long CreatetdAt { get; set; } + public long UserId { get; set; } + public string User_Name { get; set; } + public string UserPicture { get; set; } + public long GroupId { get; set; } + } +} diff --git a/ChatController/Properties/AssemblyInfo.cs b/ChatController/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..96c7324 --- /dev/null +++ b/ChatController/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("ChatController")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ChatController")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("8a83c4dc-a0b1-4a51-ae1d-366d7a05b298")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// indem Sie "*" wie unten gezeigt eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ChatController/Ressourcen/BeyondsoftChat.jpg b/ChatController/Ressourcen/BeyondsoftChat.jpg new file mode 100644 index 0000000..b6b0064 Binary files /dev/null and b/ChatController/Ressourcen/BeyondsoftChat.jpg differ diff --git a/ChatController/Ressourcen/ClipboardDisabled.png b/ChatController/Ressourcen/ClipboardDisabled.png new file mode 100644 index 0000000..9cbc0e4 Binary files /dev/null and b/ChatController/Ressourcen/ClipboardDisabled.png differ diff --git a/ChatController/Ressourcen/glucklicher.png b/ChatController/Ressourcen/glucklicher.png new file mode 100644 index 0000000..5464d26 Binary files /dev/null and b/ChatController/Ressourcen/glucklicher.png differ diff --git a/ChatController/Ressourcen/mitarbeiter-avatar.png b/ChatController/Ressourcen/mitarbeiter-avatar.png new file mode 100644 index 0000000..34a3a8b Binary files /dev/null and b/ChatController/Ressourcen/mitarbeiter-avatar.png differ diff --git a/ChatController/Ressourcen/mitarbeiter-team-avatar.png b/ChatController/Ressourcen/mitarbeiter-team-avatar.png new file mode 100644 index 0000000..dac4e73 Binary files /dev/null and b/ChatController/Ressourcen/mitarbeiter-team-avatar.png differ diff --git a/ChatController/Ressourcen/paperclip.png b/ChatController/Ressourcen/paperclip.png new file mode 100644 index 0000000..9c42987 Binary files /dev/null and b/ChatController/Ressourcen/paperclip.png differ diff --git a/PrototypChat/.vs/PrototypChat/v15/.suo b/PrototypChat/.vs/PrototypChat/v15/.suo new file mode 100644 index 0000000..1b84b3d Binary files /dev/null and b/PrototypChat/.vs/PrototypChat/v15/.suo differ diff --git a/PrototypChat/App.config b/PrototypChat/App.config new file mode 100644 index 0000000..b50c74f --- /dev/null +++ b/PrototypChat/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/PrototypChat/App.xaml b/PrototypChat/App.xaml new file mode 100644 index 0000000..c971db7 --- /dev/null +++ b/PrototypChat/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/PrototypChat/App.xaml.cs b/PrototypChat/App.xaml.cs new file mode 100644 index 0000000..f667116 --- /dev/null +++ b/PrototypChat/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace PrototypChat +{ + /// + /// Interaktionslogik für "App.xaml" + /// + public partial class App : Application + { + } +} diff --git a/PrototypChat/ChatEmojisView.xaml b/PrototypChat/ChatEmojisView.xaml new file mode 100644 index 0000000..9c887c7 --- /dev/null +++ b/PrototypChat/ChatEmojisView.xaml @@ -0,0 +1,17 @@ + + + + + + + diff --git a/PrototypChat/ChatEmojisView.xaml.cs b/PrototypChat/ChatEmojisView.xaml.cs new file mode 100644 index 0000000..d06ddc3 --- /dev/null +++ b/PrototypChat/ChatEmojisView.xaml.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; +using System.Windows.Threading; +using ChatController; +using ChatController.HauptKlassen; + +namespace PrototypChat +{ + /// + /// Interaktionslogik für ChatEmojisView.xaml + /// + public partial class ChatEmojisView + { + + private ChatEmoji _emojii; + + public ChatEmojisView(ChatMainControl chatMainControler) + { + InitializeComponent(); + + + cem.InitChatView(chatMainControler); + + } + + + private void ChatEmojisView_OnFocusableChanged(object sender, EventArgs e) + { + + if (ChatEmojiView.Visibility == Visibility.Visible) + { + ChatEmojiView.Visibility = Visibility.Collapsed; + } + } + + } +} diff --git a/PrototypChat/LoginMaske.xaml b/PrototypChat/LoginMaske.xaml new file mode 100644 index 0000000..7671b23 --- /dev/null +++ b/PrototypChat/LoginMaske.xaml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/PrototypChat/LoginMaske.xaml.cs b/PrototypChat/LoginMaske.xaml.cs new file mode 100644 index 0000000..0a85b04 --- /dev/null +++ b/PrototypChat/LoginMaske.xaml.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using System.Web; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; +using ChatController.HauptKlassen; +using ChatController.Klassen; +using Newtonsoft.Json; + +namespace PrototypChat +{ + /// + /// Interaktionslogik für LoginMaske.xaml + /// + public partial class LoginMaske : Window + { + + public LoginMaske() + { + InitializeComponent(); + } + + + private void LoginControl_OnOnLogin(ChatDatenUebergabe cdu) + { + MainWindow window = new MainWindow(cdu); + window.Show(); + Close(); + } + + } +} diff --git a/PrototypChat/MainWindow.xaml b/PrototypChat/MainWindow.xaml new file mode 100644 index 0000000..edf7825 --- /dev/null +++ b/PrototypChat/MainWindow.xaml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/PrototypChat/MainWindow.xaml.cs b/PrototypChat/MainWindow.xaml.cs new file mode 100644 index 0000000..c919a55 --- /dev/null +++ b/PrototypChat/MainWindow.xaml.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.Web; +using System.Web.UI.WebControls; +using System.Windows.Forms; +using System.Windows.Forms.VisualStyles; +using ChatController; +using ChatController.ChatKlassen; +using ChatController.HauptKlassen; +using ChatController.Klassen; + +using Brush = System.Windows.Media.Brush; +using Button = System.Windows.Forms.Button; +using ContextMenu = System.Windows.Controls.ContextMenu; +using Image = System.Windows.Controls.Image; +using KeyEventArgs = System.Windows.Input.KeyEventArgs; +using MenuItem = System.Windows.Controls.MenuItem; +using MessageBox = System.Windows.MessageBox; +using Path = System.IO.Path; +using Point = System.Windows.Point; + + +namespace PrototypChat +{ + /// + /// Interaktionslogik für MainWindow.xaml + /// + public partial class MainWindow : Window + { + private readonly Chat _chat; + private AktuellerKontakt _aktuellerKontakt; + + private bool isChatBoxOnFocus = false; + + private ChatEmojisView _emojiView; + + private IOrderedEnumerable _Orderedmessagelist; + private IOrderedEnumerable _kontaktlist; + + private readonly List _messagelist = new List(); + private Thread _sendt; + private Thread _erhaltent; + + public MainWindow(ChatDatenUebergabe x) + { + InitializeComponent(); + + + ChatMainControl.InitMitChatdaten(x); + //ChatMainControl.AddContextMenu("In Dokumentation übernehmen", ChatMainControl_OnClickContextMenuItem); + } + + private void ChatMainControl_OnOnEmojii(System.Windows.Controls.Button emojiButton) + { + if (_emojiView == null) { + _emojiView = new ChatEmojisView(ChatMainControl); + + var x = emojiButton.PointToScreen(new Point(0, 0)); + PresentationSource source = PresentationSource.FromVisual(emojiButton); + + _emojiView.Top = (x.Y / source.CompositionTarget.TransformToDevice.M22) - _emojiView.Height - 5; + _emojiView.Left = x.X / source.CompositionTarget.TransformToDevice.M11; + + + _emojiView.Show(); + } + else + { + if (_emojiView.Visibility == Visibility.Visible) + { + _emojiView.Visibility = Visibility.Collapsed; + } + else + { + _emojiView.Visibility = Visibility.Visible; + + var x = emojiButton.PointToScreen(new Point(0, 0)); + PresentationSource source = PresentationSource.FromVisual(emojiButton); + + _emojiView.Top = (x.Y / source.CompositionTarget.TransformToDevice.M22) - _emojiView.Height - 5; + _emojiView.Left = x.X / source.CompositionTarget.TransformToDevice.M11; + } + } + } + + //private void ChatMainControl_OnClickContextMenuItem(String menuItem) + //{ + + //} + } + +} diff --git a/PrototypChat/Properties/AssemblyInfo.cs b/PrototypChat/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5dd98ef --- /dev/null +++ b/PrototypChat/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("PrototypChat")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("PrototypChat")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +//Um mit dem Erstellen lokalisierbarer Anwendungen zu beginnen, legen Sie +//ImCodeVerwendeteKultur in der .csproj-Datei +//in einer fest. Wenn Sie in den Quelldateien beispielsweise Deutsch +//(Deutschland) verwenden, legen Sie auf \"de-DE\" fest. Heben Sie dann die Auskommentierung +//des nachstehenden NeutralResourceLanguage-Attributs auf. Aktualisieren Sie "en-US" in der nachstehenden Zeile, +//sodass es mit der UICulture-Einstellung in der Projektdatei übereinstimmt. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher + //(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird, + // oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.) + ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs + //(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird, + // designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.) +)] + + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// übernehmen, indem Sie "*" eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/PrototypChat/Properties/Resources.Designer.cs b/PrototypChat/Properties/Resources.Designer.cs new file mode 100644 index 0000000..8c94273 --- /dev/null +++ b/PrototypChat/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion: 4.0.30319.42000 +// +// Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn +// der Code neu generiert wird. +// +//------------------------------------------------------------------------------ + +namespace PrototypChat.Properties +{ + + + /// + /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// + // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse + // über ein Tool wie ResGen oder Visual Studio automatisch generiert. + // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PrototypChat.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + /// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/PrototypChat/Properties/Resources.resx b/PrototypChat/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/PrototypChat/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/PrototypChat/Properties/Settings.Designer.cs b/PrototypChat/Properties/Settings.Designer.cs new file mode 100644 index 0000000..63b530a --- /dev/null +++ b/PrototypChat/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace PrototypChat.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/PrototypChat/Properties/Settings.settings b/PrototypChat/Properties/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/PrototypChat/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/PrototypChat/PrototypChat.csproj b/PrototypChat/PrototypChat.csproj new file mode 100644 index 0000000..a6db554 --- /dev/null +++ b/PrototypChat/PrototypChat.csproj @@ -0,0 +1,123 @@ + + + + + Debug + AnyCPU + {A9A69B34-2CEE-411F-8CD3-507DC6A5B77E} + WinExe + PrototypChat + PrototypChat + v4.6.2 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\..\..\..\Desktop\Newtonsoft.Json.dll + + + + + + + + + + + + + + 4.0 + + + + + + + + MSBuild:Compile + Designer + + + ChatEmojisView.xaml + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + LoginMaske.xaml + + + MainWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + {8a83c4dc-a0b1-4a51-ae1d-366d7a05b298} + ChatController + + + + \ No newline at end of file diff --git a/PrototypChat/PrototypChat.sln b/PrototypChat/PrototypChat.sln new file mode 100644 index 0000000..57aef61 --- /dev/null +++ b/PrototypChat/PrototypChat.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26228.9 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PrototypChat", "PrototypChat.csproj", "{A9A69B34-2CEE-411F-8CD3-507DC6A5B77E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChatController", "..\ChatController\ChatController.csproj", "{8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A9A69B34-2CEE-411F-8CD3-507DC6A5B77E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9A69B34-2CEE-411F-8CD3-507DC6A5B77E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9A69B34-2CEE-411F-8CD3-507DC6A5B77E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9A69B34-2CEE-411F-8CD3-507DC6A5B77E}.Release|Any CPU.Build.0 = Release|Any CPU + {8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal