neue klassen
This commit is contained in:
643
ChatController/ChatMainControl.xaml.cs
Normal file
643
ChatController/ChatMainControl.xaml.cs
Normal file
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaktionslogik für ChatMainWindow.xaml
|
||||
/// </summary>
|
||||
public partial class ChatMainControl : UserControl
|
||||
{
|
||||
|
||||
|
||||
private Chat _chat;
|
||||
private AktuellerKontakt _aktuellerKontakt;
|
||||
|
||||
private bool isChatBoxOnFocus = false;
|
||||
|
||||
private ChatEmojiiControl _emojiView;
|
||||
|
||||
private IOrderedEnumerable<KontaktMessageBuilder> _Orderedmessagelist;
|
||||
private IOrderedEnumerable<KontaktlistBuilder> _kontaktlist;
|
||||
|
||||
private readonly List<KontaktMessageBuilder> _messagelist = new List<KontaktMessageBuilder>();
|
||||
|
||||
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>>();
|
||||
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<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;
|
||||
}
|
||||
}
|
||||
|
||||
#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<string> callBackAction)
|
||||
{
|
||||
if (!menuItemName2Callback.ContainsKey(menuItemText))
|
||||
{
|
||||
menuItemName2Callback.Add(menuItemText, callBackAction);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#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
|
||||
{
|
||||
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<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) {
|
||||
|
||||
//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
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user