diff --git a/BeWoPlanerChat/bewoplaner-chat-android/build.gradle b/BeWoPlanerChat/bewoplaner-chat-android/build.gradle
index 39820de..ab37d20 100644
--- a/BeWoPlanerChat/bewoplaner-chat-android/build.gradle
+++ b/BeWoPlanerChat/bewoplaner-chat-android/build.gradle
@@ -6,7 +6,7 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.2.0'
+ classpath 'com.android.tools.build:gradle:3.3.2'
classpath 'io.realm:realm-gradle-plugin:5.3.0'
// NOTE: Do not place your application dependencies here; they belong
diff --git a/BeWoPlanerChat/bewoplaner-chat-android/gradle/wrapper/gradle-wrapper.properties b/BeWoPlanerChat/bewoplaner-chat-android/gradle/wrapper/gradle-wrapper.properties
index 2863f34..f922e7f 100644
--- a/BeWoPlanerChat/bewoplaner-chat-android/gradle/wrapper/gradle-wrapper.properties
+++ b/BeWoPlanerChat/bewoplaner-chat-android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Tue Sep 25 13:06:52 CEST 2018
+#Mon Apr 08 14:14:05 CEST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
diff --git a/ChatController/ChatController.csproj b/ChatController/ChatController.csproj
index 91cc4b1..6af1c1a 100644
--- a/ChatController/ChatController.csproj
+++ b/ChatController/ChatController.csproj
@@ -33,6 +33,9 @@
ownchat_favicon.ico
+
+
+
False
@@ -60,10 +63,10 @@
ChatEmojiiControl.xaml
-
+
ChatMainControl.xaml
@@ -74,12 +77,13 @@
LoginControl.xaml
-
+
+
ChatControlWaitLayer.xaml
@@ -90,6 +94,8 @@
Resource.resx
+
+
@@ -132,6 +138,8 @@
+
+
diff --git a/ChatController/ChatKlassen/ChatMessage.cs b/ChatController/ChatKlassen/ChatMessage.cs
index 0207a30..73edc01 100644
--- a/ChatController/ChatKlassen/ChatMessage.cs
+++ b/ChatController/ChatKlassen/ChatMessage.cs
@@ -9,7 +9,7 @@ namespace ChatController.ChatKlassen
public class ChatMessage
{
//Chat-Ansicht
- public ChatMessage(string username, string message, DateTime sendtime, bool isme)
+ public ChatMessage(string username, string message, DateTime sendtime, bool isme, long pGroupId)
{
Username = username;
UserMessage = message;
@@ -19,10 +19,12 @@ namespace ChatController.ChatKlassen
Farbgebung(isme);
VisibilityRegelung(IsHyperlink(message) ? "HyperlinkMessage" : "Message");
+
+ GroupId = pGroupId;
}
// Image-Ansicht
- public ChatMessage(string username, string message, DateTime sendtime, bool isme, ImageSource image, string originalImage, string imageName)
+ public ChatMessage(string username, string message, DateTime sendtime, bool isme, ImageSource image, string originalImage, string imageName, long pGroupId)
{
Username = username;
UserMessage = message;
@@ -35,64 +37,49 @@ namespace ChatController.ChatKlassen
Farbgebung(isme);
- VisibilityRegelung("Image");
- }
-
- //Image-PlaceHolder | wird nicht benutzt und wird nicht gebraucht ?
- public ChatMessage(string username, string message, DateTime sendtime, bool isme, string originalImage, string imageName)
- {
- Username = username;
- UserMessage = message;
- SendTime = sendtime;
- IsMyMessage = isme;
- OriginalImage = originalImage;
- OriginalImageName = imageName;
+ VisibilityRegelung("Image");
- Farbgebung(isme);
-
- VisibilityRegelung("Default_Image");
+ GroupId = pGroupId;
}
//Dokumenten-Ansicht
- public ChatMessage(string username, string message, DateTime sendtime, string pSmallerImagePath, bool isme, string url)
+ public ChatMessage(string pUsername, string pMessageText, DateTime pSendTime, string pSmallerImagePath, bool pIsLoggedInUsersMessage, string pUrl, long pGroupId)
{
- Username = username;
- UserMessage = message;
- SendTime = sendtime;
- IsMyMessage = isme;
+ Username = pUsername;
+ UserMessage = pMessageText;
+ SendTime = pSendTime;
+ IsMyMessage = pIsLoggedInUsersMessage;
- Dokpfad = url;
+ FilePath = pUrl;
- Farbgebung(isme);
+ Farbgebung(pIsLoggedInUsersMessage);
Thumbnail = Utilities.Utils.CreateImageSourceFromPath(pSmallerImagePath);
VisibilityRegelung("Dokumente");
+
+ GroupId = pGroupId;
}
public ImageSource Thumbnail { get; }
- #region Farbgebung
private void Farbgebung(bool isme)
{
if (isme)
{
ChatColor = new BrushConverter().ConvertFromString("#ff5e00") as SolidColorBrush;
Posi = "Right";
- _farbeRechtsColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush;
- _farbeLinksColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush;
}
else
{
ChatColor = new BrushConverter().ConvertFromString("#FFFFFF") as SolidColorBrush; //"#cccccc"
Posi = "Left";
- _farbeRechtsColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush;
- _farbeLinksColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush;
}
- }
- #endregion
- #region Visibility Regelung
+ _farbeRechtsColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush;
+ _farbeLinksColor = new BrushConverter().ConvertFromString("#505050") as SolidColorBrush;
+ }
+
private void VisibilityRegelung(string Ansicht)
{
switch (Ansicht)
@@ -141,9 +128,6 @@ namespace ChatController.ChatKlassen
break;
}
}
- #endregion
-
- #region Hyperlink Detection
private static readonly Regex UrlRegex = new Regex(@"(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~/|/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?");
@@ -186,10 +170,6 @@ namespace ChatController.ChatKlassen
return false;
}
- #endregion
-
- #region Variablen
-
public bool IsMyMessage { get; set; }
public string Username { get; }
public string UserMessage { get; }
@@ -210,7 +190,6 @@ namespace ChatController.ChatKlassen
public Visibility ChatVisibility { get; set; }
public Visibility HyperlinkVisibility { get; set; }
-
private Visibility _pictureVisibility;
public Visibility PictureVisibility
@@ -247,11 +226,10 @@ namespace ChatController.ChatKlassen
public Visibility DokumentVisibility { get; set; }
public ImageSource ImageSources { get; }
- public object Dokpfad { get; }
+ public object FilePath { get; }
public long? ChatMessageOid { get; private set; }
- //Farbe Links MEssageHeader
private Brush _farbeLinksColor;
public Brush FarbeLinksColor
{
@@ -264,7 +242,6 @@ namespace ChatController.ChatKlassen
}
}
- //Farbe Rechts MessageHeader
private Brush _farbeRechtsColor;
public Brush FarbeRechtsColor
{
@@ -277,6 +254,8 @@ namespace ChatController.ChatKlassen
}
}
+ public long GroupId { get; }
+
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
@@ -284,6 +263,5 @@ namespace ChatController.ChatKlassen
var handler = PropertyChanged;
handler?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
- #endregion
}
}
diff --git a/ChatController/ChatKlassen/Contact.cs b/ChatController/ChatKlassen/Contact.cs
index 0b46d0b..d28734f 100644
--- a/ChatController/ChatKlassen/Contact.cs
+++ b/ChatController/ChatKlassen/Contact.cs
@@ -29,6 +29,8 @@ namespace ChatController.ChatKlassen
}
}
+ public bool IsNewMessage { get; set; }
+
private Brush _color;
public Brush Color
{
@@ -41,25 +43,25 @@ namespace ChatController.ChatKlassen
}
}
- private int _NumberOfReadMessages;
- public int NumberOfReadMessages
+ private bool _HasUnreadMessages;
+ public bool HasUnreadMessages
{
- get => _NumberOfReadMessages;
+ get => _HasUnreadMessages;
set
{
- _NumberOfReadMessages = value;
+ _HasUnreadMessages = value;
- if (_NumberOfReadMessages == 1)
+ if (_HasUnreadMessages)
{
_color = new BrushConverter().ConvertFromString("#ff5e00") as SolidColorBrush;
}
- else
+ else
{
_color = new SolidColorBrush(Colors.Gray);
}
- OnPropertyChanged(nameof(NumberOfReadMessages));
+ OnPropertyChanged(nameof(HasUnreadMessages));
OnPropertyChanged(nameof(Color));
}
}
@@ -78,21 +80,21 @@ namespace ChatController.ChatKlassen
public ImageSource Image { get; }
public DateTime TimeStamp { get; set; }
- public long GroupId { get; set; }
- public long UserId { get; set; }
- public long? CustomerOid { get; set; }
+ public int GroupId { get; set; }
+ public int UserOid { get; set; }
+ public string UserIdManage { get; set; }
- public Contact(string pName, ImageSource pImage, string pLastMessageText, DateTime pTimeStamp, long pGroupId,long? pCustomerOid, bool pOnlyEmployees, int pUserCount)
+ public Contact(string pName, ImageSource pImage, string pLastMessageText, DateTime pTimeStamp, int pGroupId, string pUserIdManage, bool pOnlyEmployees, int pUserCount)
{
Name = pName;
ReceivedMessage = pLastMessageText;
Image = pImage;
TimeStamp = pTimeStamp;
GroupId = pGroupId;
- CustomerOid = pCustomerOid;
- NumberOfReadMessages = 1;
+ UserIdManage = pUserIdManage;
+ HasUnreadMessages = false;
- if (CustomerOid != null)
+ if (UserIdManage != null)
{
_ContactChatColor = new BrushConverter().ConvertFromString("#3B7799") as SolidColorBrush;
}
diff --git a/ChatController/ChatKlassen/AktuellerKontakt.cs b/ChatController/ChatKlassen/CurrentContact.cs
similarity index 76%
rename from ChatController/ChatKlassen/AktuellerKontakt.cs
rename to ChatController/ChatKlassen/CurrentContact.cs
index 9e169c7..e892f92 100644
--- a/ChatController/ChatKlassen/AktuellerKontakt.cs
+++ b/ChatController/ChatKlassen/CurrentContact.cs
@@ -3,7 +3,7 @@ using System.Windows.Media;
namespace ChatController.ChatKlassen
{
- public class AktuellerKontakt
+ public class CurrentContact
{
public Contact Contact { get; set; }
@@ -11,17 +11,17 @@ namespace ChatController.ChatKlassen
public ImageSource Image { get; }
public DateTime TimeStamp { get; set; }
public long GroupId { get; set; }
- public long? CustomerOid { get; set; }
+ public string UserIdManage { get; set; }
- public AktuellerKontakt(Contact pContact)
+ public CurrentContact(Contact pContact)
{
if(pContact != null) {
Contact = pContact;
Image = pContact.Image;
TimeStamp = pContact.TimeStamp;
Name = pContact.Name;
- CustomerOid = pContact.CustomerOid;
+ UserIdManage = pContact.UserIdManage;
GroupId = pContact.GroupId;
}
}
diff --git a/ChatController/ChatKlassen/MessageCounter.cs b/ChatController/ChatKlassen/MessageCounter.cs
index 6079360..f80e881 100644
--- a/ChatController/ChatKlassen/MessageCounter.cs
+++ b/ChatController/ChatKlassen/MessageCounter.cs
@@ -1,10 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ChatController.ChatKlassen
+namespace ChatController.ChatKlassen
{
public class MessageCounter
{
diff --git a/ChatController/ChatMainControl.xaml b/ChatController/ChatMainControl.xaml
index d949ead..e864040 100644
--- a/ChatController/ChatMainControl.xaml
+++ b/ChatController/ChatMainControl.xaml
@@ -35,7 +35,7 @@
Maximum="{TemplateBinding ScrollableHeight}"
ViewportSize="{TemplateBinding ViewportHeight}"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
- Grid.Column="1"/>
+ Grid.Row="0" Grid.Column="1"/>
-
@@ -82,39 +81,30 @@
-
-
-
-
-
-
-
-
+
+
-
-
-
@@ -122,11 +112,9 @@
-
-
@@ -141,12 +129,8 @@
-
-
@@ -159,9 +143,7 @@
-
-
@@ -170,8 +152,6 @@
-
-
@@ -190,19 +170,15 @@
-
-
-
-
+
-
@@ -210,18 +186,12 @@
-
-
-
-
-
-
@@ -232,8 +202,7 @@
-
-
+
@@ -257,12 +226,9 @@
-
-
-
-
- -->
-
-
-
-
-
-
-
-
+
@@ -386,27 +301,22 @@
-
-
-
-
-
-
+
-
diff --git a/ChatController/ChatMainControl.xaml.cs b/ChatController/ChatMainControl.xaml.cs
index e16c958..442e72a 100644
--- a/ChatController/ChatMainControl.xaml.cs
+++ b/ChatController/ChatMainControl.xaml.cs
@@ -4,6 +4,7 @@ using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
+using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
@@ -16,9 +17,9 @@ using System.Windows.Threading;
using ChatController.ChatKlassen;
using ChatController.HauptKlassen;
-using ChatController.Klassen;
using ChatController.LoginKlassen;
using ChatController.Utilities;
+using ChatController.Utilities.Extensions;
using Button = System.Windows.Controls.Button;
using Cursors = System.Windows.Input.Cursors;
using DataFormats = System.Windows.DataFormats;
@@ -29,43 +30,39 @@ using Orientation = System.Windows.Controls.Orientation;
using Panel = System.Windows.Controls.Panel;
using Path = System.IO.Path;
using ScrollBar = System.Windows.Controls.Primitives.ScrollBar;
+using Timer = System.Windows.Forms.Timer;
namespace ChatController
{
public partial class ChatMainControl
{
- #region Vokabeln
+ private readonly Dictionary _Group2NotifyIcons = new Dictionary();
+
+ private readonly Dictionary _GroupId2DateTime = new Dictionary();
+
+ public Window ContainingWindow { get; set; }
+
private Chat _Chat;
- private AktuellerKontakt _AktuellerKontakt;
+ private CurrentContact _CurrentContact;
private bool _IsChatBoxOnFocus;
- private ChatEmojiiControl _EmojiView;
-
- private IOrderedEnumerable _OrderedMessages;
private IOrderedEnumerable _ContactList;
private bool _ScrollPrueferAktivieren;
- private Thread _NewThread;
- public bool disableKontaktNachrichtenThread = true;
+ public bool _ShouldInterruptContactsThread = true;
- private Thread _AlleKontakteThread;
- public bool _AlleNachrichtenThreadBool = true;
private readonly List _CreatedTempFiles = new List();
- private Dictionary> _MenuItemName2Callback = new Dictionary>();
-
- public delegate void CloseDelegate();
-
- public event CloseDelegate OnClose;
+ private readonly Dictionary> _MenuItemName2Callback = new Dictionary>();
private bool _IsDesktopVersion = true;
- #endregion
public ChatMainControl()
{
InitializeComponent();
+
ReloadGruppen.Visibility = Visibility.Collapsed;
}
@@ -73,41 +70,85 @@ namespace ChatController
{
_Chat = new Chat(cdu);
- _ContactList = _Chat.GroupklassenInChatKontakteUmwandler();
+ _ContactList = _Chat.AddContacts();
Clientlist.ItemsSource = _ContactList;
-
- var view = (CollectionView) CollectionViewSource.GetDefaultView(Clientlist.ItemsSource);
- view.Filter = UserFilter;
- HorcheAlleGruppenNachrichten();
- LeseMessageInfoAusDatei();
+ ReadNewSyncFile();
+
+ foreach (var contact in _ContactList)
+ {
+ if (_GroupId2DateTime.ContainsKey(contact.GroupId))
+ {
+ var dateTimeFromFile = _GroupId2DateTime[contact.GroupId].TimeStamp;
+ var isUnread = _GroupId2DateTime[contact.GroupId].IsUnread;
+
+ var isYounger = contact.TimeStamp > dateTimeFromFile;
+
+ contact.IsNewMessage = isYounger || isUnread;
+ contact.HasUnreadMessages = contact.IsNewMessage;
+ }
+ }
+
+ var view = (CollectionView) CollectionViewSource.GetDefaultView(Clientlist.ItemsSource);
+ view.Filter = UserFilter;
+
+ _GlobalListeningThreadtimer?.Stop();
+ _GlobalListeningThreadtimer = null;
+ InitGlobalListeningThread();
Clientlist.Items.Refresh();
}
-
- public AktuellerKontakt GetCurrentContact()
+
+ public void ShowNotification(string pTitle, string pMessage, long pGroupId)
{
- var kontakt = (AktuellerKontakt) AktChatUserList?.Items[0];
-
- return kontakt?.CustomerOid == null ? null : kontakt;
- }
-
- public List GetSelectedMessages()
- {
- var itemListe = new List();
-
- foreach (var selectedItem in ChatListBox.SelectedItems)
+ if (!_Group2NotifyIcons.ContainsKey(pGroupId))
{
- var Item = selectedItem as ChatMessage;
+ var notificationIcon = Resource.ownchat_favicon;
- itemListe.Add(Item);
+ var contact = _ContactList.FirstOrDefault(a => a.GroupId == pGroupId);
+
+ if(contact != null)
+ {
+ notificationIcon = Utils.ImageSourceToIcon(contact.Image);
+ }
+
+ var notifyIcon = new NotifyIcon { Icon = notificationIcon, Visible = true };
+
+ notifyIcon.BalloonTipClicked += (sender, args) =>
+ {
+ DisposeAndRemoveNotification((NotifyIcon)sender, pGroupId);
+
+ SelectContact(_ContactList.FirstOrDefault(f => f.GroupId.Equals(pGroupId)));
+ };
+
+ notifyIcon.BalloonTipClosed += (sender, args) =>
+ {
+ DisposeAndRemoveNotification((NotifyIcon)sender, pGroupId);
+ };
+
+ _Group2NotifyIcons.Add(pGroupId, notifyIcon);
}
- return itemListe.Count > 0 ? itemListe : null;
+ _Group2NotifyIcons[pGroupId].ShowBalloonTip(Constants.NotificationTimeout, pTitle, pMessage, ToolTipIcon.None);
+ }
+
+ public void ClearNotifications()
+ {
+ foreach(var group2NotifyIcon in _Group2NotifyIcons)
+ {
+ group2NotifyIcon.Value.Dispose();
+ }
+
+ _Group2NotifyIcons.Clear();
+ }
+
+ private void DisposeAndRemoveNotification(IDisposable pNotification, long pGroupId)
+ {
+ pNotification.Dispose();
+ _Group2NotifyIcons.Remove(pGroupId);
}
- #region Style setter für ownChatDesktop Version
public void ResetStyle()
{
EmojiButton.Style = null;
@@ -115,81 +156,88 @@ namespace ChatController
ReloadGruppen.Visibility = Visibility.Visible;
_IsDesktopVersion = false;
}
- #endregion
- #region Lade KontaktDaten und Lade sie in den Chat
private void AktChatUser_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
- _Chat.ShowProfilePicture(_AktuellerKontakt);
+ _Chat.ShowProfilePicture(_CurrentContact);
}
private void Clientlist_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if(Clientlist.SelectedItem != null)
{
- disableKontaktNachrichtenThread = true;
- Cursor = Cursors.Wait;
- _ScrollPrueferAktivieren = false;
- ChatListBox.ItemsSource = null;
-
- AktChatUserList.Items.Clear();
-
- var kontakt = (Contact)Clientlist.SelectedItem;
-
- if(kontakt.NumberOfReadMessages == 1) {
- kontakt.NumberOfReadMessages = 0;
-
- Clientlist.Items.Refresh();
- }
-
- var aktuellerKontakt = new AktuellerKontakt(kontakt);
-
- AktChatUserList.Items.Add(aktuellerKontakt);
- _AktuellerKontakt = aktuellerKontakt;
-
- var chatMessages = _Chat.LadeChatNachrichtenVomKontakt(aktuellerKontakt);
-
- ChatListBox.ItemsSource = chatMessages;
-
- if (VisualTreeHelper.GetChildrenCount(ChatListBox) > 0)
- {
- var border = (Border) VisualTreeHelper.GetChild(ChatListBox, 0);
- var scrollViewer = (ScrollViewer) VisualTreeHelper.GetChild(border, 0);
- scrollViewer.ScrollToBottom();
- }
-
- ChatListBox.ContextMenu = _Chat.ErstelleKontextMenue();
- SetContextHandler();
- _ScrollPrueferAktivieren = true;
-
- HorcheAktivNachNachrichten();
- Cursor = Cursors.Arrow;
-
-
- disableKontaktNachrichtenThread = false;
+ SelectContact((Contact) Clientlist.SelectedItem);
}
}
- #endregion
- #region Context Menue
- //ab Hier Kontext Menü
+ private void SelectContact(Contact pContact)
+ {
+ _ShouldInterruptContactsThread = true;
+
+ Cursor = Cursors.Wait;
+ _ScrollPrueferAktivieren = false;
+
+ AktChatUserList.Items.Clear();
+
+ if (pContact.HasUnreadMessages)
+ {
+ pContact.HasUnreadMessages = false;
+
+ Clientlist.Items.Refresh();
+ }
+
+ var currentContact = new CurrentContact(pContact);
+ pContact.IsNewMessage = false;
+
+ var shouldChangeIcon = _ContactList.Any(contact => contact.IsNewMessage);
+ if(shouldChangeIcon)
+ {
+ ContainingWindow.Icon = Utils.GetImageSourceFromIcon(Resource.ownchat_favicon);
+ }
+
+ AktChatUserList.Items.Add(currentContact);
+ _CurrentContact = currentContact;
+
+ var chatMessages = _Chat.LoadChatMessagesForContact(currentContact);
+
+ ChatListBox.ItemsSource = chatMessages;
+
+ if (VisualTreeHelper.GetChildrenCount(ChatListBox) > 0)
+ {
+ var border = (Border) VisualTreeHelper.GetChild(ChatListBox, 0);
+ var scrollViewer = (ScrollViewer) VisualTreeHelper.GetChild(border, 0);
+ scrollViewer.ScrollToBottom();
+ }
+
+ ChatListBox.ContextMenu = _Chat.ErstelleKontextMenue();
+ SetContextHandler();
+ _ScrollPrueferAktivieren = true;
+
+ ListenForMessages();
+ Cursor = Cursors.Arrow;
+
+ WriteToNewSyncFile();
+
+ _ShouldInterruptContactsThread = false;
+ }
+
private void SetContextHandler()
{
- var contextItems = ChatListBox.ContextMenu.Items;
+ var contextItems = ChatListBox?.ContextMenu?.Items;
foreach (var menuItemText in _MenuItemName2Callback.Keys)
{
var cb = _MenuItemName2Callback[menuItemText];
- MenuItem item = new MenuItem();
+ var menuItem = new MenuItem();
- item.Click += (s, e2) =>
+ menuItem.Click += (s, e2) =>
{
cb(menuItemText);
};
- item.Header = menuItemText;
+ menuItem.Header = menuItemText;
- contextItems.Add(item);
+ contextItems.Add(menuItem);
}
var item2 = (MenuItem)contextItems[0];
@@ -203,24 +251,20 @@ namespace ChatController
}
- public delegate void ContextDelegate();
-
- public event ContextDelegate CreateNewContextItems;
-
private void Item2OnClick(object sender, RoutedEventArgs routedEventArgs)
{
foreach (var items in ChatListBox.SelectedItems)
{
var item = (ChatMessage)items;
- _Chat.SpeichernUnterFunkion(item);
+ _Chat.SaveFileAs(item);
}
}
private void Item3OnClick(object sender, RoutedEventArgs routedEventArgs)
{
- var kontakt = (AktuellerKontakt)AktChatUserList.Items[0];
- _Chat.Einfuegen(kontakt.GroupId,this);
+ var kontakt = (CurrentContact)AktChatUserList.Items[0];
+ _Chat.Paste(kontakt.GroupId,this);
}
private void Item4OnClick(object sender, RoutedEventArgs routedEventArgs)
@@ -234,7 +278,7 @@ namespace ChatController
}
if(!chatmessages.Equals(""))
- _Chat.Kopieren(chatmessages, 1);
+ _Chat.Copy(chatmessages, 1);
}
private void Chat_OnContextMenuOpening(object sender, ContextMenuEventArgs e)
@@ -259,7 +303,7 @@ namespace ChatController
ContextItemSpeichernUnter.Visibility = Visibility.Collapsed;
}
- if (item.ImageSources == null && item.Dokpfad == null)
+ if (item.ImageSources == null && item.FilePath == null)
{
var contextItems = ChatListBox.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem) contextItems[2];
@@ -313,8 +357,8 @@ namespace ChatController
}
//prüfe ob dokumentation erlaubt
- var kontakt = (AktuellerKontakt)AktChatUserList.Items[0];
- if (kontakt.CustomerOid == null && ChatListBox.ContextMenu.Items.Count > 3)
+ var kontakt = (CurrentContact)AktChatUserList.Items[0];
+ if (kontakt.UserIdManage == null && ChatListBox.ContextMenu.Items.Count > 3)
{
var contextItems = ChatListBox.ContextMenu.Items;
var ContextItemSpeichernUnter = (MenuItem)contextItems[3];
@@ -336,23 +380,13 @@ namespace ChatController
}
- public void AddContextMenu(string menuItemText, Action callBackAction)
- {
- if (!_MenuItemName2Callback.ContainsKey(menuItemText))
- {
- _MenuItemName2Callback.Add(menuItemText, callBackAction);
- }
- }
- #endregion
-
- #region Sende Media Nachrichten
private void MediaButton_OnClick(object sender, RoutedEventArgs e)
{
if (AktChatUserList.Items.Count > 0)
{
- var kontakt = (AktuellerKontakt)AktChatUserList.Items[0];
+ var kontakt = (CurrentContact)AktChatUserList.Items[0];
- var medium = _Chat.HoleMedium();
+ var medium = _Chat.OpenFile();
if(medium != null) {
@@ -360,13 +394,13 @@ namespace ChatController
if (!convertetMedia.Equals(""))
{
- _Chat.AddeMediumDerNachrichtView(convertetMedia,medium);
+ _Chat.AddNewFile(convertetMedia,medium,kontakt.GroupId);
CollectionViewSource.GetDefaultView(ChatListBox.ItemsSource).Refresh();
ChatListBox.Items.MoveCurrentToLast();
ChatListBox.ScrollIntoView(ChatListBox.Items.CurrentItem);
- _Chat.SendeMediumAnKontakt(kontakt, convertetMedia,medium);
+ _Chat.SendFileToContact(kontakt, convertetMedia,medium);
if (!convertetMedia.Equals("") && !convertetMedia.Equals(medium) && File.Exists(convertetMedia))
{
@@ -384,18 +418,16 @@ namespace ChatController
MessageBox.Show("Bitte wählen Sie einen Kontakt aus.","ownChat",MessageBoxButton.OK, MessageBoxImage.Information);
}
}
- #endregion
- #region Sende Normale Nachrichten
private void SendButton_OnClick(object sender, RoutedEventArgs e)
{
if (!AktChatUserList.Items.IsEmpty && !Chatbox.Text.Equals("") && _IsChatBoxOnFocus)
{
if (!Chatbox.Text.Equals(""))
{
- var kontakt = (AktuellerKontakt)AktChatUserList.Items[0];
+ var kontakt = (CurrentContact)AktChatUserList.Items[0];
- _Chat.AddeNachrichtDerView(Chatbox.Text);
+ _Chat.AddNewMessage(Chatbox.Text, kontakt.GroupId);
CollectionViewSource.GetDefaultView(ChatListBox.ItemsSource).Refresh();
@@ -419,22 +451,20 @@ namespace ChatController
if (AktChatUserList.Items.IsEmpty)
{
MessageBox.Show("Bitte wählen Sie einen Chatpartner aus.", "Fehler", MessageBoxButton.OK);
- if (Chatbox.Text.Equals(""))
+ if (string.IsNullOrEmpty(Chatbox.Text))
{
Chatbox.Text = "Nachricht schreiben";
Chatbox.Foreground = new SolidColorBrush(Colors.DarkGray);
_IsChatBoxOnFocus = false;
}
}
- else if (Chatbox.Text.Equals(""))
+ else if (string.IsNullOrEmpty(Chatbox.Text))
{
- 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;
- }
+ MessageBox.Show("Sie können keine leere Nachricht verschicken.", "Fehler", MessageBoxButton.OK);
+
+ Chatbox.Text = "Nachricht schreiben";
+ Chatbox.Foreground = new SolidColorBrush(Colors.DarkGray);
+ _IsChatBoxOnFocus = false;
}
}
}
@@ -447,8 +477,6 @@ namespace ChatController
Chatbox.Foreground = new SolidColorBrush(Colors.Black);
_IsChatBoxOnFocus = true;
}
-
- //hier bereich wie Dokumentieren
}
private void Chatbox_OnKeyDownHandler(object sender, KeyEventArgs e)
@@ -459,9 +487,9 @@ namespace ChatController
{
if (!AktChatUserList.Items.IsEmpty && !Chatbox.Text.Equals(""))
{
- var kontakt = (AktuellerKontakt)AktChatUserList.Items[0];
+ var kontakt = (CurrentContact)AktChatUserList.Items[0];
- _Chat.AddeNachrichtDerView(Chatbox.Text);
+ _Chat.AddNewMessage(Chatbox.Text, kontakt.GroupId);
CollectionViewSource.GetDefaultView(ChatListBox.ItemsSource).Refresh();
ChatListBox.Items.MoveCurrentToLast();
@@ -492,10 +520,7 @@ namespace ChatController
}
}
- #endregion
-
- #region Add Emoji To ChatBox
- public delegate void EmojiiDelegate(Button x);
+ public delegate void EmojiiDelegate(Button button);
public event EmojiiDelegate OnEmojii;
@@ -507,17 +532,14 @@ namespace ChatController
OnEmojii(EmojiButton);
}
}
- #endregion
-
- #region Nachladen weiterer Chat Nachrichten
+
private void Chat_OnScrollChanged(object sender, ScrollChangedEventArgs e)
{
- List scrollBarList = GetVisualChildCollection(ChatListBox);
- foreach (ScrollBar scrollBar in scrollBarList)
+ var scrollBarList = GetVisualChildCollection(ChatListBox);
+ foreach (var scrollBar in scrollBarList)
{
if (scrollBar.Orientation == Orientation.Horizontal)
{
- scrollBar.ValueChanged += HorizontalScrollbarChanged;
_ScrollPrueferAktivieren = true;
}
else
@@ -550,7 +572,7 @@ namespace ChatController
var kontakt = (Contact)Clientlist.SelectedItem;
- var xy = _Chat.LadeWeiterNachrichten(kontakt);
+ var xy = _Chat.LoadMoreMessages(kontakt);
ChatListBox.ItemsSource = xy;
@@ -561,181 +583,156 @@ namespace ChatController
}
}
- private void HorizontalScrollbarChanged(object sender, RoutedPropertyChangedEventArgs routedPropertyChangedEventArgs)
- {
- //nix
-
- }
-
- #region Get Scollbar von listbox
private static List GetVisualChildCollection(object parent) where T : Visual
{
- List visualCollection = new List();
+ var visualCollection = new List();
GetVisualChildCollection(parent as DependencyObject, visualCollection);
+
return visualCollection;
}
- private static void GetVisualChildCollection(DependencyObject parent, List visualCollection) where T : Visual
+ private static void GetVisualChildCollection(DependencyObject parent, ICollection visualCollection) where T : Visual
{
- int count = VisualTreeHelper.GetChildrenCount(parent);
- for (int i = 0; i < count; i++)
+ var count = VisualTreeHelper.GetChildrenCount(parent);
+ for (var i = 0; i < count; i++)
{
- DependencyObject child = VisualTreeHelper.GetChild(parent, i);
- if (child is T)
+ var child = VisualTreeHelper.GetChild(parent, i);
+
+ if (child is T item)
{
- visualCollection.Add(child as T);
+ visualCollection.Add(item);
}
- else if (child != null)
+ else
{
GetVisualChildCollection(child, visualCollection);
}
}
}
- #endregion
-
- #endregion
-
- #region Funktion Nachrichten Listener
-
- private void HorcheAktivNachNachrichten()
+ private void ListenForMessages()
{
- if (_NewThread != null)
- {
- _NewThread.Join();
- _NewThread = null;
- }
-
- var kontakt = (AktuellerKontakt) AktChatUserList.Items[0];
-
- _NewThread = new Thread(DoWork) {IsBackground = true};
- _NewThread.Start(kontakt);
+ _ListeningThreadTimer?.Stop();
+ _ListeningThreadTimer = null;
+ InitListeningThread((CurrentContact)AktChatUserList.Items[0]);
}
- private void DoWork(object o)
+ private Timer _ListeningThreadTimer;
+ private Timer _GlobalListeningThreadtimer;
+
+ private void InitGlobalListeningThread()
{
- var currentContact = (AktuellerKontakt) o;
-
- while (true)
+ _GlobalListeningThreadtimer = new Timer();
+ _GlobalListeningThreadtimer.Tick += GlobalListeningThreadTimerTickEvent;
+ _GlobalListeningThreadtimer.Interval = 2000;
+ _GlobalListeningThreadtimer.Start();
+ }
+
+ private void GlobalListeningThreadTimerTickEvent(object sender, EventArgs e)
+ {
+ ListenGloballyForMessages();
+ }
+
+ private void ListenGloballyForMessages()
+ {
+ var numberOfNewMessages = _Chat.GetNumberOfAllNewMessages();
+
+ if (numberOfNewMessages > 0)
{
- Thread.Sleep(2000);
-
- if (!disableKontaktNachrichtenThread)
+ Dispatcher.BeginInvoke(
+ DispatcherPriority.Normal,
+ (Action)delegate
{
- var hasNewMessages = _Chat.CheckIfNewMessagesExist(currentContact);
+ var contacts = _Chat.NeueGroupklassenKontakte().ToList();
- if (hasNewMessages)
+ CurrentContact currentContact = null;
+
+ if (AktChatUserList.HasItems)
{
- Utils.NotifyIcon.ShowBalloonTip(Constants.NotificationTimeout, "ownChat", $"Hat neue Nachrichten: {currentContact.Name}({currentContact.Contact.Name})", ToolTipIcon.None);
-
- Dispatcher.BeginInvoke(DispatcherPriority.Background,
- (Action) delegate
- {
-
-
- _Chat.LadeChatNachrichtenVomKontakt(currentContact);
-
- CollectionViewSource.GetDefaultView(ChatListBox.ItemsSource).Refresh();
-
- ChatListBox.Items.MoveCurrentToLast();
- ChatListBox.ScrollIntoView(ChatListBox.Items.CurrentItem);
- });
+ currentContact = (CurrentContact)AktChatUserList.Items[0];
}
- }
- else
- {
- break;
- }
- }
- }
- #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 (x > 0)
- {
- this.Dispatcher.BeginInvoke(
- DispatcherPriority.Background,
- (Action)delegate
- {
- var alist = _Chat.NeueGroupklassenKontakte();
-
- AktuellerKontakt aktuellerKontakt = null;
-
- if (AktChatUserList.HasItems)
+ foreach (var contact in _ContactList)
+ {
+ foreach (var newContact in contacts)
{
- aktuellerKontakt = (AktuellerKontakt)AktChatUserList.Items[0];
- }
-
- foreach (var liste in _ContactList)
+ if (contact.GroupId == newContact.GroupId)
{
- foreach (var neu in alist)
+ if (!contact.ReceivedMessage.Equals(newContact.ReceivedMessage))
{
- if (liste.GroupId == neu.GroupId)
+ contact.ReceivedMessage = newContact.ReceivedMessage;
+ contact.TimeStamp = newContact.TimeStamp;
+
+ if (Clientlist.SelectedItem != null && !((Contact)Clientlist.SelectedItem).GroupId.Equals(newContact.GroupId) || Clientlist.SelectedItem == null)
{
- if (!liste.ReceivedMessage.Equals(neu.ReceivedMessage)) {
-
- liste.ReceivedMessage = neu.ReceivedMessage;
- liste.TimeStamp = neu.TimeStamp;
-
- if (aktuellerKontakt != null && neu.GroupId == aktuellerKontakt.GroupId)
- {
- liste.NumberOfReadMessages = 0;
- }
- else
- {
- liste.NumberOfReadMessages = 1;
- }
- }
+ ContainingWindow.Icon = Utils.GetImageSourceFromIcon(Resource.oC_favico_NewMessage);
+ ShowNotification(newContact.Name, "Sie haben eine neue Nachricht", newContact.GroupId);
}
-
- //abchecken ob neue Groupid in liste vorhanden , wenn nicht dann adde neuen kontakt der liste hinzu
- if (!_ContactList.Contains(neu))
+
+ // Wenn der momentan ausgewählte Kontakt der aktuelle Kontakt in der Schleife ist, werden die Nachrichten nicht als ungelesen angezeigt, sonst schon.
+ if (currentContact != null && newContact.GroupId == currentContact.GroupId)
{
- _ContactList.ToList().Add(neu);
+ contact.HasUnreadMessages = false;
+ }
+ else
+ {
+ contact.HasUnreadMessages = true;
+ contact.IsNewMessage = true;
}
- }
-
- //umgekert ist eine kontakt aus der liste nicht mehr in neu muss diese raus
- if (!alist.Contains(liste))
- {
- _ContactList.ToList().Remove(liste);
}
}
-
- Clientlist.Items.Refresh();
-
- });
-
- }
-
- if (_AlleNachrichtenThreadBool == false)
- {
- break;
- }
-
- Thread.Sleep(5000);
+ if (!_ContactList.Contains(newContact))
+ {
+ _ContactList.ToList().Add(newContact);
+ }
+ }
+
+ if (!contacts.Contains(contact))
+ {
+ _ContactList.ToList().Remove(contact);
+ }
+ }
+
+ Clientlist.Items.Refresh();
+ });
}
}
- #endregion
+ private void InitListeningThread(CurrentContact pCurrentContacObject)
+ {
+ _ListeningThreadTimer = new Timer {Tag = pCurrentContacObject};
+ _ListeningThreadTimer.Tick += ListeningThreadTimerTickEvent;
+ _ListeningThreadTimer.Interval = 2000;
+ _ListeningThreadTimer.Start();
+ }
+
+ private void ListeningThreadTimerTickEvent(object sender, EventArgs e)
+ {
+ ListenForMessagesForCurrentContact((CurrentContact) ((Timer) sender).Tag);
+ }
+
+ private void ListenForMessagesForCurrentContact(CurrentContact pCurrentContact)
+ {
+ if (!_ShouldInterruptContactsThread)
+ {
+ var hasNewMessages = _Chat.CheckIfNewMessagesExist(pCurrentContact);
+
+ if (hasNewMessages)
+ {
+ Dispatcher.BeginInvoke(DispatcherPriority.Background,
+ (Action)delegate
+ {
+ _Chat.LoadChatMessagesForContact(pCurrentContact);
+
+ CollectionViewSource.GetDefaultView(ChatListBox.ItemsSource).Refresh();
+
+ ChatListBox.Items.MoveCurrentToLast();
+ ChatListBox.ScrollIntoView(ChatListBox.Items.CurrentItem);
+ });
+ }
+ }
+ }
- #region Suche Nach Person
-
private void Suche_OnTextChanged(object sender, TextChangedEventArgs e)
{
CollectionViewSource.GetDefaultView(Clientlist.ItemsSource).Refresh();
@@ -749,10 +746,6 @@ namespace ChatController
return ((item as Contact).Name.IndexOf(Suche.Text, StringComparison.OrdinalIgnoreCase) >= 0);
}
- #endregion
-
- #region Zeige Erhaltene Daten per doppelclick An
-
private void Chat_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
Cursor = Cursors.Wait;
@@ -770,10 +763,10 @@ namespace ChatController
StartWaiting();
_Chat.ShowPicture(item, EndWaiting);
}
- else if(item != null && item.Dokpfad != null)
+ else if(item != null && item.FilePath != null)
{
- var filename = Path.GetFileName(item.Dokpfad.ToString());
- LoadDokument(item.Dokpfad.ToString(), filename);
+ var filename = Path.GetFileName(item.FilePath.ToString());
+ LoadDocument(item.FilePath.ToString(), filename);
}
}
@@ -785,43 +778,17 @@ namespace ChatController
}
}
- #endregion
-
- #region Lade Dokument Herunter und Zeige es an
- private void OpenDokument_OnClick(object sender, RoutedEventArgs e)
- {
- OpenDocument(sender);
- }
-
- private void OpenDocument(object sender)
- {
- Cursor = Cursors.Wait;
-
- var btn = sender as System.Windows.Controls.Button;
-
- if (btn.Tag != null)
- {
- var link = btn.Tag;
-
- var filename = Path.GetFileName(link.ToString());
-
- LoadDokument(link.ToString(), filename);
- }
-
- Cursor = Cursors.Arrow;
- }
-
- private void LoadDokument(string link, String filename)
+ private void LoadDocument(string link, string filename)
{
try
{
StartWaiting();
- string path = Path.Combine(Path.GetTempPath(), filename);
+ var path = Path.Combine(Path.GetTempPath(), filename);
_CreatedTempFiles.Add(path);
if (!File.Exists(path))
{
- using (WebClient webClient = new WebClient())
+ using (var webClient = new WebClient())
{
webClient.DownloadFile(link, path);
}
@@ -844,16 +811,9 @@ namespace ChatController
{
EndWaiting();
}
-
-
-
}
- #endregion
-
- #region Wait Layer
-
- private ChatControlWaitLayer _waitLayer = null;
+ private ChatControlWaitLayer _waitLayer;
public void StartWaiting()
{
@@ -887,16 +847,11 @@ namespace ChatController
});
}
- #endregion
-
- #region link request
private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
Process.Start(e.Uri.ToString());
}
- #endregion
- #region ReloadGruppen (For Stand Alone version)
private void ButtonReloadGruppen_OnClick(object sender, RoutedEventArgs e)
{
DoSynchro();
@@ -908,15 +863,13 @@ namespace ChatController
{
Cursor = Cursors.Wait;
- SpeichereMessageInfoInDatei();
+ WriteToNewSyncFile();
- var aktuelleGruppen = _Chat.GruppenAktuallisieren();
+ var aktuelleGruppen = _Chat.UpdateGroups();
- var x = _Chat.GroupklassenAktuallisieren(aktuelleGruppen);
+ _ContactList = _Chat.GroupklassenAktuallisieren(aktuelleGruppen);
- _ContactList = x;
-
- LeseMessageInfoAusDatei();
+ ReadNewSyncFile();
Clientlist.Items.Refresh();
@@ -927,88 +880,149 @@ namespace ChatController
MessageBox.Show("Ein Fehler bei der Synchronisation ist aufgetreten.\nFehler:\n" + e.Message, "Fehler", MessageBoxButton.OK);
}
}
-
- #endregion
- #region speichern sowie lesen der MessageSyncDatei / stylezwecke (OwnChat only)
- public void SpeichereMessageInfoInDatei()
+ // Speichert die TimeStamps der zuletzt empfangenen Nachrichten
+ public void WriteToNewSyncFile()
{
- List aa = new List();
- foreach (var kontakt in _ContactList)
+ try
{
- if(kontakt.NumberOfReadMessages == 0 && !kontakt.ReceivedMessage.Equals("")) {
- aa.Add(kontakt);
- }
- }
-
- if(aa.Count>0)
- _Chat.SpeichereTimeStampsInDatei(aa);
- }
-
- public void LeseMessageInfoAusDatei()
- {
- List aa = new List();
- foreach (var kontakt in _ContactList)
- {
- aa.Add(kontakt);
- }
-
- var liste = _Chat.PruefeTimeStampsBeiStart(aa);
-
- if(liste != null) {
- foreach (var kon in _ContactList)
+ if (File.Exists(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFile2Name)))
{
- foreach (var item in liste)
- {
- if (kon.GroupId == item.Key)
- {
- kon.NumberOfReadMessages = 0;
- }
- }
+ File.SetAttributes(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFile2Name), FileAttributes.Normal);
+ File.Delete(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFile2Name));
}
- }
- }
- #endregion
-
- #region Speichern Und LEsen Der MesageSyncDatei (Bewoplaner only)
- public List UebergebeMessageInfoDatenFuerDb()
+ using (var streamWriter = new StreamWriter(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFile2Name)))
+ {
+ Encoding enc = new UTF8Encoding();
+
+ foreach (var contact in _ContactList.ToList().Where(contact => contact.ReceivedMessage != null))
+ {
+ var text = contact.GroupId + ";" + contact.TimeStamp + ";" + contact.IsNewMessage + ";";
+ var bytes = enc.GetBytes(text);
+ var base64String = Convert.ToBase64String(bytes);
+
+ streamWriter.WriteLine(base64String);
+ }
+
+ File.SetAttributes(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFile2Name), FileAttributes.ReadOnly);
+ }
+ }
+ catch (Exception exception)
+ {
+
+ }
+ }
+
+ public void ReadNewSyncFile()
{
- List < Contact > aa = new List();
+ try
+ {
+ if(File.Exists(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFile2Name)))
+ {
+ using (var streamReader = new StreamReader(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFile2Name), true))
+ {
+ string line;
+
+ _GroupId2DateTime.Clear();
+
+ while ((line = streamReader.ReadLine()) != null)
+ {
+ var encodedTextBytes = Convert.FromBase64String(line);
+ var plainText = Encoding.UTF8.GetString(encodedTextBytes);
+ var splitPlainText = plainText.Split(';');
+
+ // Ist kein Datum vorhanden -> 01.01.0001 00:00:00
+
+ var groupId = int.Parse(splitPlainText[0]);
+ var dateTime = DateTime.Parse(splitPlainText[1]);
+ var isUnread = splitPlainText.Length <= 2 || string.IsNullOrEmpty(splitPlainText[2]) || bool.Parse(splitPlainText[2]);
+
+ Debug.WriteLine($"{groupId}: {dateTime:dd.MM.yyyy HH:mm:ss}; Is unread: {isUnread}");
+
+ _GroupId2DateTime.Add(groupId, new SyncFileInfoStruct(isUnread, dateTime));
+ }
+ }
+
+ var latestDateTime = Utils.DefaultDate;
+
+ foreach(var id2dateTime in _GroupId2DateTime)
+ {
+ if(id2dateTime.Value.TimeStamp > latestDateTime)
+ {
+ latestDateTime = id2dateTime.Value.TimeStamp;
+ }
+ }
+
+ //_Chat.LastTimeStamp = !latestDateTime.Equals(Utils.DefaultDate) ? latestDateTime.GetUnixTimeStamp() : DateTime.UtcNow.GetUnixTimeStamp();
+ }
+ }
+ catch (Exception e)
+ {
+
+ }
+ }
+
+ public List GetContactsWithoutUnreadMessages()
+ {
+ var contacts = new List();
Clientlist.Items.Refresh();
- foreach (var item in Clientlist.Items)
+ foreach(var contactItem in Clientlist.Items)
{
- var kontakt = item as Contact;
-
- if (kontakt != null && kontakt.NumberOfReadMessages == 0 && !kontakt.ReceivedMessage.Equals(""))
+ if(contactItem is Contact contact && contact.HasUnreadMessages && !string.IsNullOrEmpty(contact.ReceivedMessage))
{
- aa.Add(kontakt);
+ contacts.Add(contact);
}
}
-
- return aa;
+
+ return contacts;
}
- public void ErhalteMessageInfoVonDb(Dictionary liste)
+ public void ResetNumberOfUnreadMessages(Dictionary pGroupId2DateTime)
{
- if (liste != null)
+ if(pGroupId2DateTime != null)
{
- foreach (var kon in _ContactList)
+ foreach(var contact in _ContactList)
{
- foreach (var item in liste)
+ foreach(var groupId2DateTime in pGroupId2DateTime)
{
- if (kon.GroupId == item.Key)
+ if(contact.GroupId == groupId2DateTime.Key)
{
- kon.NumberOfReadMessages = 0;
+ contact.HasUnreadMessages = false;
}
}
}
- }
+ }
+ }
+
+ public List GetSelectedMessages()
+ {
+ var messages = (from object selectedItem in ChatListBox.SelectedItems select selectedItem as ChatMessage).ToList();
+
+ return messages.Count > 0 ? messages : null;
+ }
+
+ public CurrentContact GetCurrentContact()
+ {
+ if(AktChatUserList != null && AktChatUserList.Items.Count > 0)
+ {
+ var contact = (CurrentContact) AktChatUserList.Items[0];
+
+ return contact.UserIdManage == null ? null : contact;
+ }
+
+ return null;
+ }
+
+ public void AddContextMenu(string menuItemText, Action callBackAction)
+ {
+ if (!_MenuItemName2Callback.ContainsKey(menuItemText))
+ {
+ _MenuItemName2Callback.Add(menuItemText, callBackAction);
+ }
}
-
- #endregion
public void DeleteTempFiles()
{
diff --git a/ChatController/Data/OwnChatApi.cs b/ChatController/Data/OwnChatApi.cs
index 349c00a..0c7f402 100644
--- a/ChatController/Data/OwnChatApi.cs
+++ b/ChatController/Data/OwnChatApi.cs
@@ -81,7 +81,7 @@ namespace ChatController.Data
{
try
{
- var serverResponse = Empty;
+ var serverResponse = string.Empty;
using (var dataStream = response.GetResponseStream())
{
diff --git a/ChatController/HauptKlassen/Chat.cs b/ChatController/HauptKlassen/Chat.cs
index df51cdf..d84a2a5 100644
--- a/ChatController/HauptKlassen/Chat.cs
+++ b/ChatController/HauptKlassen/Chat.cs
@@ -1,10 +1,9 @@
using ChatController.ChatKlassen;
-using ChatController.Klassen;
-
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
@@ -12,7 +11,6 @@ using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
-using System.Reflection;
using System.Text;
using System.Threading;
using System.Windows;
@@ -23,7 +21,7 @@ using System.Windows.Media.Imaging;
using ChatController.LoginKlassen;
using ChatController.Utilities;
-
+using ChatController.Utilities.Extensions;
using Application = System.Windows.Forms.Application;
using Clipboard = System.Windows.Forms.Clipboard;
using Color = System.Drawing.Color;
@@ -38,7 +36,7 @@ namespace ChatController.HauptKlassen
public class Chat
{
private readonly List _Contacts = new List();
- private readonly List _Messages = new List();
+ public List Messages { get; } = new List();
public ChatDatenUebergabe ChatDaten { get; set; }
@@ -48,114 +46,51 @@ namespace ChatController.HauptKlassen
private string _NextPage;
private bool _HasNextPage;
- private long _LastTimeStamp;
-
+ public long LastTimeStamp { get; set; }
+
public Chat(ChatDatenUebergabe chatDaten)
{
ChatDaten = chatDaten;
}
- public IOrderedEnumerable GroupklassenInChatKontakteUmwandler()
+ public ChatMessage PrevisouslyLatestMessage { get; set; }
+ public ChatMessage GetLatestMessage()
{
- foreach (var kontakt in ChatDaten.AlleGruppen.Response)
+ ChatMessage latestMessage = null;
+ foreach (var message in Messages)
{
- foreach (var value in kontakt.Value)
+ if (latestMessage == null || latestMessage.SendTime < message.SendTime)
{
- var message = "";
-
- var lastMessage = value.LastMessage;
-
- var timeformated = new DateTime();
-
- if(lastMessage?.Text != null)
- {
- message = lastMessage.Text;
- }
-
- if(value.LastMessage != null) {
- var timestamp = DateTime.Parse(lastMessage.Timestamp.Date);
-
- var clientZone = TimeZoneInfo.Local;
- timeformated = TimeZoneInfo.ConvertTimeFromUtc(timestamp, clientZone);
- }
-
- if(string.IsNullOrEmpty(message) && !string.IsNullOrEmpty(value.LastMessage?.File))
- {
- message = Path.GetFileName(value.LastMessage.File);
- }
-
- long? customerOid = null;
- var isEmployee = false;
-
- foreach(var user in value.Users)
- {
- if(user.Oid != ChatDaten.Userid)
- {
- if(!user.Is_Employee && !string.IsNullOrEmpty(user.Userid_Manage))
- {
- customerOid = long.Parse(user.Userid_Manage.Substring(1));
- }
- }
- }
-
- if(value.OnlyEmployees && value.Users.Length == 2)
- {
- isEmployee = true;
- }
-
- _Contacts.Add(new Contact(value.Name, Utils.AvatarToImageSourceConverter(value.Avatar, isEmployee), message, timeformated, value.Oid, customerOid, value.OnlyEmployees, value.Users.Length));
-
- if(lastMessage?.Timestamp?.Date != null) {
- var span = DateTime.Parse(lastMessage.Timestamp.Date) - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
- var unixTime = Convert.ToInt64(span.TotalSeconds);
-
- if (_LastTimeStamp < unixTime)
- {
- _LastTimeStamp = unixTime;
- }
- }
+ latestMessage = message;
}
}
+ return latestMessage;
+ }
+
+ public IOrderedEnumerable AddContacts()
+ {
+ foreach (var contact in ChatDaten.AlleGruppen.Response)
+ {
+ _Contacts.AddRange(GenerateContactsFromServerResponse(contact.Value, true));
+ }
+
var sortedKontaktliste = _Contacts.OrderByDescending(r => r.TimeStamp);
return sortedKontaktliste;
}
- public IOrderedEnumerable LadeChatNachrichtenVomKontakt(AktuellerKontakt pContact)
+ public IOrderedEnumerable LoadChatMessagesForContact(CurrentContact pContact)
{
if (pContact != null)
{
- HoleNachrichtenVomServer(pContact.GroupId);
- _Messages.Clear();
+ LoadMessagesFromServer(pContact.GroupId);
+ Messages.Clear();
- foreach (var message in _UserMessages.Response.Messages)
- {
- var time = DateTime.Parse(message.Timestamp.Date);
- var clientTimeZone = TimeZoneInfo.Local;
- var formattedTime = TimeZoneInfo.ConvertTimeFromUtc(time, clientTimeZone);
- var isMyOwnMessage = message.UserId == ChatDaten.Userid.Value;
- var textMessage = message.Text ?? string.Empty;
-
- if(string.IsNullOrEmpty(textMessage))
- {
- textMessage = message.Original_Filename;
- }
-
- if (!string.IsNullOrEmpty(message.File))
- {
- _Messages.Add(Constants.ImageFileExtensions.Contains(Path.GetExtension(message.File).ToUpperInvariant()) ?
- new ChatMessage(message.User_Name, textMessage, formattedTime, isMyOwnMessage, DownloadImage(message.Smaller_Image), message.File, message.Original_Filename) :
- new ChatMessage(message.User_Name, textMessage, formattedTime, message.Smaller_Image, isMyOwnMessage, message.File));
- }
- else
- {
- _Messages.Add(new ChatMessage(message.User_Name, message.Text, formattedTime, isMyOwnMessage));
- }
- }
+ AddMessagesFromServerResponse(_UserMessages.Response.Messages);
}
- return _Messages.OrderBy(r => r.SendTime);
+ return Messages.OrderBy(r => r.SendTime);
}
private static ImageSource DownloadImage(string pUri)
@@ -177,11 +112,11 @@ namespace ChatController.HauptKlassen
}
}
- private void HoleNachrichtenVomServer(long groupId)
+ private void LoadMessagesFromServer(long pGroupId)
{
try
{
- var endurl = ChatDaten.ServerUrl + "/api/chat/messages?groupid=" + groupId;
+ var endurl = ChatDaten.ServerUrl + Constants.LoadMessagesForGroupUrl + pGroupId;
var webRequest = WebRequest.Create(endurl);
@@ -191,15 +126,11 @@ namespace ChatController.HauptKlassen
using (var response = webRequest.GetResponse())
{
- var responseFromServer = Utils.ReadStream(response);
+ var serverResponse = Utils.ReadStream(response);
- if (!responseFromServer.Equals(""))
+ if (!string.IsNullOrEmpty(serverResponse))
{
- _UserMessages = null;
-
- var jsonDaten = JsonConvert.DeserializeObject(responseFromServer);
-
- _UserMessages = jsonDaten;
+ _UserMessages = JsonConvert.DeserializeObject(serverResponse);
if (_UserMessages.Response.HasMorePages)
{
@@ -215,53 +146,23 @@ namespace ChatController.HauptKlassen
}
catch (Exception e)
{
- MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK);
+ MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
- public IOrderedEnumerable LadeWeiterNachrichten(Contact kontakt)
+ public IOrderedEnumerable LoadMoreMessages(Contact pContact)
{
if (_HasNextPage)
{
- HoleWeitereNachrichtenVomServer(kontakt.GroupId, _NextPage);
-
- foreach (var ChatMessage in _AdditionalUserMessages.Response.Messages)
- {
- var time = DateTime.Parse(ChatMessage.Timestamp.Date);
- var clientZone = TimeZoneInfo.Local;
- var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone);
+ LoadMoreMessagesFromServer(pContact.GroupId, _NextPage);
- var isLoggedInUsersMessage = ChatMessage.UserId == ChatDaten.Userid.Value;
-
- if (!string.IsNullOrEmpty(ChatMessage.File))
- {
- var messageText = "";
-
- if (ChatMessage.Text != null)
- {
- messageText = ChatMessage.Text;
- }
-
- if (string.IsNullOrEmpty(messageText))
- {
- messageText = ChatMessage.Original_Filename;
- }
-
- _Messages.Add(Constants.ImageFileExtensions.Contains(Path.GetExtension(ChatMessage.File).ToUpperInvariant()) ?
- new ChatMessage(ChatMessage.User_Name, messageText, timeformated, isLoggedInUsersMessage, DownloadImage(ChatMessage.Smaller_Image), ChatMessage.File, ChatMessage.Original_Filename) :
- new ChatMessage(ChatMessage.User_Name, messageText, timeformated, ChatMessage.Smaller_Image, isLoggedInUsersMessage, ChatMessage.File));
- }
- else
- {
- _Messages.Add(new ChatMessage(ChatMessage.User_Name, ChatMessage.Text, timeformated, true));
- }
- }
+ AddMessagesFromServerResponse(_AdditionalUserMessages.Response.Messages);
}
- return _Messages.OrderBy(r => r.SendTime);
+ return Messages.OrderBy(r => r.SendTime);
}
- private void HoleWeitereNachrichtenVomServer(long pGroupId, string pPage)
+ private void LoadMoreMessagesFromServer(long pGroupId, string pPage)
{
try
{
@@ -282,9 +183,7 @@ namespace ChatController.HauptKlassen
{
_AdditionalUserMessages = null;
- var userMessages = JsonConvert.DeserializeObject(responseFromServer);
-
- _AdditionalUserMessages = userMessages;
+ _AdditionalUserMessages = JsonConvert.DeserializeObject(responseFromServer);
if (_AdditionalUserMessages.Response.HasMorePages)
{
@@ -301,13 +200,13 @@ namespace ChatController.HauptKlassen
}
catch (Exception e)
{
- MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK);
+ MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
- private double? _FormerMessagesCount;
+ private double _FormerMessagesCount;
- public bool CheckIfNewMessagesExist(AktuellerKontakt pCurrentContact)
+ public bool CheckIfNewMessagesExist(CurrentContact pCurrentContact)
{
var span = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var timespan = Convert.ToInt64(span.TotalSeconds);
@@ -319,14 +218,9 @@ namespace ChatController.HauptKlassen
if (pCurrentContact != null)
{
- var currentMessagesCount = SendOwnChatNewsRequest(pCurrentContact.GroupId, timespan);
+ var currentMessagesCount = GetNumberOfNewMessages(pCurrentContact.GroupId, timespan);
- if (_FormerMessagesCount == null)
- {
- _FormerMessagesCount = currentMessagesCount;
- }
-
- if (currentMessagesCount != null && _FormerMessagesCount != null && currentMessagesCount.Equals(_FormerMessagesCount))
+ if (currentMessagesCount.Equals(_FormerMessagesCount))
{
return false;
}
@@ -339,141 +233,90 @@ namespace ChatController.HauptKlassen
return false;
}
- private double? SendOwnChatNewsRequest(long groupId, long lastStamp)
+ private double GetNumberOfNewMessages(long pGroupId, long pLastTimeStamp)
{
try
{
- var endurl = ChatDaten.ServerUrl + "/api/ownchat/news/" + groupId+"/"+lastStamp;
+ var url = $"{ChatDaten.ServerUrl}{Constants.LoadOwnChatNewsUrl}{pGroupId}/{pLastTimeStamp}";
- var request = WebRequest.Create(endurl);
+ var webRequest = WebRequest.Create(url);
- request.Credentials = CredentialCache.DefaultCredentials;
- request.Headers[Constants.Token] = ChatDaten.AuthToken;
- request.Headers[Constants.CustomerId] = ChatDaten.Kundennummer;
+ webRequest.Credentials = CredentialCache.DefaultCredentials;
+ webRequest.Headers[Constants.Token] = ChatDaten.AuthToken;
+ webRequest.Headers[Constants.CustomerId] = ChatDaten.Kundennummer;
- var response = request.GetResponse();
+ var response = webRequest.GetResponse();
var responseFromServer = Utils.ReadStream(response);
- var jsonDaten = JsonConvert.DeserializeObject(responseFromServer);
+ var messageCounter = JsonConvert.DeserializeObject(responseFromServer);
- return jsonDaten.MessageCount;
+ return messageCounter.MessageCount;
}
- catch (Exception e)
- {
- return null;
- }
- }
-
- public double SchaueNachAllenMessageCounts()
- {
- var span = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
- var unixTime = Convert.ToInt64(span.TotalSeconds);
-
- var x = SendeTimestampForEach(0);
-
- if (x > 0)
- {
- _LastTimeStamp = unixTime;
- }
-
- return x;
- }
-
- private double SendeTimestampForEach(long groupId)
- {
- try
- {
- var endurl = ChatDaten.ServerUrl + "/api/ownchat/news/" + groupId + "/" + _LastTimeStamp;
-
- var request = WebRequest.Create(endurl);
-
- request.Credentials = CredentialCache.DefaultCredentials;
- request.Headers[Constants.Token] = ChatDaten.AuthToken;
- request.Headers[Constants.CustomerId] = ChatDaten.Kundennummer;
- ((HttpWebRequest) request).KeepAlive = false;
-
- var response = request.GetResponse();
-
- var responseFromServer = Utils.ReadStream(response);
-
- var jsonDaten = JsonConvert.DeserializeObject(responseFromServer);
-
- return jsonDaten.MessageCount;
-
- }
- catch (Exception e)
+ catch (Exception exception)
{
return 0;
- }
+ }
+ }
+
+ public double GetNumberOfAllNewMessages()
+ {
+ var unixTime = DateTime.UtcNow.GetUnixTimeStamp();
+
+ var messageCount = 0d;
+
+ messageCount += LoadNumberOfNewMessagesFromServer(0);
+
+ if (messageCount > 0)
+ {
+ LastTimeStamp = unixTime;
+ }
+
+ return messageCount;
+ }
+
+ private double LoadNumberOfNewMessagesFromServer(long pGroupId)
+ {
+ try
+ {
+ var url = ChatDaten.ServerUrl + Constants.LoadOwnChatNewsUrl + pGroupId + "/" + LastTimeStamp;
+
+ var webRequest = WebRequest.Create(url);
+
+ webRequest.Credentials = CredentialCache.DefaultCredentials;
+ webRequest.Headers[Constants.Token] = ChatDaten.AuthToken;
+ webRequest.Headers[Constants.CustomerId] = ChatDaten.Kundennummer;
+ ((HttpWebRequest) webRequest).KeepAlive = false;
+
+ var response = webRequest.GetResponse();
+
+ var responseFromServer = Utils.ReadStream(response);
+
+ var messageCounter = JsonConvert.DeserializeObject(responseFromServer);
+
+ return messageCounter.MessageCount;
+ }
+ catch (Exception exception)
+ {
+ return 0;
+ }
}
public IOrderedEnumerable NeueGroupklassenKontakte()
{
var contacts = new List();
- var groupData = GruppenHolen();
+ var groupData = LoadGroups();
foreach (var contact in groupData.Response)
{
- foreach (var value in contact.Value)
- {
- var message = "";
- var timeformated = new DateTime();
-
- var lastMessage = value.LastMessage;
-
- if (lastMessage?.Text != null)
- {
- message = lastMessage.Text;
- var timestamp = DateTime.Parse(lastMessage.Timestamp.Date);
-
- var clientZone = TimeZoneInfo.Local;
- timeformated = TimeZoneInfo.ConvertTimeFromUtc(timestamp, clientZone);
- }
-
- if (string.IsNullOrEmpty(message) && !string.IsNullOrEmpty(value.LastMessage?.File))
- {
- message = Path.GetFileName(value.LastMessage.File);
- }
-
- long? customerOid = null;
- var isEmployee = false;
-
- foreach (var user in value.Users)
- {
- if (user.Oid != ChatDaten.Userid)
- {
- if (!user.Is_Employee && !string.IsNullOrEmpty(user.Userid_Manage))
- {
- customerOid = long.Parse(user.Userid_Manage.Substring(1));
- }
- }
- }
-
- if (value.OnlyEmployees && value.Users.Length == 2)
- {
- isEmployee = true;
- }
-
- contacts.Add(new Contact(value.Name, Utils.AvatarToImageSourceConverter(value.Avatar, isEmployee), message, timeformated, value.Oid, customerOid, value.OnlyEmployees, value.Users.Length));
-
- if (lastMessage?.Timestamp?.Date != null) {
- var span = DateTime.Parse(lastMessage.Timestamp.Date) - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
- var unixTime = Convert.ToInt64(span.TotalSeconds);
-
- if (_LastTimeStamp < unixTime)
- {
- _LastTimeStamp = unixTime;
- }
- }
- }
+ contacts.AddRange(GenerateContactsFromServerResponse(contact.Value, true));
}
return contacts.OrderByDescending(r => r.TimeStamp);
}
- private ChatGruppenDaten GruppenHolen()
+ private ChatGruppenDaten LoadGroups()
{
try
{
@@ -502,7 +345,7 @@ namespace ChatController.HauptKlassen
}
}
- public void AddeNachrichtDerView(string pMessage)
+ public void AddNewMessage(string pMessage, long pGroupId)
{
try
{
@@ -516,7 +359,7 @@ namespace ChatController.HauptKlassen
var time = DateTime.Now;
- _Messages.Add(new ChatMessage(username, pMessage, time, true));
+ Messages.Add(new ChatMessage(username, pMessage, time, true, pGroupId));
}
catch (Exception e)
@@ -571,7 +414,7 @@ namespace ChatController.HauptKlassen
}
}
- public string HoleMedium()
+ public string OpenFile()
{
try
{
@@ -588,7 +431,7 @@ namespace ChatController.HauptKlassen
}
}
- public void AddeMediumDerNachrichtView(string pFile, string pOriginalFilePath)
+ public void AddNewFile(string pFile, string pOriginalFilePath, long pGroupId)
{
try
{
@@ -603,13 +446,13 @@ namespace ChatController.HauptKlassen
if (Constants.ImageFileExtensions.Contains(Path.GetExtension(pFile).ToUpperInvariant()))
{
- byte[] mediaFile;
+ byte[] file;
using (Stream reader = File.OpenRead(pFile))
{
- mediaFile = ReadFully(reader);
+ file = Utils.ReadFully(reader);
}
- var memoryStream = new MemoryStream(mediaFile);
+ var memoryStream = new MemoryStream(file);
var image = System.Drawing.Image.FromStream(memoryStream);
using (var bitmap = new Bitmap(image))
@@ -628,7 +471,7 @@ namespace ChatController.HauptKlassen
bitmap.SetPropertyItem(item);
}
- var flipType = OrientationToFlipType(orient.ToString());
+ var flipType = Utils.OrientationToFlipType(orient.ToString());
bitmap.RotateFlip(flipType);
@@ -645,20 +488,16 @@ namespace ChatController.HauptKlassen
filename = filename.Replace(".bmp", ".jpg");
- _Messages.Add(new ChatMessage(message.User_Name, filename, sendTime, true, bitmapImage, pFile, filename));
+ Messages.Add(new ChatMessage(message.User_Name, filename, sendTime, true, bitmapImage, pFile, filename, pGroupId));
}
}
memoryStream.Dispose();
memoryStream.Close();
}
- else if (Constants.DocumentFileExtension.Contains(Path.GetExtension(pFile).ToUpperInvariant()))
- {
- _Messages.Add(new ChatMessage(message.User_Name, Path.GetFileName(pFile), sendTime, message.Smaller_Image, true, pFile));
- }
else
{
- _Messages.Add(new ChatMessage(message.User_Name, Path.GetFileName(pFile), sendTime, message.Smaller_Image, true, pFile));
+ Messages.Add(new ChatMessage(message.User_Name, Path.GetFileName(pFile), sendTime, message.Smaller_Image, true, pFile, pGroupId));
}
}
@@ -668,7 +507,7 @@ namespace ChatController.HauptKlassen
}
}
- public void AddMediumContextDerNachrichtView(byte[] pFile, string pFileName)
+ public void AddMediumContextDerNachrichtView(byte[] pFile, string pFileName, long pGroupId)
{
if(string.IsNullOrEmpty(pFileName))
{
@@ -691,27 +530,27 @@ namespace ChatController.HauptKlassen
memoryStream.Close();
ImageSource logo = bitmapImage;
- _Messages.Add(new ChatMessage(message.User_Name, Path.GetFileName(pFileName), sendtime, true, logo, pFileName, Path.GetFileName(pFileName)));
+ Messages.Add(new ChatMessage(message.User_Name, Path.GetFileName(pFileName), sendtime, true, logo, pFileName, Path.GetFileName(pFileName), pGroupId));
}
else
{
- _Messages.Add(new ChatMessage(message.User_Name, Path.GetFileName(pFileName), sendtime, message.Smaller_Image, true, pFileName));
+ Messages.Add(new ChatMessage(message.User_Name, Path.GetFileName(pFileName), sendtime, message.Smaller_Image, true, pFileName, pGroupId));
}
}
- public void SendeMediumAnKontakt(AktuellerKontakt kontakt,string file,string originalFilePath)
+ public void SendFileToContact(CurrentContact pCurrentContact, string pFile, string pOriginalFilePath)
{
try
{
- VerarbeiteMedia(file,kontakt,originalFilePath);
+ SendFile(pFile, pCurrentContact, pOriginalFilePath);
}
catch (Exception e)
{
- MessageBox.Show("Fehler: " + e.Message, "Fehler", MessageBoxButton.OK);
+ MessageBox.Show("Fehler: " + e.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
- private void VerarbeiteMedia(string pFile, AktuellerKontakt pContact, string pOriginalFilePath)
+ private void SendFile(string pFile, CurrentContact pContact, string pOriginalFilePath)
{
if(string.IsNullOrEmpty(pOriginalFilePath))
{
@@ -721,7 +560,7 @@ namespace ChatController.HauptKlassen
byte[] mediaFile;
using (Stream reader = File.OpenRead(pFile))
{
- mediaFile = ReadFully(reader);
+ mediaFile = Utils.ReadFully(reader);
}
var fileName = Path.GetFileName(pOriginalFilePath).ToLower();
@@ -745,12 +584,11 @@ namespace ChatController.HauptKlassen
byte[] mediaFile;
using (Stream reader = File.OpenRead(pFile))
{
- mediaFile = ReadFully(reader);
+ mediaFile = Utils.ReadFully(reader);
}
var memoryStream = new MemoryStream(mediaFile);
var image = System.Drawing.Image.FromStream(memoryStream);
-
float width, height;
@@ -848,46 +686,12 @@ namespace ChatController.HauptKlassen
return filePath;
}
- catch (Exception e)
+ catch (Exception exception)
{
return pFile;
}
}
- public static RotateFlipType OrientationToFlipType(string orientation)
- {
- switch (int.Parse(orientation))
- {
- case 1:
- return RotateFlipType.RotateNoneFlipNone;
- case 2:
- return RotateFlipType.RotateNoneFlipX;
- case 3:
- return RotateFlipType.Rotate180FlipNone;
- case 4:
- return RotateFlipType.Rotate180FlipX;
- case 5:
- return RotateFlipType.Rotate90FlipX;
- case 6:
- return RotateFlipType.Rotate90FlipNone;
- case 7:
- return RotateFlipType.Rotate270FlipX;
- case 8:
- return RotateFlipType.Rotate270FlipNone;
- default:
- return RotateFlipType.RotateNoneFlipNone;
- }
- }
-
- private static byte[] ReadFully(Stream pStream)
- {
- using(var memStream = new MemoryStream())
- {
- pStream.CopyTo(memStream);
- return memStream.ToArray();
- }
- }
-
private HttpRequestMessage _HttpRequest;
private async void SendMediaMessage(string pMessage, long pGroupId, byte[] pMediaFile)
@@ -927,15 +731,14 @@ namespace ChatController.HauptKlassen
{
var contextMenu = new ContextMenu();
- System.Windows.Controls.MenuItem item1 = new System.Windows.Controls.MenuItem();
- System.Windows.Controls.MenuItem item2 = new System.Windows.Controls.MenuItem();
- System.Windows.Controls.MenuItem item3 = new System.Windows.Controls.MenuItem();
+ var item1 = new System.Windows.Controls.MenuItem();
+ var item2 = new System.Windows.Controls.MenuItem();
+ var item3 = new System.Windows.Controls.MenuItem();
contextMenu.Items.Add(item1);
contextMenu.Items.Add(item2);
contextMenu.Items.Add(item3);
-
item1.Header = "Speichern unter";
item1.Visibility = Visibility.Visible;
@@ -948,15 +751,15 @@ namespace ChatController.HauptKlassen
return contextMenu;
}
- public void SpeichernUnterFunkion(ChatMessage pChatMessage)
+ public void SaveFileAs(ChatMessage pChatMessage)
{
if (pChatMessage.ImageSources != null)
{
- SpeichernUnter(1, Path.GetFileName(pChatMessage.OriginalImage), DownloadMediaDatei(pChatMessage.OriginalImage));
+ SaveAs(1, Path.GetFileName(pChatMessage.OriginalImage), DownloadMediaFile(pChatMessage.OriginalImage));
}
}
- private static byte[] DownloadMediaDatei(string pFilePath)
+ private static byte[] DownloadMediaFile(string pFilePath)
{
byte[] mediaFile = null;
@@ -977,7 +780,7 @@ namespace ChatController.HauptKlassen
return mediaFile;
}
- private static void SpeichernUnter(int pFilterType, string pFileName, byte[] pMediaFile)
+ private static void SaveAs(int pFilterType, string pFileName, byte[] pMediaFile)
{
try
{
@@ -1017,7 +820,7 @@ namespace ChatController.HauptKlassen
}
}
- public void Einfuegen(long pGroupOid, ChatMainControl pChatMainControl)
+ public void Paste(long pGroupOid, ChatMainControl pChatMainControl)
{
var dataObject = Clipboard.GetDataObject();
@@ -1038,7 +841,7 @@ namespace ChatController.HauptKlassen
var mediaFile = File.ReadAllBytes(fileList[0]);
- AddMediumContextDerNachrichtView(mediaFile, fileName);
+ AddMediumContextDerNachrichtView(mediaFile, fileName, pGroupOid);
CollectionViewSource.GetDefaultView(pChatMainControl.ChatListBox.ItemsSource).Refresh();
@@ -1060,7 +863,7 @@ namespace ChatController.HauptKlassen
{
var text = (string) dataObject.GetData(DataFormats.StringFormat);
- AddeNachrichtDerView(text);
+ AddNewMessage(text, pGroupOid);
CollectionViewSource.GetDefaultView(pChatMainControl.ChatListBox.ItemsSource).Refresh();
@@ -1073,18 +876,18 @@ namespace ChatController.HauptKlassen
{
var bitmap = (Bitmap) dataObject.GetData(DataFormats.Bitmap);
- var imageName = GenerateTempName() + ".jpg";
+ var imageName = Utils.GenerateTempName() + ".jpg";
System.Drawing.Image image = bitmap;
- AddMediumContextDerNachrichtView(ImageToByteArray(image), imageName);
+ AddMediumContextDerNachrichtView(Utils.ImageToByteArray(image), imageName, pGroupOid);
CollectionViewSource.GetDefaultView(pChatMainControl.ChatListBox.ItemsSource).Refresh();
pChatMainControl.ChatListBox.Items.MoveCurrentToLast();
pChatMainControl.ChatListBox.ScrollIntoView(pChatMainControl.ChatListBox.Items.CurrentItem);
- SendMediaMessage(imageName, pGroupOid, ImageToByteArray(image));
+ SendMediaMessage(imageName, pGroupOid, Utils.ImageToByteArray(image));
}
else
{
@@ -1093,35 +896,7 @@ namespace ChatController.HauptKlassen
}
}
- public static byte[] ImageToByteArray(System.Drawing.Image pImage)
- {
- try
- {
- using (var memoryStream = new MemoryStream())
- {
- pImage.Save(memoryStream, ImageFormat.Bmp);
- return memoryStream.ToArray();
- }
- }
- catch (Exception e)
- {
- MessageBox.Show("Fehler: " + e.Message, "Fehler", MessageBoxButton.OK);
- return null;
- }
- }
-
- private static string GenerateTempName()
- {
- const int length = 6;
- const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
- var random = new Random();
-
- var tempName = new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray());
-
- return tempName;
- }
-
- public void Kopieren(object pData, int pDataType)
+ public void Copy(object pData, int pDataType)
{
switch(pDataType)
{
@@ -1137,7 +912,7 @@ namespace ChatController.HauptKlassen
}
}
- public void ShowProfilePicture(AktuellerKontakt pCurrentContact)
+ public void ShowProfilePicture(CurrentContact pCurrentContact)
{
try
{
@@ -1219,7 +994,7 @@ namespace ChatController.HauptKlassen
bitmap.SetPropertyItem(item);
}
- var flipType = OrientationToFlipType(orient.ToString());
+ var flipType = Utils.OrientationToFlipType(orient.ToString());
bitmap.RotateFlip(flipType);
@@ -1299,7 +1074,7 @@ namespace ChatController.HauptKlassen
return false;
}
}
- catch (Exception e)
+ catch (Exception exception)
{
MessageBox.Show("Die Verbindung konnte nicht aufgebaut werden.", "Fehler ", MessageBoxButton.OK);
return false;
@@ -1335,11 +1110,11 @@ namespace ChatController.HauptKlassen
}
}
- public ChatGruppenDaten GruppenAktuallisieren()
+ public ChatGruppenDaten UpdateGroups()
{
try
{
- var endurl = ChatDaten.ServerUrl + "/api/chat/groups";
+ var endurl = ChatDaten.ServerUrl + Constants.GetChatGroupsUrl;
var request = WebRequest.Create(endurl);
@@ -1353,13 +1128,7 @@ namespace ChatController.HauptKlassen
response.Close();
- if (!string.IsNullOrEmpty(serverResponse))
- {
- var jsonDaten = JsonConvert.DeserializeObject(serverResponse);
-
- return jsonDaten;
- }
- return null;
+ return !string.IsNullOrEmpty(serverResponse) ? JsonConvert.DeserializeObject(serverResponse) : null;
}
catch (Exception e)
{
@@ -1375,45 +1144,7 @@ namespace ChatController.HauptKlassen
_Contacts.Clear();
foreach (var contact in chatDaten.Response)
{
- foreach (var value in contact.Value)
- {
- var message = "";
- var timestamp = new DateTime();
-
- var lastMessage = value.LastMessage;
-
- if (lastMessage?.Text != null)
- {
- message = lastMessage.Text;
- timestamp = DateTime.Parse(lastMessage.Timestamp.Date);
- }
-
- if (string.IsNullOrEmpty(message) && value.LastMessage != null && !string.IsNullOrEmpty(value.LastMessage.File))
- {
- message = Path.GetFileName(value.LastMessage.File);
- }
-
- long? customerOid = null;
- var isEmployee = false;
-
- foreach (var user in value.Users)
- {
- if (user.Oid != ChatDaten.Userid && !string.IsNullOrEmpty(user.Userid_Manage))
- {
- if (!user.Is_Employee)
- {
- customerOid = long.Parse(user.Userid_Manage.Substring(1));
- }
- }
- }
-
- if (value.OnlyEmployees && value.Users.Length == 2)
- {
- isEmployee = true;
- }
-
- _Contacts.Add(new Contact(value.Name, Utils.AvatarToImageSourceConverter(value.Avatar, isEmployee), message, timestamp, value.Oid, customerOid, value.OnlyEmployees, value.Users.Length));
- }
+ _Contacts.AddRange(GenerateContactsFromServerResponse(contact.Value));
}
return _Contacts.OrderByDescending(r => r.TimeStamp);
@@ -1425,58 +1156,51 @@ namespace ChatController.HauptKlassen
}
}
- public Dictionary PruefeTimeStampsBeiStart(List kontaktliste)
+ public Dictionary CheckTimeStampsAtStart(List pContacts)
{
try
{
- if (File.Exists(Path.Combine(GetAndCreateUserAppDataPath(), "ownChatMessageSync.txt")))
+ if (File.Exists(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFileName)))
{
- Dictionary merkdaten = new Dictionary();
+ var syncData = new Dictionary();
- using (StreamReader sr = new StreamReader(Path.Combine(GetAndCreateUserAppDataPath(), "ownChatMessageSync.txt"), true))
+ using (var streamReader = new StreamReader(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFileName), true))
{
- string line = "";
+ string line;
- while ((line = sr.ReadLine()) != null)
+ while ((line = streamReader.ReadLine()) != null)
{
var encodedTextBytes = Convert.FromBase64String(line);
- string plainText = Encoding.UTF8.GetString(encodedTextBytes);
+ var plainText = Encoding.UTF8.GetString(encodedTextBytes);
- var plainarray = plainText.Split(';');
+ var splitPlainText = plainText.Split(';');
- merkdaten.Add(plainarray[0], plainarray[1]);
+ syncData.Add(splitPlainText[0], splitPlainText[1]);
}
}
- Dictionary rueckgabe = new Dictionary();
+ var result = new Dictionary();
- foreach (var kontakt in kontaktliste)
+ foreach (var contact in pContacts)
{
- foreach (var daten in merkdaten)
+ foreach (var data in syncData)
{
- var groupoid = Int32.Parse(daten.Key);
+ var groupoid = int.Parse(data.Key);
- if (kontakt.GroupId == groupoid)
+ if (contact.GroupId == groupoid)
{
- var datetime = DateTime.Parse(daten.Value);
+ var datetime = DateTime.Parse(data.Value);
- if (kontakt.TimeStamp.Equals(datetime))
+ if (contact.TimeStamp.Equals(datetime))
{
- rueckgabe.Add(groupoid,datetime);
+ result.Add(groupoid, datetime);
}
}
}
}
- if (rueckgabe.Count > 0)
- {
- return rueckgabe;
- }
- else
- {
- return null;
- }
+ return result.Count > 0 ? result : null;
}
return null;
@@ -1487,90 +1211,119 @@ namespace ChatController.HauptKlassen
}
}
- public void SpeichereTimeStampsInDatei( List kontaktliste )
+ public void SaveTimeStampsToFile(List pContacts)
{
try
{
- if (!File.Exists(Path.Combine(GetAndCreateUserAppDataPath(), "ownChatMessageSync.txt")))
+ if(File.Exists(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFileName)))
{
- using (
- StreamWriter sw =
- new StreamWriter(Path.Combine(GetAndCreateUserAppDataPath(), "ownChatMessageSync.txt")))
+ File.SetAttributes(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFileName), FileAttributes.Normal);
+ File.Delete(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFileName));
+ }
+
+ using (var streamWriter = new StreamWriter(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFileName)))
+ {
+ Encoding enc = new UTF8Encoding();
+
+ foreach (var contact in pContacts)
{
+ var text = contact.GroupId + ";" + contact.TimeStamp+";";
+ var bytes = enc.GetBytes(text);
+ var base64String = Convert.ToBase64String(bytes);
- Encoding enc = new UTF8Encoding();
-
- foreach (var kontakt in kontaktliste)
- {
- var text = kontakt.GroupId + ";" + kontakt.TimeStamp+";";
- var byt = enc.GetBytes(text);
- var bytes = Convert.ToBase64String(byt);
-
- sw.WriteLine(bytes);
- }
-
- File.SetAttributes(Path.Combine(GetAndCreateUserAppDataPath(), "ownChatMessageSync.txt"),
- FileAttributes.ReadOnly);
+ streamWriter.WriteLine(base64String);
}
+
+ File.SetAttributes(Path.Combine(Utils.GetAndCreateUserAppDataPath(), Resource.SyncFileName), FileAttributes.ReadOnly);
+ }
+ }
+ catch (Exception exception)
+ {
+
+ }
+ }
+
+ public List GenerateContactsFromServerResponse(GroupInput[] pGroupInputs, bool pShouldUpdateLastTimeStamp = false)
+ {
+ var contacts = new List();
+
+ foreach(var groupInput in pGroupInputs)
+ {
+ var messageText = string.Empty;
+ var formattedTime = new DateTime();
+
+ var latestMessage = groupInput.LastMessage;
+
+ if(latestMessage?.Text != null)
+ {
+ messageText = latestMessage.Text;
+
+ var timeStamp = DateTime.Parse(latestMessage.Timestamp.Date);
+ var clientZone = TimeZoneInfo.Local;
+
+ formattedTime = TimeZoneInfo.ConvertTimeFromUtc(timeStamp, clientZone);
+ }
+
+ if(string.IsNullOrEmpty(messageText) && !string.IsNullOrEmpty(groupInput.LastMessage?.File))
+ {
+ messageText = Path.GetFileName(groupInput.LastMessage.File);
+ }
+
+ string userIdManage = null;
+
+ foreach(var user in groupInput.Users)
+ {
+ if(user.Oid != ChatDaten.Userid)
+ {
+ if(!user.Is_Employee && !string.IsNullOrEmpty(user.Userid_Manage))
+ {
+ userIdManage = user.Userid_Manage;
+ }
+ }
+ }
+
+ var avatar = Utils.AvatarToImageSourceConverter(groupInput.Avatar, groupInput.OnlyEmployees, groupInput.Users.Length > 2);
+
+ contacts.Add(new Contact(groupInput.Name, avatar, messageText, formattedTime, groupInput.Oid, userIdManage, groupInput.OnlyEmployees, groupInput.Users.Length));
+
+ if(pShouldUpdateLastTimeStamp)
+ {
+ if(latestMessage?.Timestamp?.Date != null)
+ {
+ var unixTimeStamp = DateTime.Parse(latestMessage.Timestamp.Date).GetUnixTimeStamp();
+
+ if(LastTimeStamp < unixTimeStamp)
+ {
+ LastTimeStamp = unixTimeStamp;
+ }
+ }
+ }
+ }
+
+ return contacts;
+ }
+
+ public void AddMessagesFromServerResponse(Messages[] pMessages)
+ {
+ foreach (var message in pMessages)
+ {
+ var time = DateTime.Parse(message.Timestamp.Date);
+ var clientZone = TimeZoneInfo.Local;
+ var formattedTime = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone);
+ var isLoggedInUsersMessage = ChatDaten.Userid != null && message.UserId == ChatDaten.Userid.Value;
+ var messageText = message.Text ?? (string.IsNullOrEmpty(message.File) ? string.Empty : message.Original_Filename);
+
+ if (!string.IsNullOrEmpty(message.File))
+ {
+ Messages.Add(Constants.ImageFileExtensions.Contains(Path.GetExtension(message.File).ToUpperInvariant()) ?
+ new ChatMessage(message.User_Name, messageText, formattedTime, isLoggedInUsersMessage, DownloadImage(message.Smaller_Image), message.File, message.Original_Filename, message.GroupId) :
+ new ChatMessage(message.User_Name, messageText, formattedTime, message.Smaller_Image, isLoggedInUsersMessage, message.File, message.GroupId));
}
else
{
- File.SetAttributes(Path.Combine(GetAndCreateUserAppDataPath(), "ownChatMessageSync.txt"), FileAttributes.Normal);
- File.Delete(Path.Combine(GetAndCreateUserAppDataPath(), "ownChatMessageSync.txt"));
-
- using (
- StreamWriter sw = new StreamWriter(Path.Combine(GetAndCreateUserAppDataPath(), "ownChatMessageSync.txt")))
- {
-
- Encoding enc = new UTF8Encoding();
-
- foreach (var kontakt in kontaktliste)
- {
- var text = kontakt.GroupId + ";" + kontakt.TimeStamp + ";";
- var byt = enc.GetBytes(text);
- var bytes = Convert.ToBase64String(byt);
-
- sw.WriteLine(bytes);
- }
-
- File.SetAttributes(Path.Combine(GetAndCreateUserAppDataPath(), "ownChatMessageSync.txt"),
- FileAttributes.ReadOnly);
- }
+ Messages.Add(new ChatMessage(message.User_Name, message.Text, formattedTime, isLoggedInUsersMessage, message.GroupId));
}
}
- catch (Exception e)
- {
-
- }
- }
-
- private static string GetAndCreateUserAppDataPath()
- {
- try
- {
- string localAppData = Environment.GetFolderPath(
- Environment.SpecialFolder.LocalApplicationData);
- string companyFilePath
- = Path.Combine(localAppData, "beyondSoft");
-
- if (!Directory.Exists(companyFilePath))
- Directory.CreateDirectory(companyFilePath);
-
- string bewoFilePath
- = Path.Combine(companyFilePath, "OwnChat");
-
- if (!Directory.Exists(bewoFilePath))
- Directory.CreateDirectory(bewoFilePath);
-
- return bewoFilePath;
- }
- catch (Exception ex)
- {
- MessageBox.Show(
- "Fehler beim Anlegen des Anwendungsordners. Sie besitzen nicht die erforderlichen Rechte, bitte wenden Sie sich an Ihren Systemadministrator.\n" +
- ex.Message, "BeWoPlaner", MessageBoxButton.OK, MessageBoxImage.Exclamation);
- }
- return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
}
}
}
diff --git a/ChatController/HauptKlassen/Login.cs b/ChatController/HauptKlassen/Login.cs
index 3f9d882..464bad2 100644
--- a/ChatController/HauptKlassen/Login.cs
+++ b/ChatController/HauptKlassen/Login.cs
@@ -5,8 +5,6 @@ using System.Net;
using System.Text;
using System.Web;
using System.Windows;
-
-using ChatController.Klassen;
using ChatController.LoginKlassen;
using ChatController.Utilities;
@@ -34,7 +32,7 @@ namespace ChatController.HauptKlassen
private bool _ownchatVerbindungsaufbauOK;
private bool _gruppeholenverbindungsaufbauOK;
- private AuthentifizierungsDaten _serverconect;
+ private AuthenticationData _serverconect;
private UserDaten _LoggedInUser;
private ChatGruppenDaten _AllGroups;
@@ -46,10 +44,10 @@ namespace ChatController.HauptKlassen
_ChatCode = pChatCode;
_UserName = pUserName;
_Password = pPassword;
- _ApiKey = "0000";//default damit nichts kaput geht
+ _ApiKey = "0000";//default, damit nichts kaputt geht
}
- public Login(string pTenant, string pChatCode, string pUserName, string pPassword,string pApiKey)
+ public Login(string pTenant, string pChatCode, string pUserName, string pPassword, string pApiKey)
{
_Tenant = pTenant;
_ChatCode = pChatCode;
@@ -69,31 +67,33 @@ namespace ChatController.HauptKlassen
public ChatDatenUebergabe AnmeldevorgangDurchFuehren()
{
if(ServerErmittlung()){
- Dictionary dic = new Dictionary();
+ var dic = new Dictionary
+ {
+ {"username", _UserName},
+ { "password", _Password},
+ { "chatcode", _ChatCode}
+ };
- dic.Add("username", _UserName);
- dic.Add("password", _Password);
- dic.Add("chatcode",_ChatCode);
-
- VerbindeMitChatServer(dic);
+ VerbindeMitChatServer(dic);
- if (_ownchatVerbindungsaufbauOK)
- {
- GetGroups();
- }
+ if (_ownchatVerbindungsaufbauOK)
+ {
+ GetGroups();
+ }
- if (_gruppeholenverbindungsaufbauOK)
- {
+ if (_gruppeholenverbindungsaufbauOK)
+ {
- long maxUploadSize = GetMaiximumAllowedFileUploadSize(_AuthToken,_Tenant);
+ var maxUploadSize = GetMaiximumAllowedFileUploadSize(_AuthToken,_Tenant);
- ChatDatenUebergabe ubergabe = new ChatDatenUebergabe(_serverconect, _LoggedInUser, _AllGroups, ServerUrl, _AuthToken, _UserId, _Tenant,_ApiKey, maxUploadSize);
+ var ubergabe = new ChatDatenUebergabe(_serverconect, _LoggedInUser, _AllGroups, ServerUrl, _AuthToken, _UserId, _Tenant,_ApiKey, maxUploadSize);
- return ubergabe;
- }
- }
- return null;
+ return ubergabe;
+ }
+ }
+
+ return null;
}
public bool ServerErmittlung()
@@ -128,7 +128,7 @@ namespace ChatController.HauptKlassen
try
{
- var jsonDatentyp = JsonConvert.DeserializeObject(responseFromServer);
+ var jsonDatentyp = JsonConvert.DeserializeObject(responseFromServer);
switch(jsonDatentyp.Status)
{
@@ -154,7 +154,7 @@ namespace ChatController.HauptKlassen
{
try
{
- var jsonDatentyp = JsonConvert.DeserializeObject(responseFromServer);
+ var jsonDatentyp = JsonConvert.DeserializeObject(responseFromServer);
switch(jsonDatentyp.Status)
{
diff --git a/ChatController/LoginControl.xaml b/ChatController/LoginControl.xaml
index 1e6724e..9f0a4c9 100644
--- a/ChatController/LoginControl.xaml
+++ b/ChatController/LoginControl.xaml
@@ -3,7 +3,6 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:local="clr-namespace:ChatController"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
@@ -23,8 +22,6 @@
-
-
diff --git a/ChatController/LoginControl.xaml.cs b/ChatController/LoginControl.xaml.cs
index e981a6d..7e018be 100644
--- a/ChatController/LoginControl.xaml.cs
+++ b/ChatController/LoginControl.xaml.cs
@@ -9,7 +9,6 @@ using System.Windows;
using System.Windows.Input;
using ChatController.HauptKlassen;
-using ChatController.Klassen;
using ChatController.LoginKlassen;
using Newtonsoft.Json;
@@ -448,8 +447,11 @@ namespace ChatController
}
}
#endregion
-
+
+
+ public void Login()
+ {
+ Anmelden();
+ }
}
-
-
}
diff --git a/ChatController/LoginKlassen/AuthenticationData.cs b/ChatController/LoginKlassen/AuthenticationData.cs
index 69bd617..99c53e2 100644
--- a/ChatController/LoginKlassen/AuthenticationData.cs
+++ b/ChatController/LoginKlassen/AuthenticationData.cs
@@ -1,18 +1,18 @@
namespace ChatController.LoginKlassen
{
- public class AuthentifizierungsDaten
+ public class AuthenticationData
{
public string CustomerId { get; set; }
public string ServerName { get; set; }
}
- public class NewAuthentifizierungsDatenTyp1
+ public class AuthenticationDataType1
{
public int Status { get; set; }
public string Url { get; set; }
}
- public class NewAuthentifizierungsDatenTyp2
+ public class AuthenticationDataType2
{
public int Status { get; set; }
public string Url { get; set; }
diff --git a/ChatController/LoginKlassen/ChatDatenUebergabe.cs b/ChatController/LoginKlassen/ChatDatenUebergabe.cs
index 1c6b06f..3e64c0c 100644
--- a/ChatController/LoginKlassen/ChatDatenUebergabe.cs
+++ b/ChatController/LoginKlassen/ChatDatenUebergabe.cs
@@ -2,7 +2,7 @@
{
public class ChatDatenUebergabe
{
- private AuthentifizierungsDaten _serverconect { get; }
+ private AuthenticationData _serverconect { get; }
private UserDaten _angemeldeterUser { get; }
private ChatGruppenDaten _alleGruppen { get; }
@@ -13,7 +13,7 @@
private string _ApiKey { get; }
private long _MaxUploadSize { get; }
- public ChatDatenUebergabe(AuthentifizierungsDaten serverConect, UserDaten angemeldeterUser, ChatGruppenDaten alleGruppen, string serverUrl, string authToken, long? userid, string kundennummer, string apikey,long maxUploadSize)
+ public ChatDatenUebergabe(AuthenticationData serverConect, UserDaten angemeldeterUser, ChatGruppenDaten alleGruppen, string serverUrl, string authToken, long? userid, string kundennummer, string apikey,long maxUploadSize)
{
_serverconect = serverConect;
_angemeldeterUser = angemeldeterUser;
@@ -27,7 +27,7 @@
_MaxUploadSize = maxUploadSize;
}
- public AuthentifizierungsDaten Serverconect => _serverconect;
+ public AuthenticationData Serverconect => _serverconect;
public UserDaten AngemeldeterUser => _angemeldeterUser;
diff --git a/ChatController/LoginKlassen/ChatGruppenDaten.cs b/ChatController/LoginKlassen/ChatGruppenDaten.cs
index ec51124..bf726a6 100644
--- a/ChatController/LoginKlassen/ChatGruppenDaten.cs
+++ b/ChatController/LoginKlassen/ChatGruppenDaten.cs
@@ -12,7 +12,7 @@ namespace ChatController.LoginKlassen
public class GroupInput
{
- public long Oid { get; set; }
+ public int Oid { get; set; }
public string Name { get; set; }
public string Avatar { get; set; }
public string Mobile { get; set; }
diff --git a/ChatController/LoginKlassen/UserMessages.cs b/ChatController/LoginKlassen/UserMessages.cs
index 6fc873b..a8848ee 100644
--- a/ChatController/LoginKlassen/UserMessages.cs
+++ b/ChatController/LoginKlassen/UserMessages.cs
@@ -10,7 +10,7 @@
public class UserMessageInput
{
- public string currentPage { get; set; }
+ public string CurrentPage { get; set; }
public bool HasMorePages { get; set; }
public string NextPage { get; set; }
public int PerPage { get; set; }
diff --git a/ChatController/Utilities/Constants.cs b/ChatController/Utilities/Constants.cs
index 0e3453b..1ef15ea 100644
--- a/ChatController/Utilities/Constants.cs
+++ b/ChatController/Utilities/Constants.cs
@@ -23,10 +23,6 @@ namespace ChatController.Utilities
public static readonly string UrlPageParameter = "&page=";
- public static readonly string ConfigFile = "ownChat.txt";
- public static readonly string CompanyName = "beyondSoft";
- public static readonly string ApplicationFolderName = "OwnChat";
-
public static readonly int NotificationTimeout = 1500;
}
}
diff --git a/ChatController/Utilities/Utils.cs b/ChatController/Utilities/Utils.cs
index 322a7ed..75ad089 100644
--- a/ChatController/Utilities/Utils.cs
+++ b/ChatController/Utilities/Utils.cs
@@ -2,20 +2,26 @@
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
+using System.Linq;
using System.Net;
-using System.Windows.Forms;
+using System.Reflection;
+using System.Runtime.InteropServices;
+using System.Windows;
+using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
+using MessageBox = System.Windows.MessageBox;
+using PixelFormat = System.Drawing.Imaging.PixelFormat;
namespace ChatController.Utilities
{
public class Utils
{
- public static NotifyIcon NotifyIcon = new NotifyIcon {Icon = Resource.ownchat_favicon, Visible = true};
+ public static DateTime DefaultDate = new DateTime(1,1,1);
- public static ImageSource AvatarToImageSourceConverter(string pAvatarPath, bool pIsEmployee)
+ public static ImageSource AvatarToImageSourceConverter(string pAvatarPath, bool pIsEmployee, bool pIsGroup)
{
- return CreateImageSourceFromPath(pAvatarPath, false, pIsEmployee);
+ return CreateImageSourceFromPath(pAvatarPath, pIsGroup, pIsEmployee);
}
public static ImageSource CreateChatGroupPictureImageSource(string pPicturePath, bool pIsGroup, bool pIsEmployee)
@@ -145,5 +151,172 @@ namespace ChatController.Utilities
return responseFromServer;
}
+
+ public static string GetAndCreateUserAppDataPath()
+ {
+ try
+ {
+ var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
+ var companyFilePath = Path.Combine(localAppData, Resource.CompanyName);
+
+ if (!Directory.Exists(companyFilePath))
+ {
+ Directory.CreateDirectory(companyFilePath);
+ }
+
+ var bewoFilePath = Path.Combine(companyFilePath, Resource.ApplicationFolderName);
+
+ if (!Directory.Exists(bewoFilePath))
+ {
+ Directory.CreateDirectory(bewoFilePath);
+ }
+
+ return bewoFilePath;
+ }
+ catch (Exception exception)
+ {
+ MessageBox.Show("Fehler beim Anlegen des Anwendungsordners. Sie besitzen nicht die erforderlichen Rechte, bitte wenden Sie sich an Ihren Systemadministrator.\n" + exception.Message, "BeWoPlaner", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ }
+
+ return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+ }
+
+ public static string GenerateTempName()
+ {
+ const int length = 6;
+ const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+ var random = new Random();
+
+ var tempName = new string(Enumerable.Repeat(chars, length).Select(s => s[random.Next(s.Length)]).ToArray());
+
+ return tempName;
+ }
+
+ public static byte[] ImageToByteArray(Image pImage)
+ {
+ try
+ {
+ using (var memoryStream = new MemoryStream())
+ {
+ pImage.Save(memoryStream, ImageFormat.Bmp);
+ return memoryStream.ToArray();
+ }
+ }
+ catch (Exception e)
+ {
+ MessageBox.Show("Fehler: " + e.Message, "Fehler", MessageBoxButton.OK);
+ return null;
+ }
+ }
+
+ public static ImageSource GetImageSourceFromIcon(Icon pIcon)
+ {
+ var bitmap = new Bitmap(pIcon.Width, pIcon.Height);
+
+ var graphics = Graphics.FromImage(bitmap);
+
+ graphics.DrawIcon(pIcon, 0, 0);
+
+ graphics.Dispose();
+
+
+ bitmap.Save("icon.ico", ImageFormat.Icon);
+
+ var imageSource = ImageSourceForBitmap(bitmap);
+
+ bitmap.Dispose();
+
+ return imageSource;
+ }
+
+ [DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ public static extern bool DeleteObject([In] IntPtr hObject);
+
+ public static ImageSource ImageSourceForBitmap(Bitmap bmp)
+ {
+ var handle = bmp.GetHbitmap();
+
+ try
+ {
+ return Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
+ }
+ finally
+ {
+ DeleteObject(handle);
+ }
+ }
+
+ public static Icon ImageSourceToIcon(ImageSource pImageSource)
+ {
+ var bitmapSource = (BitmapSource) pImageSource;
+
+ var width = bitmapSource.PixelWidth;
+ var height = bitmapSource.PixelHeight;
+
+ var newWidth = width;
+ var newHeight = height;
+
+ var x = 0;
+ var y = 0;
+
+ if(width < height)
+ {
+ newHeight = width;
+ y = (height - width) / 2;
+ }
+ else
+ {
+ newWidth = height;
+ x = (width - height) / 2;
+ }
+
+ var stride = width * ((bitmapSource.Format.BitsPerPixel + 7) / 8);
+ var memoryBlockPointer = Marshal.AllocHGlobal(height * stride);
+
+ bitmapSource.CopyPixels(new Int32Rect(x, y, newWidth, newHeight), memoryBlockPointer, newHeight * stride, stride);
+
+ var bitmap = new Bitmap(newWidth, newHeight, stride, PixelFormat.Format32bppPArgb, memoryBlockPointer);
+
+ return Icon.FromHandle(bitmap.GetHicon());
+ }
+
+ public static DateTime FromUnixTimeStamp(long pUnixTimeStamp)
+ {
+ return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddSeconds(pUnixTimeStamp);
+ }
+ public static byte[] ReadFully(Stream pStream)
+ {
+ using (var memStream = new MemoryStream())
+ {
+ pStream.CopyTo(memStream);
+ return memStream.ToArray();
+ }
+ }
+
+ public static RotateFlipType OrientationToFlipType(string orientation)
+ {
+ switch (int.Parse(orientation))
+ {
+ case 1:
+ return RotateFlipType.RotateNoneFlipNone;
+ case 2:
+ return RotateFlipType.RotateNoneFlipX;
+ case 3:
+ return RotateFlipType.Rotate180FlipNone;
+ case 4:
+ return RotateFlipType.Rotate180FlipX;
+ case 5:
+ return RotateFlipType.Rotate90FlipX;
+ case 6:
+ return RotateFlipType.Rotate90FlipNone;
+ case 7:
+ return RotateFlipType.Rotate270FlipX;
+ case 8:
+ return RotateFlipType.Rotate270FlipNone;
+ default:
+ return RotateFlipType.RotateNoneFlipNone;
+ }
+ }
}
}
diff --git a/PrototypChat/LoginMaske.xaml b/PrototypChat/LoginMaske.xaml
index 4e6e989..db4b659 100644
--- a/PrototypChat/LoginMaske.xaml
+++ b/PrototypChat/LoginMaske.xaml
@@ -6,8 +6,8 @@
Icon="pack://application:,,,/ChatController;component/Ressourcen/ownchat_icon.png"
xmlns:cc="clr-namespace:ChatController;assembly=ChatController"
mc:Ignorable="d" WindowStartupLocation="CenterScreen" ResizeMode="NoResize"
- Title="ownChat Desktop" Height="500" Width="700" >
+ Title="ownChat Desktop" Height="500" Width="700" KeyDown="LoginMaske_OnKeyDown">
-
+
diff --git a/PrototypChat/LoginMaske.xaml.cs b/PrototypChat/LoginMaske.xaml.cs
index f31d2a6..ade8f5e 100644
--- a/PrototypChat/LoginMaske.xaml.cs
+++ b/PrototypChat/LoginMaske.xaml.cs
@@ -1,4 +1,6 @@
-using ChatController.LoginKlassen;
+using System.Windows.Input;
+using ChatController;
+using ChatController.LoginKlassen;
namespace ownChat
{
@@ -17,5 +19,10 @@ namespace ownChat
mainWindow.Show();
Close();
}
+
+ private void LoginMaske_OnKeyDown(object sender, KeyEventArgs e)
+ {
+ LoginControl.Login();
+ }
}
}
diff --git a/PrototypChat/MainWindow.xaml b/PrototypChat/MainWindow.xaml
index b5e3d42..537e0cb 100644
--- a/PrototypChat/MainWindow.xaml
+++ b/PrototypChat/MainWindow.xaml
@@ -7,6 +7,6 @@
mc:Ignorable="d" WindowStartupLocation="CenterScreen" Icon="pack://application:,,,/ChatController;component/Ressourcen/ownchat_icon.png"
Title="ownChat Desktop" Height="700" Width="900" x:Name="MainView" Closed="MainWindow_OnClosed">
-
+
diff --git a/PrototypChat/MainWindow.xaml.cs b/PrototypChat/MainWindow.xaml.cs
index 23de1fe..6339f11 100644
--- a/PrototypChat/MainWindow.xaml.cs
+++ b/PrototypChat/MainWindow.xaml.cs
@@ -15,7 +15,9 @@ namespace ownChat
public MainWindow(ChatDatenUebergabe x)
{
InitializeComponent();
-
+
+ ChatMainControl.ContainingWindow = this;
+
ChatMainControl.InitMitChatdaten(x);
ChatMainControl.ResetStyle();
@@ -38,13 +40,8 @@ namespace ownChat
private void MainWindow_OnClosed(object sender, EventArgs e)
{
- ChatMainControl.SpeichereMessageInfoInDatei();
- Environment.Exit(0);
- }
-
- private void ChatMainControl_OnOnClose()
- {
- ChatMainControl.SpeichereMessageInfoInDatei();
+ ChatMainControl.WriteToNewSyncFile();
+ ChatMainControl.ClearNotifications();
Environment.Exit(0);
}
}
diff --git a/PrototypChat/PrototypChat.csproj b/PrototypChat/PrototypChat.csproj
index 9913243..996a09c 100644
--- a/PrototypChat/PrototypChat.csproj
+++ b/PrototypChat/PrototypChat.csproj
@@ -126,6 +126,7 @@
+
Code