diff --git a/ChatController/ChatMainControl.xaml.cs b/ChatController/ChatMainControl.xaml.cs index 15fbe60..20d6ccd 100644 --- a/ChatController/ChatMainControl.xaml.cs +++ b/ChatController/ChatMainControl.xaml.cs @@ -131,6 +131,7 @@ namespace ChatController } } + #region Styleetter für ownChatDesktop VErsion public void SetzteStyleAufNull() { EmojiButton.Style = null; @@ -138,7 +139,9 @@ namespace ChatController ReloadGruppen.Visibility = Visibility.Visible; _isDesktopVersion = false; } + #endregion + #region Synconisation Veranlassen für Bewoplaner public void SynchronisationVeranlassen() { try @@ -161,13 +164,10 @@ namespace ChatController DispatcherPriority.Normal, (Action) delegate { - Clientlist.Items.Refresh(); + CollectionViewSource.GetDefaultView(Clientlist.Items).Refresh(); + //Clientlist.Items.Refresh(); }); - //this.Dispatch(delegate // hä ?? - //{ - // Clientlist.Items.Refresh(); - //}); - + Thread.Sleep(TimeSpan.FromMinutes(5)); } @@ -184,6 +184,7 @@ namespace ChatController MessageBox.Show("Ein Fehler bei der Synchronisation ist aufgetreten.\nFehler:\n" + e.Message, "Fehler",MessageBoxButton.OK); } } + #endregion #region Lade KontaktDaten und Lade sie in den Chat private void AktChatUser_OnMouseDoubleClick(object sender, MouseButtonEventArgs e) @@ -286,7 +287,7 @@ namespace ChatController private void Item3OnClick(object sender, RoutedEventArgs routedEventArgs) { var kontakt = (AktuellerKontakt)AktChatUser.Items[0]; - _chat.Einfuegen(kontakt.GroupId); + _chat.Einfuegen(kontakt.GroupId,this); } private void Item4OnClick(object sender, RoutedEventArgs routedEventArgs) @@ -417,14 +418,19 @@ namespace ChatController if (AktChatUser.Items.Count > 0) { var kontakt = (AktuellerKontakt) AktChatUser.Items[0]; + + var medium = _chat.HoleMedium(); - _chat.HoleUndSendeMediumAnKontakt(kontakt); + if(medium != null) { + _chat.AddeMediumDerNachrichtView(medium); - Chat.ItemsSource = null; - Chat.ItemsSource = _chat.LadeChatNachrichtenVomKontakt(kontakt); - - Chat.Items.MoveCurrentToLast(); - Chat.ScrollIntoView(Chat.Items.CurrentItem); + CollectionViewSource.GetDefaultView(Chat.ItemsSource).Refresh(); + Chat.Items.MoveCurrentToLast(); + Chat.ScrollIntoView(Chat.Items.CurrentItem); + + _chat.SendeMediumAnKontakt(kontakt,medium); + + } } else { @@ -441,20 +447,18 @@ namespace ChatController if (!Chatbox.Text.Equals("")) { var kontakt = (AktuellerKontakt)AktChatUser.Items[0]; - - var text = Chatbox.Text; + + _chat.AddeNachrichtDerView(Chatbox.Text); + + CollectionViewSource.GetDefaultView(Chat.ItemsSource).Refresh(); - _chat.SendMessage(Chatbox.Text, kontakt.GroupId); - - // neu performance versuch Adde - - Chatbox.Text = ""; - - //Lade Nachrichten nach - Chat.Items.MoveCurrentToLast(); Chat.ScrollIntoView(Chat.Items.CurrentItem); - + + _chat.SendMessage(Chatbox.Text, kontakt.GroupId); + + Chatbox.Text = ""; + if (Chatbox.Text.Equals("")) { Chatbox.Text = "Nachricht schreiben"; @@ -512,16 +516,17 @@ namespace ChatController if (!AktChatUser.Items.IsEmpty && !Chatbox.Text.Equals("")) { var kontakt = (AktuellerKontakt)AktChatUser.Items[0]; - - var text = Chatbox.Text; + + _chat.AddeNachrichtDerView(Chatbox.Text); + CollectionViewSource.GetDefaultView(Chat.ItemsSource).Refresh(); + Chat.Items.MoveCurrentToLast(); + Chat.ScrollIntoView(Chat.Items.CurrentItem); + _chat.SendMessage(Chatbox.Text, kontakt.GroupId); - + Chatbox.Text = ""; - - - //lade Nachrichten nach - + } else { @@ -685,43 +690,14 @@ namespace ChatController (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; - + CollectionViewSource.GetDefaultView(Chat.ItemsSource).Refresh(); + Chat.Items.MoveCurrentToLast(); Chat.ScrollIntoView(Chat.Items.CurrentItem); - } }); @@ -734,8 +710,8 @@ namespace ChatController break; } - Task.Delay(2000); - //Thread.Sleep(2000); + //Task.Delay(2000); + Thread.Sleep(2000); } } @@ -986,6 +962,7 @@ namespace ChatController #endregion + //muss erweitert werden #region speichern sowie lesen der MessageSyncDatei / stylezwecke public void SpeichereMessageInfoInDatei() { diff --git a/ChatController/HauptKlassen/Chat.cs b/ChatController/HauptKlassen/Chat.cs index af60bb9..6f1dad1 100644 --- a/ChatController/HauptKlassen/Chat.cs +++ b/ChatController/HauptKlassen/Chat.cs @@ -1,35 +1,27 @@ -using System; +using ChatController.ChatKlassen; +using ChatController.Klassen; +using Newtonsoft.Json; +using System; using System.Collections.Generic; -using System.ComponentModel; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; -using System.Linq.Expressions; using System.Net; using System.Net.Http; using System.Reflection; 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 Application = System.Windows.Forms.Application; using Clipboard = System.Windows.Forms.Clipboard; using ContextMenu = System.Windows.Controls.ContextMenu; -using Cursor = System.Windows.Input.Cursor; using DataFormats = System.Windows.Forms.DataFormats; using Image = System.Windows.Controls.Image; -using MenuItem = System.Windows.Forms.MenuItem; using MessageBox = System.Windows.MessageBox; using Size = System.Drawing.Size; @@ -732,6 +724,22 @@ namespace ChatController.HauptKlassen #endregion #region Sende Normale Message an Kontakt + + public void AddeNachrichtDerView(string nachricht) + { + try + { + var ChatMessage = _userMessages.Response.Messages.Last(); + + var time =DateTime.Now; + + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, nachricht,time.ToString("dd MMMM yyyy HH:mm:ss"), true, time)); + } + catch (Exception e) + { + MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK); + } + } private HttpWebRequest requesten; @@ -785,7 +793,7 @@ namespace ChatController.HauptKlassen #region Sende Media Nachricht an Kontakt - public void HoleUndSendeMediumAnKontakt(AktuellerKontakt kontakt) + public string HoleMedium() { try { @@ -797,11 +805,98 @@ namespace ChatController.HauptKlassen // openFileDialog1.Filter = "Office Dokumente |*.doc;*.xls;*.ppt;*.txt"; DialogResult result = openFileDialog1.ShowDialog(); - + if (result == System.Windows.Forms.DialogResult.OK) { - VerarbeiteMedia(openFileDialog1.FileName,kontakt); + return openFileDialog1.FileName; } + else + { + return null; + } + } + catch (Exception e) + { + MessageBox.Show("Fehler: " + e.Message, "Fehler", MessageBoxButton.OK); + return null; + } + } + + public void AddeMediumDerNachrichtView(string file) + { + try + { + var ChatMessage = _userMessages.Response.Messages.Last(); + + var timeformated = DateTime.Now; + + if (ImageExtensions.Contains(Path.GetExtension(file).ToUpperInvariant())) + { + BitmapImage logo = new BitmapImage(); + logo.BeginInit(); + logo.UriSource = new Uri(file); + logo.EndInit(); + + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, Path.GetFileName(file), + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, logo, + timeformated, file)); + } + else if (DokumentExtension.Contains(Path.GetExtension(file).ToUpperInvariant())) + { + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, Path.GetFileName(file), + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true,file, + timeformated)); + } + else + { + //MP4 und gifs und so unbehandelten dreck + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, Path.GetFileName(file), + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, file, + timeformated)); + } + + } + catch (Exception e) + { + MessageBox.Show("Fehler: " + e.Message, "Fehler", MessageBoxButton.OK); + } + } + + public void AddMediumContextDerNachrichtView(byte[] datei,string filename) + { + var ChatMessage = _userMessages.Response.Messages.Last(); + + var timeformated = DateTime.Now; + + if (ImageExtensions.Contains(Path.GetExtension(filename).ToUpperInvariant())) + { + + BitmapImage biImg = new BitmapImage(); + MemoryStream ms = new MemoryStream(datei); + biImg.BeginInit(); + biImg.StreamSource = ms; + biImg.EndInit(); + + ImageSource logo = biImg; + + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, Path.GetFileName(filename), + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, logo, + timeformated, filename)); + } + else + { + + Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, Path.GetFileName(filename), + timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, filename, + timeformated)); + } + } + + public void SendeMediumAnKontakt(AktuellerKontakt kontakt,string file) + { + try + { + VerarbeiteMedia(file,kontakt); } catch (Exception e) { @@ -819,9 +914,9 @@ namespace ChatController.HauptKlassen string filename = Path.GetFileName(file); + SendMediaMessage(filename, kontakt.GroupId, mdatei); - - //LoadKontakt(); + } private static byte[] ReadFully(Stream stream) @@ -997,7 +1092,7 @@ namespace ChatController.HauptKlassen #endregion #region Fuege Daten Bilder usw via DragAndDrop in den Chat / muss noch bearbeitet werden - public void Einfuegen(long groupOid) + public void Einfuegen(long groupOid, ChatMainControl chatMainControl) { var d = System.Windows.Forms.Clipboard.GetDataObject(); @@ -1016,9 +1111,16 @@ namespace ChatController.HauptKlassen if (File.Exists(fileList[0])) { filename = Path.GetFileName(fileList[0]); - - //file = File.OpenRead(fileList[0]); + byte[] myBinary = File.ReadAllBytes(fileList[0]); + + AddMediumContextDerNachrichtView(myBinary,filename); + + CollectionViewSource.GetDefaultView(chatMainControl.Chat.ItemsSource).Refresh(); + + chatMainControl.Chat.Items.MoveCurrentToLast(); + chatMainControl.Chat.ScrollIntoView(chatMainControl.Chat.Items.CurrentItem); + SendMediaMessage(filename, groupOid, myBinary); } @@ -1033,7 +1135,14 @@ namespace ChatController.HauptKlassen if (d.GetDataPresent(DataFormats.Text)) { string text = (string)d.GetData(DataFormats.StringFormat); - + + AddeNachrichtDerView(text); + + CollectionViewSource.GetDefaultView(chatMainControl.Chat.ItemsSource).Refresh(); + + chatMainControl.Chat.Items.MoveCurrentToLast(); + chatMainControl.Chat.ScrollIntoView(chatMainControl.Chat.Items.CurrentItem); + SendMessage(text, groupOid); } else @@ -1045,6 +1154,13 @@ namespace ChatController.HauptKlassen System.Drawing.Image img = pic; + AddMediumContextDerNachrichtView(ImageToByteArray(img),bildname); + + CollectionViewSource.GetDefaultView(chatMainControl.Chat.ItemsSource).Refresh(); + + chatMainControl.Chat.Items.MoveCurrentToLast(); + chatMainControl.Chat.ScrollIntoView(chatMainControl.Chat.Items.CurrentItem); + SendMediaMessage(bildname,groupOid, ImageToByteArray(img)); } else @@ -1394,7 +1510,6 @@ namespace ChatController.HauptKlassen } #endregion - //unter konstruktion #region pruefe letzten Konversations timestamp für design element public Dictionary PruefeTimeStampsBeiStart(List kontaktliste) diff --git a/ChatController/HauptKlassen/Login.cs b/ChatController/HauptKlassen/Login.cs index 7c9cfab..7b1867d 100644 --- a/ChatController/HauptKlassen/Login.cs +++ b/ChatController/HauptKlassen/Login.cs @@ -174,7 +174,7 @@ namespace ChatController.HauptKlassen { try { - var endurl = _url + "/api/user/login"; //loginwithchatcode + var endurl = _url + "/api/user/loginwithchatcode"; string postdaten = "";