Files
Chat/ChatController/ChatMainControl.xaml.cs

1037 lines
33 KiB
C#
Raw Normal View History

2017-09-12 14:32:34 +02:00
using System;
using System.Collections.Generic;
2017-09-14 12:36:48 +02:00
using System.Diagnostics;
using System.IO;
2017-09-12 14:32:34 +02:00
using System.Linq;
2017-09-14 12:36:48 +02:00
using System.Net;
2017-09-12 14:32:34 +02:00
using System.Text;
using System.Text.RegularExpressions;
2017-09-12 14:32:34 +02:00
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;
2017-10-06 12:08:05 +02:00
using System.Windows.Media.TextFormatting;
2017-09-12 14:32:34 +02:00
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using BeWo.View;
2017-09-12 14:32:34 +02:00
using ChatController.ChatKlassen;
using ChatController.HauptKlassen;
using ChatController.Klassen;
2017-09-14 12:36:48 +02:00
using Path = System.IO.Path;
2017-09-12 14:32:34 +02:00
namespace ChatController
{
/// <summary>
/// Interaktionslogik für ChatMainWindow.xaml
/// </summary>
public partial class ChatMainControl : UserControl
{
2017-11-09 12:20:03 +01:00
#region Vokabeln
2017-09-12 14:32:34 +02:00
private Chat _chat;
private AktuellerKontakt _aktuellerKontakt;
private bool isChatBoxOnFocus = false;
private ChatEmojiiControl _emojiView;
private IOrderedEnumerable<KontaktMessageBuilder> _Orderedmessagelist;
private IOrderedEnumerable<KontaktlistBuilder> _kontaktlist;
2017-11-09 12:20:03 +01:00
2017-09-12 14:32:34 +02:00
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<String, Action<string>> menuItemName2Callback = new Dictionary<string, Action<string>>();
2017-09-14 12:36:48 +02:00
2017-10-06 12:08:05 +02:00
public delegate void CloseDelegate();
public event CloseDelegate OnClose;
2017-10-18 10:09:20 +02:00
private bool _isDesktopVersion = true;
2017-10-06 12:08:05 +02:00
#endregion
2017-09-12 14:32:34 +02:00
public ChatMainControl()
{
2017-10-18 14:32:00 +02:00
InitializeComponent();
2017-09-12 14:32:34 +02:00
}
public void InitMitChatdaten(ChatDatenUebergabe cdu)
{
_chatDaten = cdu;
_chat = new Chat(cdu);
_kontaktlist = _chat.GroupklassenInChatKontakteUmwandler();
Clientlist.ItemsSource = _kontaktlist;
2017-09-14 12:36:48 +02:00
2017-09-12 14:32:34 +02:00
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(Clientlist.ItemsSource);
2017-09-14 12:36:48 +02:00
view.Filter = UserFilter;
2017-09-12 14:32:34 +02:00
HorcheAlleGruppenNachrichten();
2017-10-18 14:32:00 +02:00
LeseMessageInfoAusDatei();
2017-11-07 11:56:29 +01:00
Clientlist.Items.Refresh();
2017-09-12 14:32:34 +02:00
}
2017-09-12 14:32:34 +02:00
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<KontaktMessageBuilder> GetSelectedMessages()
{
List<KontaktMessageBuilder> itemListe = new List<KontaktMessageBuilder>();
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;
}
}
2017-10-24 11:39:59 +02:00
#region Style setter für ownChatDesktop Version
2017-10-06 12:08:05 +02:00
public void SetzteStyleAufNull()
{
EmojiButton.Style = null;
MediaButton.Style = null;
ReloadGruppen.Visibility = Visibility.Visible;
2017-10-18 10:09:20 +02:00
_isDesktopVersion = false;
2017-10-06 12:08:05 +02:00
}
2017-10-20 14:41:03 +02:00
#endregion
2017-11-16 15:38:30 +01:00
2017-09-12 14:32:34 +02:00
#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)
{
2017-11-10 11:41:09 +01:00
// StartWaiting();
2017-09-12 14:32:34 +02:00
Cursor = Cursors.Wait;
2017-11-10 11:41:09 +01:00
scrollPrueferAktivieren = false;
2017-09-12 14:32:34 +02:00
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;
2017-11-10 11:41:09 +01:00
var x = _chat.LadeChatNachrichtenVomKontakt(aktuellerKontakt);
2017-09-12 14:32:34 +02:00
Chat.ItemsSource = x;
Chat.Items.MoveCurrentToLast();
Chat.ScrollIntoView(Chat.Items.CurrentItem);
2017-11-10 11:41:09 +01:00
2017-09-12 14:32:34 +02:00
Chat.ContextMenu = _chat.ErstelleKontextMenue();
SetContextHandler();
scrollPrueferAktivieren = true;
2017-11-10 11:41:09 +01:00
2017-09-12 14:32:34 +02:00
HorcheAktivNachNachrichten();
Cursor = Cursors.Arrow;
2017-11-10 11:41:09 +01:00
// EndWaiting();
2017-09-12 14:32:34 +02:00
}
}
#endregion
2017-09-12 14:32:34 +02:00
#region Context Menue
2017-09-14 12:36:48 +02:00
//ab Hier Kontext Menü
2017-09-12 14:32:34 +02:00
private void SetContextHandler()
{
var contextItems = Chat.ContextMenu.Items;
2017-09-12 14:32:34 +02:00
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; // umbenenen in Speichern unter
2017-09-12 14:32:34 +02:00
var item3 = (MenuItem)contextItems[1];
item3.Click += Item3OnClick; //Umbenenen in Einfügen
// neu und vor Einfügen setzen und anpassen
var item4 = (MenuItem) contextItems[2];
item4.Click += Item4OnClick; //Umbenenen in Kopieren
2017-09-12 14:32:34 +02:00
}
public delegate void ContextDelegate();
public event ContextDelegate CreateNewContextItems;
2017-09-14 12:36:48 +02:00
private void Item2OnClick(object sender, RoutedEventArgs routedEventArgs)
2017-09-12 14:32:34 +02:00
{
2017-09-14 12:36:48 +02:00
foreach (var items in Chat.SelectedItems)
{
var item = (KontaktMessageBuilder)items;
2017-09-12 14:32:34 +02:00
2017-09-14 12:36:48 +02:00
_chat.SpeichernUnterFunkion(item);
}
}
2017-09-12 14:32:34 +02:00
2017-09-14 12:36:48 +02:00
private void Item3OnClick(object sender, RoutedEventArgs routedEventArgs)
{
var kontakt = (AktuellerKontakt)AktChatUser.Items[0];
2017-10-20 14:41:03 +02:00
_chat.Einfuegen(kontakt.GroupId,this);
}
private void Item4OnClick(object sender, RoutedEventArgs routedEventArgs)
{
string chatmessages = "";
foreach (var items in Chat.SelectedItems)
{
var item = (KontaktMessageBuilder)items;
chatmessages += item.UserMessage + "\n";
}
if(!chatmessages.Equals(""))
_chat.Kopieren(chatmessages, 1);
2017-09-14 12:36:48 +02:00
}
2017-09-14 12:36:48 +02:00
private void Chat_OnContextMenuOpening(object sender, ContextMenuEventArgs e)
{
var chatItems = Chat.SelectedItems;
if (chatItems.Count > 0)
{
foreach (var items in chatItems)
{
var item = items as KontaktMessageBuilder;
if (item != null && item.ImageSources != null)
{
var contextItems = Chat.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem)contextItems[0];
ContextItemSpeichernUnter.Visibility = Visibility.Visible;
}
else
{
var contextItems = Chat.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem)contextItems[0];
ContextItemSpeichernUnter.Visibility = Visibility.Collapsed;
}
if (item.ImageSources == null && item.Dokpfad == null)
{
var contextItems = Chat.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem) contextItems[2];
ContextItemSpeichernUnter.Visibility = Visibility.Visible;
}
else
{
var contextItems = Chat.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem)contextItems[2];
ContextItemSpeichernUnter.Visibility = Visibility.Collapsed;
}
2017-09-14 12:36:48 +02:00
}
}
else
{
//Schalte speichern unter Aus
var contextItems = Chat.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem)contextItems[0];
ContextItemSpeichernUnter.Visibility = Visibility.Collapsed;
}
2017-09-12 14:32:34 +02:00
2017-09-14 12:36:48 +02:00
//prüfe ob was in dem Speicher vorhanden ist //Einfügen
var d = System.Windows.Forms.Clipboard.GetDataObject();
if (d.GetDataPresent(DataFormats.FileDrop))
2017-09-14 12:36:48 +02:00
{
var contextItems = Chat.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem)contextItems[1];
ContextItemSpeichernUnter.Visibility = Visibility.Visible;
}
else if (d.GetDataPresent(DataFormats.Text))
{
var contextItems = Chat.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem)contextItems[1];
ContextItemSpeichernUnter.Visibility = Visibility.Visible;
}
else if (d.GetDataPresent(DataFormats.Bitmap))
{
var contextItems = Chat.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem)contextItems[1];
ContextItemSpeichernUnter.Visibility = Visibility.Visible;
}
else
{
var contextItems = Chat.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem)contextItems[1];
ContextItemSpeichernUnter.Visibility = Visibility.Collapsed;
}
2017-09-12 14:32:34 +02:00
//prüfe ob dokumentation erlaubt
2017-09-14 12:36:48 +02:00
var kontakt = (AktuellerKontakt)AktChatUser.Items[0];
if (kontakt.CustomerPersonOid == null && Chat.ContextMenu.Items.Count > 3)
2017-09-12 14:32:34 +02:00
{
2017-09-14 12:36:48 +02:00
var contextItems = Chat.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem)contextItems[3];
2017-09-14 12:36:48 +02:00
ContextItemSpeichernUnter.Visibility = Visibility.Collapsed;
}
else if (Chat.ContextMenu.Items.Count > 3)
{
var contextItems = Chat.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem)contextItems[3];
ContextItemSpeichernUnter.Visibility = Visibility.Visible;
}
2017-09-12 14:32:34 +02:00
2017-09-14 12:36:48 +02:00
if (Chat.ContextMenu.Items.Count == 0)
{
Chat.ContextMenu.Visibility = Visibility.Collapsed;
2017-09-12 14:32:34 +02:00
}
2017-09-14 12:36:48 +02:00
2017-09-12 14:32:34 +02:00
}
2017-09-14 12:36:48 +02:00
public void AddContextMenu(string menuItemText, Action<string> callBackAction)
2017-09-12 14:32:34 +02:00
{
2017-09-14 12:36:48 +02:00
if (!menuItemName2Callback.ContainsKey(menuItemText))
{
menuItemName2Callback.Add(menuItemText, callBackAction);
}
2017-09-12 14:32:34 +02:00
}
#endregion
#region Sende Media Nachrichten
private void MediaButton_OnClick(object sender, RoutedEventArgs e)
{
2017-09-14 12:36:48 +02:00
if (AktChatUser.Items.Count > 0)
{
var kontakt = (AktuellerKontakt) AktChatUser.Items[0];
2017-10-20 14:41:03 +02:00
var medium = _chat.HoleMedium();
2017-09-12 14:32:34 +02:00
2017-10-20 14:41:03 +02:00
if(medium != null) {
_chat.AddeMediumDerNachrichtView(medium);
2017-09-12 14:32:34 +02:00
2017-10-20 14:41:03 +02:00
CollectionViewSource.GetDefaultView(Chat.ItemsSource).Refresh();
Chat.Items.MoveCurrentToLast();
Chat.ScrollIntoView(Chat.Items.CurrentItem);
_chat.SendeMediumAnKontakt(kontakt,medium);
}
2017-09-14 12:36:48 +02:00
}
else
{
MessageBox.Show("Bitte einen Kontakt auswählen!","Fehler",MessageBoxButton.OK);
}
2017-09-12 14:32:34 +02:00
}
#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];
2017-10-20 14:41:03 +02:00
_chat.AddeNachrichtDerView(Chatbox.Text);
CollectionViewSource.GetDefaultView(Chat.ItemsSource).Refresh();
2017-09-12 14:32:34 +02:00
Chat.Items.MoveCurrentToLast();
Chat.ScrollIntoView(Chat.Items.CurrentItem);
2017-10-20 14:41:03 +02:00
_chat.SendMessage(Chatbox.Text, kontakt.GroupId);
2017-10-24 11:39:59 +02:00
2017-10-20 14:41:03 +02:00
Chatbox.Text = "";
2017-09-12 14:32:34 +02:00
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];
2017-10-20 14:41:03 +02:00
_chat.AddeNachrichtDerView(Chatbox.Text);
2017-09-12 14:32:34 +02:00
2017-10-20 14:41:03 +02:00
CollectionViewSource.GetDefaultView(Chat.ItemsSource).Refresh();
Chat.Items.MoveCurrentToLast();
Chat.ScrollIntoView(Chat.Items.CurrentItem);
2017-09-12 14:32:34 +02:00
_chat.SendMessage(Chatbox.Text, kontakt.GroupId);
2017-10-24 11:39:59 +02:00
2017-11-09 12:20:03 +01:00
2017-09-12 14:32:34 +02:00
Chatbox.Text = "";
2017-10-20 14:41:03 +02:00
2017-09-12 14:32:34 +02:00
}
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);
}
}
2017-10-24 11:39:59 +02:00
2017-09-12 14:32:34 +02:00
#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
#region Nachladen weiterer Chat Nachrichten
private void Chat_OnScrollChanged(object sender, ScrollChangedEventArgs e)
{
List<ScrollBar> scrollBarList = GetVisualChildCollection<ScrollBar>(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<double> routedPropertyChangedEventArgs)
{
if (scrollPrueferAktivieren == true)
{
var x = (ScrollBar) sender;
if (x.Value > 0)
{
//nix
}
else
{
Cursor = Cursors.Wait;
//StartWaiting();
2017-09-12 14:32:34 +02:00
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);
//EndWaiting();
Cursor = Cursors.Arrow;
2017-09-12 14:32:34 +02:00
}
}
}
private void HorizontalScrollbarChanged(object sender, RoutedPropertyChangedEventArgs<double> routedPropertyChangedEventArgs)
{
//nix
}
#region Get Scollbar von listbox
private static List<T> GetVisualChildCollection<T>(object parent) where T : Visual
{
List<T> visualCollection = new List<T>();
GetVisualChildCollection(parent as DependencyObject, visualCollection);
return visualCollection;
}
private static void GetVisualChildCollection<T>(DependencyObject parent, List<T> 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) {
2017-10-20 14:41:03 +02:00
2017-09-12 14:32:34 +02:00
var x = _chat.LadeChatNachrichtenVomKontakt(kontakt);
2017-10-20 14:41:03 +02:00
CollectionViewSource.GetDefaultView(Chat.ItemsSource).Refresh();
2017-09-12 14:32:34 +02:00
Chat.Items.MoveCurrentToLast();
Chat.ScrollIntoView(Chat.Items.CurrentItem);
}
});
_schaueNachMs = false;
}
if (threadBool == false)
{
break;
}
2017-10-20 14:41:03 +02:00
//Task.Delay(2000);
Thread.Sleep(2000);
2017-09-12 14:32:34 +02:00
}
}
#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)
2017-10-24 11:39:59 +02:00
{
var x = _chat.SchaueNachAllenMessageCounts();
2017-09-12 14:32:34 +02:00
2017-10-24 11:39:59 +02:00
if (x > 0)
2017-09-12 14:32:34 +02:00
{
this.Dispatcher.BeginInvoke(
DispatcherPriority.Background,
(Action)delegate
{
var alist = _chat.NeueGroupklassenKontakte();
2017-10-24 11:39:59 +02:00
AktuellerKontakt aktuellerKontakt = null;
2017-09-12 14:32:34 +02:00
2017-10-24 11:39:59 +02:00
if (AktChatUser.HasItems)
2017-09-12 14:32:34 +02:00
{
2017-10-24 11:39:59 +02:00
aktuellerKontakt = (AktuellerKontakt) AktChatUser.Items[0];
}
foreach (var liste in _kontaktlist)
2017-09-12 14:32:34 +02:00
{
2017-10-24 11:39:59 +02:00
foreach (var neu in alist)
2017-09-12 14:32:34 +02:00
{
2017-10-24 11:39:59 +02:00
if (liste.GroupId == neu.GroupId)
{
if (!liste.ReceiveMs.Equals(neu.ReceiveMs)) {
2017-09-15 11:23:03 +02:00
2017-10-24 11:39:59 +02:00
liste.ReceiveMs = neu.ReceiveMs;
liste.TimeStamp = neu.TimeStamp;
2017-09-12 14:32:34 +02:00
2017-10-24 11:39:59 +02:00
if (aktuellerKontakt != null && neu.GroupId == aktuellerKontakt.GroupId)
{
liste.SetzeGelesen = 0;
}
else
{
liste.SetzeGelesen = 1;
}
2017-09-12 14:32:34 +02:00
}
}
}
}
2017-10-24 11:39:59 +02:00
2017-09-12 14:32:34 +02:00
2017-10-24 11:39:59 +02:00
Clientlist.Items.Refresh();
2017-09-12 14:32:34 +02:00
});
2017-10-24 11:39:59 +02:00
2017-09-12 14:32:34 +02:00
}
if (AlleNachrichtenThreadBool == false)
{
break;
2017-10-24 11:39:59 +02:00
}
2017-09-12 14:32:34 +02:00
2017-10-24 11:39:59 +02:00
Thread.Sleep(5000);
2017-09-12 14:32:34 +02:00
}
}
#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
2017-09-14 12:36:48 +02:00
#region Zeige Erhaltene Daten per doppelclick An In Dem Fall Bilder Zurzeit
2017-09-14 12:36:48 +02:00
private void Chat_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
2017-10-20 07:34:26 +02:00
Cursor = Cursors.Wait;
StartWaiting();
2017-09-14 12:36:48 +02:00
var chatItems = Chat.SelectedItems;
2017-10-20 07:34:26 +02:00
if (chatItems.Count > 0)
{
2017-09-14 12:36:48 +02:00
foreach (var items in chatItems)
{
var item = items as KontaktMessageBuilder;
if (item != null && item.ImageSources != null)
2017-11-06 07:16:43 +01:00
{
_chat.ShowPicture(item);
2017-09-14 12:36:48 +02:00
}
2017-11-06 07:16:43 +01:00
else if(item != null && item.Dokpfad != null)
{
var filename = Path.GetFileName(item.Dokpfad.ToString());
LoadDokument(item.Dokpfad.ToString(), filename);
}
2017-09-14 12:36:48 +02:00
}
2017-11-06 07:16:43 +01:00
EndWaiting();
Cursor = Cursors.Arrow;
2017-09-14 12:36:48 +02:00
}
2017-10-20 07:34:26 +02:00
else
{
EndWaiting();
Cursor = Cursors.Arrow;
2017-11-06 07:16:43 +01:00
}
2017-09-14 12:36:48 +02:00
}
#endregion
#region Lade Dokument Herunter und Zeige es an
private void OpenDokument_OnClick(object sender, RoutedEventArgs e)
2017-11-06 07:16:43 +01:00
{
OpenDocument(sender);
}
private void OpenDocument(object sender)
2017-09-14 12:36:48 +02:00
{
2017-09-15 11:23:03 +02:00
Cursor = Cursors.Wait;
2017-11-06 07:16:43 +01:00
2017-09-14 12:36:48 +02:00
var btn = sender as System.Windows.Controls.Button;
if (btn.Tag != null)
{
var link = btn.Tag;
var filename = Path.GetFileName(link.ToString());
2017-11-06 07:16:43 +01:00
LoadDokument(link.ToString(), filename);
2017-09-14 12:36:48 +02:00
}
2017-09-15 11:23:03 +02:00
Cursor = Cursors.Arrow;
2017-09-14 12:36:48 +02:00
}
private void LoadDokument(string link, String filename)
{
string path = @"c:\temp\" + filename;
if (!File.Exists(path))
{
using (WebClient webClient = new WebClient())
{
webClient.DownloadFile(link, path);
}
if (File.Exists(path))
{
Process.Start(path);
}
}
else
{
Process.Start(path);
}
}
#endregion
#region Wait Layer
private ChatControlWaitLayer _waitLayer = null;
public void StartWaiting()
{
Dispatcher.BeginInvoke(DispatcherPriority.Background, (Action)StartWaitingImmediately);
}
public void StartWaitingImmediately()
{
if (_waitLayer == null)
{
_waitLayer = new ChatControlWaitLayer();
//Grid.SetColumnSpan(_waitLayer, 3);
Grid.SetRowSpan(_waitLayer, 3);
GridRechts.Children.Add(_waitLayer);
Panel.SetZIndex(_waitLayer, int.MaxValue);
_waitLayer.RefreshChatUI();
}
}
public void EndWaiting()
{
Dispatcher.BeginInvoke(
DispatcherPriority.Background,
(Action)delegate
{
if (_waitLayer != null)
{
GridRechts.Children.Remove(_waitLayer);
_waitLayer = null;
}
});
}
#endregion
#region link request
private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
Process.Start(e.Uri.ToString());
}
#endregion
2017-10-06 12:08:05 +02:00
#region ReloadGruppen (For Stand Alone version)
private void ButtonReloadGruppen_OnClick(object sender, RoutedEventArgs e)
2017-10-24 11:39:59 +02:00
{
2017-10-06 12:08:05 +02:00
DoSynchro();
}
private void DoSynchro()
{
try
{
Cursor = Cursors.Wait;
2017-10-24 11:39:59 +02:00
SpeichereMessageInfoInDatei();
2017-10-20 07:34:26 +02:00
var aktuelleGruppen = _chat.GruppenAktuallisieren();
2017-10-18 10:09:20 +02:00
2017-10-20 07:34:26 +02:00
var x = _chat.GroupklassenAktuallisieren(aktuelleGruppen);
2017-10-18 10:09:20 +02:00
2017-10-24 11:39:59 +02:00
_kontaktlist = x;
2017-10-20 07:34:26 +02:00
LeseMessageInfoAusDatei();
2017-10-24 11:39:59 +02:00
Clientlist.Items.Refresh();
2017-10-20 07:34:26 +02:00
Cursor = Cursors.Arrow;
2017-10-06 12:08:05 +02:00
}
catch (Exception e)
{
MessageBox.Show("Ein Fehler bei der Synchronisation ist aufgetreten.\nFehler:\n" + e.Message, "Fehler", MessageBoxButton.OK);
}
}
2017-11-16 15:38:30 +01:00
#endregion
#region Neue Für Bewoplaner | Nicht integriert
private void DoSynchroForBewoplaner()
{
try
{
while (true) {
UebergebeMessageInfoDatenFuerDb();
var aktuelleGruppen = _chat.GruppenAktuallisieren();
var x = _chat.GroupklassenAktuallisieren(aktuelleGruppen);
_kontaktlist = x;
LeseMessageInfoAusDatei();
Clientlist.Items.Refresh();
Thread.Sleep(5000);
}
}
catch (Exception e)
{
MessageBox.Show("Es is ein Fehler bei der Kontakt Aktualisierung aufgetreten.\nFehler:\n" + e.Message, "Fehler", MessageBoxButton.OK);
}
}
2017-10-06 12:08:05 +02:00
#endregion
2017-11-09 12:20:03 +01:00
#region speichern sowie lesen der MessageSyncDatei / stylezwecke (OwnChat only)
2017-10-18 14:32:00 +02:00
public void SpeichereMessageInfoInDatei()
{
List<KontaktlistBuilder> aa = new List<KontaktlistBuilder>();
foreach (var kontakt in _kontaktlist)
{
if(kontakt.SetzeGelesen == 0 && !kontakt.ReceiveMs.Equals("")) {
aa.Add(kontakt);
}
}
if(aa.Count>0)
_chat.SpeichereTimeStampsInDatei(aa);
}
public void LeseMessageInfoAusDatei()
{
List<KontaktlistBuilder> aa = new List<KontaktlistBuilder>();
foreach (var kontakt in _kontaktlist)
{
aa.Add(kontakt);
}
var liste = _chat.PruefeTimeStampsBeiStart(aa);
if(liste != null) {
foreach (var kon in _kontaktlist)
{
foreach (var item in liste)
{
if (kon.GroupId == item.Key)
{
kon.SetzeGelesen = 0;
}
}
}
2017-11-09 12:20:03 +01:00
}
}
#endregion
2017-11-16 15:38:30 +01:00
2017-11-09 12:20:03 +01:00
#region Speichern Und LEsen Der MesageSyncDatei (Bewoplaner only)
public List<KontaktlistBuilder> UebergebeMessageInfoDatenFuerDb()
{
List < KontaktlistBuilder > aa = new List<KontaktlistBuilder>();
2017-11-07 11:56:29 +01:00
2017-11-09 12:20:03 +01:00
Clientlist.Items.Refresh();
2017-11-07 11:56:29 +01:00
2017-11-09 12:20:03 +01:00
foreach (var item in Clientlist.Items)
{
var kontakt = item as KontaktlistBuilder;
if (kontakt != null && kontakt.SetzeGelesen == 0 && !kontakt.ReceiveMs.Equals(""))
{
aa.Add(kontakt);
}
}
return aa;
2017-10-18 14:32:00 +02:00
}
2017-11-09 12:20:03 +01:00
public void ErhalteMessageInfoVonDb(Dictionary<long,DateTime> liste)
{
if (liste != null)
{
foreach (var kon in _kontaktlist)
{
foreach (var item in liste)
{
if (kon.GroupId == item.Key)
{
kon.SetzeGelesen = 0;
}
}
}
}
}
2017-10-18 14:32:00 +02:00
#endregion
2017-09-12 14:32:34 +02:00
}
}