diff --git a/ChatController/ChatMainControl.xaml b/ChatController/ChatMainControl.xaml index 28588e6..14d7613 100644 --- a/ChatController/ChatMainControl.xaml +++ b/ChatController/ChatMainControl.xaml @@ -13,7 +13,7 @@ - + @@ -271,7 +271,7 @@ - + diff --git a/ChatController/ChatMainControl.xaml.cs b/ChatController/ChatMainControl.xaml.cs index a9a8d70..8bca996 100644 --- a/ChatController/ChatMainControl.xaml.cs +++ b/ChatController/ChatMainControl.xaml.cs @@ -131,6 +131,7 @@ namespace ChatController } } + #region Style setter 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 @@ -149,7 +152,7 @@ namespace ChatController { doSync = _chat.DoSynchronisation(_chatDaten.ApiKey, _chatDaten.Kundennummer); - if (true || doSync) + if (doSync) { var aktuelleGruppen = _chat.GruppenAktuallisieren(); @@ -161,13 +164,10 @@ namespace ChatController DispatcherPriority.Normal, (Action) delegate { + //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,19 +447,19 @@ 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.Items.MoveCurrentToLast(); + Chat.ScrollIntoView(Chat.Items.CurrentItem); _chat.SendMessage(Chatbox.Text, kontakt.GroupId); - + //UebergebeNachrichtAnKontaktList(Chatbox.Text); Chatbox.Text = ""; - - //Lade Nachrichten nach - - Chat.Items.MoveCurrentToLast(); - Chat.ScrollIntoView(Chat.Items.CurrentItem); - + if (Chatbox.Text.Equals("")) { Chatbox.Text = "Nachricht schreiben"; @@ -485,7 +491,6 @@ namespace ChatController } } } - } private void Chatbox_OnGotFocus(object sender, RoutedEventArgs e) @@ -511,16 +516,19 @@ 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); + //UebergebeNachrichtAnKontaktList(Chatbox.Text); + Chatbox.Text = ""; - - - //lade Nachrichten nach - + } else { @@ -540,6 +548,37 @@ namespace ChatController MessageBox.Show("Beim Senden einer Nachricht ist ein Fehler aufgetreten. " + ed.Message + "\n" + ed.StackTrace, "Fehler", MessageBoxButton.OK); } } + + private void UebergebeNachrichtAnKontaktList(string nachricht) + { + try + { + var aktuellerKontakt = (AktuellerKontakt)AktChatUser.Items[0]; + + foreach (var liste in _kontaktlist) + { + if (liste.GroupId == aktuellerKontakt.GroupId) + { + liste.ReceiveMs = nachricht; + + //var clientZone = TimeZoneInfo.Local; + + var x = DateTime.Now; + + //var timeformated = TimeZoneInfo.ConvertTimeToUtc(x); + + liste.TimeStamp = x; + + liste.SetzeGelesen = 0; + } + } + CollectionViewSource.GetDefaultView(Clientlist.Items).Refresh(); + } + catch (Exception e) + { + //einfach ignorieren + } + } #endregion #region Add Emoji To ChatBox @@ -684,43 +723,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); - } }); @@ -733,8 +743,8 @@ namespace ChatController break; } - Task.Delay(2000); - //Thread.Sleep(2000); + //Task.Delay(2000); + Thread.Sleep(2000); } } @@ -752,15 +762,10 @@ namespace ChatController private void DoWorkAlleNachrichten() { while (true) - { - var x = _chat.SchaueNachAllenMessageCounts(); + { + var x = _chat.SchaueNachAllenMessageCounts(); - if (AlleNachrichtenCount == null) - { - AlleNachrichtenCount = x; - } - - if (x > AlleNachrichtenCount) + if (x > 0) { this.Dispatcher.BeginInvoke( DispatcherPriority.Background, @@ -768,45 +773,50 @@ namespace ChatController { var alist = _chat.NeueGroupklassenKontakte(); - var aktuellerKontakt =(AktuellerKontakt)AktChatUser.Items[0]; + AktuellerKontakt aktuellerKontakt = null; + + if (AktChatUser.HasItems) + { + aktuellerKontakt = (AktuellerKontakt) AktChatUser.Items[0]; + } foreach (var liste in _kontaktlist) - { - foreach (var neu in alist) { - if (liste.GroupId == neu.GroupId) + foreach (var neu in alist) { - if (!liste.ReceiveMs.Equals(neu.ReceiveMs)) { + if (liste.GroupId == neu.GroupId) + { + if (!liste.ReceiveMs.Equals(neu.ReceiveMs)) { - liste.ReceiveMs = neu.ReceiveMs; + liste.ReceiveMs = neu.ReceiveMs; + liste.TimeStamp = neu.TimeStamp; - if (neu.GroupId == aktuellerKontakt.GroupId) - { - liste.SetzeGelesen = 0; - } - else - { - liste.SetzeGelesen = 1; + if (aktuellerKontakt != null && neu.GroupId == aktuellerKontakt.GroupId) + { + liste.SetzeGelesen = 0; + } + else + { + liste.SetzeGelesen = 1; + } } } } } - } + - Clientlist.Items.Refresh(); + Clientlist.Items.Refresh(); + }); - - AlleNachrichtenCount = x; + } if (AlleNachrichtenThreadBool == false) { break; - } - - Task.Delay(5000); + } - //Thread.Sleep(5000); + Thread.Sleep(5000); } } @@ -833,21 +843,32 @@ namespace ChatController private void Chat_OnMouseDoubleClick(object sender, MouseButtonEventArgs e) { + Cursor = Cursors.Wait; + StartWaiting(); var chatItems = Chat.SelectedItems; - if (chatItems.Count > 0) { + if (chatItems.Count > 0) + { foreach (var items in chatItems) { var item = items as KontaktMessageBuilder; if (item != null && item.ImageSources != null) { - + _chat.ShowPicture(item); - + EndWaiting(); + Cursor = Cursors.Arrow; + } } } + else + { + EndWaiting(); + Cursor = Cursors.Arrow; + } + } #endregion @@ -941,10 +962,7 @@ namespace ChatController #region ReloadGruppen (For Stand Alone version) private void ButtonReloadGruppen_OnClick(object sender, RoutedEventArgs e) - { - //Thread newThread = new Thread(DoSynchro); - //newThread.IsBackground = true; - //newThread.Start(); + { DoSynchro(); } @@ -954,45 +972,19 @@ namespace ChatController { Cursor = Cursors.Wait; - //StartWaiting(); - //if (_isDesktopVersion) - //{ - // var doSync = _chat.DoSynchronisation(_chatDaten.ApiKey, _chatDaten.Kundennummer); + SpeichereMessageInfoInDatei(); - // if (doSync) - // { - var aktuelleGruppen = _chat.GruppenAktuallisieren(); + var aktuelleGruppen = _chat.GruppenAktuallisieren(); - var x = _chat.GroupklassenAktuallisieren(aktuelleGruppen); + var x = _chat.GroupklassenAktuallisieren(aktuelleGruppen); - _kontaktlist = x; - - Clientlist.Items.Refresh(); - - Cursor = Cursors.Arrow; - //} - //else - //{ - // Cursor = Cursors.Arrow; - // // EndWaiting(); - // if (OnClose != null) - // { - // OnClose(); - // } - //} - //} - //else - //{ - // var aktuelleGruppen = _chat.GruppenAktuallisieren(); - - // var x = _chat.GroupklassenAktuallisieren(aktuelleGruppen); - - // _kontaktlist = x; - - // Clientlist.Items.Refresh(); - - // Cursor = Cursors.Arrow; - //} + _kontaktlist = x; + + LeseMessageInfoAusDatei(); + + Clientlist.Items.Refresh(); + + Cursor = Cursors.Arrow; } catch (Exception e) { @@ -1001,7 +993,7 @@ namespace ChatController } #endregion - + #region speichern sowie lesen der MessageSyncDatei / stylezwecke public void SpeichereMessageInfoInDatei() { diff --git a/ChatController/HauptKlassen/Chat.cs b/ChatController/HauptKlassen/Chat.cs index 0de0aca..1596640 100644 --- a/ChatController/HauptKlassen/Chat.cs +++ b/ChatController/HauptKlassen/Chat.cs @@ -1,34 +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; @@ -50,6 +43,7 @@ namespace ChatController.HauptKlassen public static readonly List ImageExtensions = new List { ".JPG", ".JPE", ".BMP", ".GIF", ".PNG", ".JPEG" }; public static readonly List DokumentExtension = new List { ".TXT", ".PPT", ".XLS", ".DOC" }; + private long lastTimeStamp=0; public Chat(ChatDatenUebergabe chatDaten) { @@ -59,42 +53,55 @@ namespace ChatController.HauptKlassen #region Gruppen In Kontaktliste Wandler public IOrderedEnumerable GroupklassenInChatKontakteUmwandler() { - foreach (var kontakt in ChatDaten.Groupconect.Response) + foreach (var kontakt in ChatDaten.Groupconect.Response) + { + foreach (var value in kontakt.Value) { - foreach (var value in kontakt.Value) + string message = ""; + DateTime timestamp = new DateTime(); + + var lastMS = value.LastMessage; + + DateTime timeformated = new DateTime(); + + + if (lastMS != null) { - string message = ""; - DateTime timestamp = new DateTime(); - - var lastMS = value.LastMessage; - - - if (lastMS != null) + if (lastMS.Text != null) { - if (lastMS.Text != null) - { - message = lastMS.Text; - timestamp = DateTime.Parse(lastMS.Timestamp.Date); - } - } + message = lastMS.Text; - if (message.Equals("") && value.LastMessage != null && !value.LastMessage.File.Equals("")) + timestamp = DateTime.Parse(lastMS.Timestamp.Date); + + var clientZone = TimeZoneInfo.Local; + timeformated = TimeZoneInfo.ConvertTimeFromUtc(timestamp, clientZone); + } + } + + if (message.Equals("") && value.LastMessage != null && !value.LastMessage.File.Equals("")) + { + message = Path.GetFileName(value.LastMessage.File); + } + + //null steht für employee + Kontaktliste.Add(new KontaktlistBuilder(value.Name, AvatarToImageSourceConverter(value.Avatar), + message, timeformated, value.Oid, null)); + + if(lastMS != null && lastMS.Timestamp != null && lastMS.Timestamp.Date != null) { + TimeSpan span = (DateTime.Parse(lastMS.Timestamp.Date) - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)); + long unixTime = System.Convert.ToInt64(span.TotalSeconds); + + if (lastTimeStamp < unixTime) { - message = Path.GetFileName(value.LastMessage.File); + lastTimeStamp = unixTime; } - - //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); - var sortedKontaktliste = Kontaktliste.OrderByDescending(r => r.TimeStamp); - - return sortedKontaktliste; - - + return sortedKontaktliste; //Search Bereich //CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(Clientlist.ItemsSource); //view.SortDescriptions.Add(new SortDescription("TimeStamp", ListSortDirection.Descending)); @@ -526,11 +533,13 @@ namespace ChatController.HauptKlassen { TimeSpan lastTs = DateTime.UtcNow.TimeOfDay; - double timespan = lastTs.TotalSeconds; + TimeSpan span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)); + long timespan = System.Convert.ToInt64(span.TotalSeconds); + //long timespan = //lastTs.TotalSeconds; if (_userMessages != null && _userMessages.Response.Messages.Length > 0) { - timespan = _userMessages.Response.Messages.First().CreatetdAt; + timespan = _userMessages.Response.Messages.First().Created_At; } if (kontakt != null) @@ -558,7 +567,7 @@ namespace ChatController.HauptKlassen } } - private double? SendeTimestamp(long groupId,double lastStamp) + private double? SendeTimestamp(long groupId,long lastStamp) { try { @@ -596,22 +605,20 @@ namespace ChatController.HauptKlassen #region Prüfe für alle ob neue Nachrichten vorhanden sind public double SchaueNachAllenMessageCounts() - { - TimeSpan lastTs = DateTime.UtcNow.TimeOfDay; + { + TimeSpan span = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)); + long unixTime = System.Convert.ToInt64(span.TotalSeconds); - double timespan = lastTs.TotalSeconds; - - var x = SendeTimestampForEach(0, timespan); - - + var x = SendeTimestampForEach(0, unixTime); + return x; } - private double SendeTimestampForEach(long groupId, double lastStamp) + private double SendeTimestampForEach(long groupId, long lastStamp) { try { - var endurl = ChatDaten.ServerUrl + "/api/ownchat/news/" + groupId + "/" + lastStamp; + var endurl = ChatDaten.ServerUrl + "/api/ownchat/news/" + groupId + "/" + lastTimeStamp; //lastStamp WebRequest request = WebRequest.Create(endurl); @@ -652,6 +659,7 @@ namespace ChatController.HauptKlassen { string message = ""; DateTime timestamp = new DateTime(); + DateTime timeformated = new DateTime(); var lastMS = value.LastMessage; @@ -661,6 +669,9 @@ namespace ChatController.HauptKlassen { message = lastMS.Text; timestamp = DateTime.Parse(lastMS.Timestamp.Date); + + var clientZone = TimeZoneInfo.Local; + timeformated = TimeZoneInfo.ConvertTimeFromUtc(timestamp, clientZone); } } @@ -671,7 +682,18 @@ namespace ChatController.HauptKlassen //null steht für employee Kontakt.Add(new KontaktlistBuilder(value.Name, AvatarToImageSourceConverter(value.Avatar), - message, timestamp, value.Oid, null)); + message, timeformated, value.Oid, null)); + + if (lastMS != null && lastMS.Timestamp != null && lastMS.Timestamp.Date != null) { + TimeSpan span = (DateTime.Parse(lastMS.Timestamp.Date) - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)); + long unixTime = System.Convert.ToInt64(span.TotalSeconds); + + if (lastTimeStamp < unixTime) + { + lastTimeStamp = unixTime; + } + } + } } @@ -731,6 +753,29 @@ namespace ChatController.HauptKlassen #endregion #region Sende Normale Message an Kontakt + + public void AddeNachrichtDerView(string nachricht) + { + try + { + string username = ""; + + foreach (var daten in ChatDaten.Userconect.Response) + { + username = daten.Value.Firstname + " " + daten.Value.Lastname; + } + + var time = DateTime.Now; + + Messages.Add(new KontaktMessageBuilder(username, nachricht, + time.ToString("dd MMMM yyyy HH:mm:ss"), true, time)); + + } + catch (Exception e) + { + MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK); + } + } private HttpWebRequest requesten; @@ -784,7 +829,7 @@ namespace ChatController.HauptKlassen #region Sende Media Nachricht an Kontakt - public void HoleUndSendeMediumAnKontakt(AktuellerKontakt kontakt) + public string HoleMedium() { try { @@ -796,11 +841,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) { @@ -818,9 +950,9 @@ namespace ChatController.HauptKlassen string filename = Path.GetFileName(file); + SendMediaMessage(filename, kontakt.GroupId, mdatei); - - //LoadKontakt(); + } private static byte[] ReadFully(Stream stream) @@ -996,7 +1128,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(); @@ -1015,9 +1147,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); } @@ -1032,7 +1171,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 @@ -1044,6 +1190,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 @@ -1105,7 +1258,6 @@ namespace ChatController.HauptKlassen #endregion - #endregion #region Zeige Kontakt Bild / hat noch probleme -> Show Kontakt @@ -1134,6 +1286,11 @@ namespace ChatController.HauptKlassen form.MaximumSize = new Size(500,500); form.FormBorderStyle = FormBorderStyle.Sizable; + form.MaximizeBox = false; + + form.Text = "ownChat Bild Voschau"; + form.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath); + PictureBox pb = new PictureBox(); pb.Dock = DockStyle.Fill; pb.Image = imgbit; @@ -1199,6 +1356,11 @@ namespace ChatController.HauptKlassen form.MaximumSize = new Size(500,500); form.FormBorderStyle = FormBorderStyle.Sizable; + form.MaximizeBox = false; + + form.Text = "ownChat Bild Voschau"; + form.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath); + PictureBox pb = new PictureBox(); pb.Dock = DockStyle.Fill; pb.Image = imgbit; @@ -1321,33 +1483,45 @@ namespace ChatController.HauptKlassen { try { + Kontaktliste.Clear(); foreach (var kontakt in chatDaten.Response) { + foreach (var value in kontakt.Value) { - string message = ""; - DateTime timestamp = new DateTime(); + //var val = Kontaktliste.Find(item => item.GroupId == value.Oid); - var lastMS = value.LastMessage; + //if (val == null) //was tun wenn der nicht merh drinne ist ?? dann ist das ja auch null + //{ + string message = ""; + DateTime timestamp = new DateTime(); + + var lastMS = value.LastMessage; - if (lastMS != null) - { - if (lastMS.Text != null) + if (lastMS != null) { - message = lastMS.Text; - timestamp = DateTime.Parse(lastMS.Timestamp.Date); + if (lastMS.Text != null) + { + message = lastMS.Text; + timestamp = DateTime.Parse(lastMS.Timestamp.Date); + } } - } - if (message.Equals("") && value.LastMessage != null && !value.LastMessage.File.Equals("")) - { - message = Path.GetFileName(value.LastMessage.File); - } + if (message.Equals("") && value.LastMessage != null && !value.LastMessage.File.Equals("")) + { + message = Path.GetFileName(value.LastMessage.File); + } - //null steht für employee - Kontaktliste.Add(new KontaktlistBuilder(value.Name, AvatarToImageSourceConverter(value.Avatar), - message, timestamp, value.Oid, null)); + //null steht für employee + Kontaktliste.Add(new KontaktlistBuilder(value.Name, + AvatarToImageSourceConverter(value.Avatar), + message, timestamp, value.Oid, null)); + //} + //else + //{ + // //Item Bereits vorhanden + //} } } @@ -1371,7 +1545,6 @@ namespace ChatController.HauptKlassen } #endregion - //unter konstruktion #region pruefe letzten Konversations timestamp für design element public Dictionary PruefeTimeStampsBeiStart(List kontaktliste) @@ -1440,8 +1613,6 @@ namespace ChatController.HauptKlassen { try { - //Hole alle aktuellen, schreibe ihre oid und den Timestamp der Aktuellen nachricht in eine Datei - if (!File.Exists(Path.Combine(GetAndCreateUserAppDataPath(), "ownChatMessageSync.txt"))) { using ( diff --git a/ChatController/HauptKlassen/Login.cs b/ChatController/HauptKlassen/Login.cs index 7c9cfab..40cf60c 100644 --- a/ChatController/HauptKlassen/Login.cs +++ b/ChatController/HauptKlassen/Login.cs @@ -64,9 +64,7 @@ namespace ChatController.HauptKlassen dic.Add("chatcode",_chatCode); VerbindeMitChatServer(dic); - - - // Gruppen abfragen + if (_ownchatVerbindungsaufbauOK) { GruppenHolen(); @@ -74,8 +72,7 @@ namespace ChatController.HauptKlassen if (_gruppeholenverbindungsaufbauOK) - { - + { ChatDatenUebergabe ubergabe = new ChatDatenUebergabe(_serverconect, _userconect, _groupconect, _serverUrl, _authToken, _userid, _kundennummer,_apikey); return ubergabe; @@ -102,7 +99,7 @@ namespace ChatController.HauptKlassen } catch (Exception e) { - MessageBox.Show("Es konnte keine Verbindung aufgebaut werden.", "Fehler", MessageBoxButton.OK); + MessageBox.Show("Fehler: Es konnte keine Verbindung aufgebaut werden.", "Fehler", MessageBoxButton.OK,MessageBoxImage.Error); return false; } @@ -117,12 +114,12 @@ namespace ChatController.HauptKlassen if (jsonDatentyp.Status == 1) { - MessageBox.Show("Kundennummer unbekannt"); + MessageBox.Show("Fehler: Kundennummer unbekannt.\nBitte überprüfen Sie die Anmeldeinformationen.","Info",MessageBoxButton.OK,MessageBoxImage.Asterisk); return false; } else if (jsonDatentyp.Status == 2) { - MessageBox.Show("Diensttyp ist für angegebene Kundennummer nicht definiert"); + MessageBox.Show("Der Diensttyp ist für die angegebene Kundennummer nicht definiert.","Info",MessageBoxButton.OK,MessageBoxImage.Asterisk); return false; } else @@ -138,12 +135,12 @@ namespace ChatController.HauptKlassen if (jsonDatentyp.Status == 1) { - MessageBox.Show("Kundennummer unbekannt"); + MessageBox.Show("Fehler: Kundennummer unbekannt.\nBitte überprüfen Sie die Anmeldeinformationen.","Info",MessageBoxButton.OK,MessageBoxImage.Asterisk); return false; } else if (jsonDatentyp.Status == 2) { - MessageBox.Show("Diensttyp ist für angegebene Kundennummer nicht definiert"); + MessageBox.Show("Der Diensttyp ist für die angegebene Kundennummer nicht definiert.","Info",MessageBoxButton.OK,MessageBoxImage.Asterisk); return false; } else @@ -153,8 +150,8 @@ namespace ChatController.HauptKlassen } catch (Exception e) { - MessageBox.Show("Beim Parsen der Datei ist ein fehler aufgetreten.", "Fehler", - MessageBoxButton.OK); + MessageBox.Show("Fehler: "+e.Message,"Fehler",MessageBoxButton.OK,MessageBoxImage.Error); + } } @@ -165,16 +162,17 @@ namespace ChatController.HauptKlassen } catch (Exception e) { - MessageBox.Show("Ein nicht weiter definierter fehler ist aufgetreten: "+ e.Message,"Fehler",MessageBoxButton.OK); + MessageBox.Show("Fehler: "+ e.Message,"Fehler",MessageBoxButton.OK,MessageBoxImage.Error); return false; } } private void VerbindeMitChatServer(Dictionary postparameter) { + string fehlermeldung = ""; try { - var endurl = _url + "/api/user/login"; //loginwithchatcode + var endurl = _url + "/api/user/loginwithchatcode"; string postdaten = ""; @@ -208,38 +206,36 @@ namespace ChatController.HauptKlassen string pageContent = myStreamReader.ReadToEnd(); - - //UserDaten müssen mehrere wege der initialisierung bieten 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) + if (jsonDaten.Success == true) { - _authToken = datev.Value.Token; - _userid = datev.Value.Oid; + foreach (var datev in jsonDaten.Response) + { + _authToken = datev.Value.Token; + _userid = datev.Value.Oid; + } + + _userconect = jsonDaten; + + _ownchatVerbindungsaufbauOK = true; + } + else + { + if (jsonDaten.Errors.chatcode_failed != null) + { + MessageBox.Show("Fehler: "+ jsonDaten.Errors.chatcode_failed[0] + "\nBitte überprüfen Sie die Anmeldeinformationen.", "Info", MessageBoxButton.OK, MessageBoxImage.Asterisk); + }else if (jsonDaten.Errors.login_failed != null) + { + MessageBox.Show("Fehler: "+ jsonDaten.Errors.login_failed[0] + "\nBitte überprüfen Sie die Anmeldeinformationen.", "Info", MessageBoxButton.OK, MessageBoxImage.Asterisk); + } + + _ownchatVerbindungsaufbauOK = false; } - - _userconect = jsonDaten; - - _ownchatVerbindungsaufbauOK = true; } - else - { - //throw fehler - // MessageBox.Show("Keine Daten Vorhanden."); - } - - - // MessageBox.Show(pageContent); - + myStreamReader.Close(); responseStream.Close(); @@ -247,7 +243,7 @@ namespace ChatController.HauptKlassen catch (Exception e) { //throw fehler - MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK); + MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK,MessageBoxImage.Error); } } @@ -262,38 +258,28 @@ namespace ChatController.HauptKlassen 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); + MessageBox.Show("Fehler: "+e.Message, "Fehler", MessageBoxButton.OK,MessageBoxImage.Error); } } diff --git a/ChatController/LoginControl.xaml b/ChatController/LoginControl.xaml index 28cef19..6ebbd06 100644 --- a/ChatController/LoginControl.xaml +++ b/ChatController/LoginControl.xaml @@ -50,7 +50,7 @@ - + diff --git a/ChatController/LoginControl.xaml.cs b/ChatController/LoginControl.xaml.cs index 8e98d82..cb3fc24 100644 --- a/ChatController/LoginControl.xaml.cs +++ b/ChatController/LoginControl.xaml.cs @@ -11,9 +11,9 @@ using System.Threading; 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.Forms; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; @@ -22,7 +22,11 @@ using System.Windows.Shapes; using ChatController.HauptKlassen; using ChatController.Klassen; using Newtonsoft.Json; +using Cursors = System.Windows.Input.Cursors; +using KeyEventArgs = System.Windows.Input.KeyEventArgs; +using MessageBox = System.Windows.MessageBox; using Path = System.IO.Path; +using UserControl = System.Windows.Controls.UserControl; namespace ChatController { @@ -35,10 +39,6 @@ namespace ChatController public event LoginDelegate OnLogin; - //private readonly string _dateiPfad = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "ownChatX1253781.txt"; //OwnChatX1253781 - - //private readonly string _merkeDaten = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "ownChatX1253782.txt"; //OwnChatX1253782 - private string _newUrl = "https://dict.ownchat.de/api/server/resolve/1/"; private string _benutzername = ""; private string _passwort = ""; @@ -59,13 +59,26 @@ namespace ChatController } private void AnmeldenButton_OnClick(object sender, RoutedEventArgs e) + { + Anmelden(); + } + + private void TextBoxPasswort_OnKeyUp(object sender, KeyEventArgs e) + { + if (e.Key == Key.Return) + { + Anmelden(); + } + } + + private void Anmelden() { try { //TODO Abfrage einführen die prüft ob eine verbindung ueberhaupt hergestellt werde kann | FehlerMeldungen Genauer Definieren 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); @@ -86,10 +99,11 @@ namespace ChatController OnLogin(x); } - else - { - MessageBox.Show("Fehler bei der Anmeldung. Bitte überprüfen Sie die Anmeldeinformationen.", "Info", MessageBoxButton.OK, MessageBoxImage.Asterisk); - } + //else + //{ + // Auskommentiert weil bereits abgefangen + // MessageBox.Show("Fehler bei der Anmeldung. Bitte überprüfen Sie die Anmeldeinformationen.", "Info", MessageBoxButton.OK, MessageBoxImage.Asterisk); + //} Cursor = Cursors.Arrow; } @@ -100,13 +114,10 @@ namespace ChatController } catch (Exception exception) { - //MessageBox.Show("Fehler bei der Anmeldung!\n\n" + exception.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Asterisk); - MessageBox.Show("Fehler bei der Anmeldung. Bitte überprüfen Sie die Anmeldeinformationen.", "Info", MessageBoxButton.OK, MessageBoxImage.Asterisk); - //throw; + MessageBox.Show("Fehler: " + exception.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); Cursor = Cursors.Arrow; } - } - + } #region Speichern / Laden / Löschen der Datei @@ -284,7 +295,7 @@ namespace ChatController } } - public static string GetAndCreateUserAppDataPath() + private static string GetAndCreateUserAppDataPath() { try { @@ -314,8 +325,7 @@ namespace ChatController } #endregion - - + //Neue Region zum VErschlüsseln und entschlüsseln der Daten #region Verschlüsseln/Entschlüsseln via Link // wird ersmal nicht mehr gebraucht @@ -460,6 +470,7 @@ namespace ChatController } } #endregion + } diff --git a/ChatController/LoginKlassen/UserDaten.cs b/ChatController/LoginKlassen/UserDaten.cs index 36dcac7..26c0193 100644 --- a/ChatController/LoginKlassen/UserDaten.cs +++ b/ChatController/LoginKlassen/UserDaten.cs @@ -10,7 +10,7 @@ namespace ChatController.Klassen { public Dictionary Response { get; set; } public string Message { get; set; } - public string Errors { get; set; } + public Tetserror Errors { get; set; } public bool Success { get; set; } } @@ -31,4 +31,10 @@ namespace ChatController.Klassen public string Token { get; set; } } + + public class Tetserror + { + public string[] chatcode_failed{ get; set; } + public string[] login_failed { get; set; } + } } diff --git a/ChatController/LoginKlassen/UserMessages.cs b/ChatController/LoginKlassen/UserMessages.cs index 15b8604..7620d69 100644 --- a/ChatController/LoginKlassen/UserMessages.cs +++ b/ChatController/LoginKlassen/UserMessages.cs @@ -32,7 +32,7 @@ namespace ChatController.Klassen public string Original_Filename { get; set; } public string Smaller_Image { get; set; } public LastMessageTimeStamp Timestamp { get; set; } - public long CreatetdAt { get; set; } + public long Created_At { get; set; } public long UserId { get; set; } public string User_Name { get; set; } public string UserPicture { get; set; } diff --git a/PrototypChat/MainWindow.xaml.cs b/PrototypChat/MainWindow.xaml.cs index 7fedb5a..de80f87 100644 --- a/PrototypChat/MainWindow.xaml.cs +++ b/PrototypChat/MainWindow.xaml.cs @@ -112,16 +112,18 @@ namespace ownChat private void MainWindow_OnClosed(object sender, EventArgs e) { - _emojiView = null; - ChatMainControl.SpeichereMessageInfoInDatei(); - // Environment.Exit(0); - LoginMaske newLogin = new LoginMaske(); - newLogin.Show(); + //_emojiView = null; + //ChatMainControl.SpeichereMessageInfoInDatei(); + //// Environment.Exit(0); + //LoginMaske newLogin = new LoginMaske(); + //newLogin.Show(); } private void ChatMainControl_OnOnClose() - { - this.Close(); + { + //this.Close(); + ChatMainControl.SpeichereMessageInfoInDatei(); + Environment.Exit(0); } }