1233 lines
43 KiB
C#
1233 lines
43 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Http;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Web;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Data;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using ChatController.ChatKlassen;
|
|
using ChatController.Klassen;
|
|
using Newtonsoft.Json;
|
|
using ContextMenu = System.Windows.Controls.ContextMenu;
|
|
using DataFormats = System.Windows.Forms.DataFormats;
|
|
using Image = System.Windows.Controls.Image;
|
|
using MenuItem = System.Windows.Forms.MenuItem;
|
|
using Size = System.Drawing.Size;
|
|
|
|
namespace ChatController.HauptKlassen
|
|
{
|
|
public class Chat
|
|
{
|
|
private readonly List<KontaktlistBuilder> Kontaktliste = new List<KontaktlistBuilder>();
|
|
private readonly List<KontaktMessageBuilder> Messages = new List<KontaktMessageBuilder>();
|
|
|
|
public ChatDatenUebergabe ChatDaten;
|
|
|
|
private UserMessages _userMessages;
|
|
private UserMessages _weitereUserMessages;
|
|
|
|
private string _nextPage = null;
|
|
private bool _hasNextPage = false;
|
|
|
|
public Chat(ChatDatenUebergabe chatDaten)
|
|
{
|
|
ChatDaten = chatDaten;
|
|
}
|
|
|
|
#region Gruppen In Kontaktliste Wandler
|
|
public IOrderedEnumerable<KontaktlistBuilder> GroupklassenInChatKontakteUmwandler()
|
|
{
|
|
foreach (var kontakt in ChatDaten.Groupconect.Response)
|
|
{
|
|
foreach (var value in kontakt.Value)
|
|
{
|
|
string message = "";
|
|
DateTime timestamp = new DateTime();
|
|
|
|
var lastMS = value.LastMessage;
|
|
|
|
if (lastMS != null)
|
|
{
|
|
if (lastMS.Text != null)
|
|
{
|
|
message = lastMS.Text;
|
|
timestamp = DateTime.Parse(lastMS.Timestamp.Date);
|
|
}
|
|
}
|
|
//null steht für employee
|
|
Kontaktliste.Add(new KontaktlistBuilder(value.Name, AvatarToImageSourceConverter(value.Avatar),
|
|
message, timestamp, value.Oid, null));
|
|
}
|
|
}
|
|
|
|
|
|
var sortedKontaktliste = Kontaktliste.OrderByDescending(r => r.TimeStamp);
|
|
|
|
return sortedKontaktliste;
|
|
|
|
|
|
//Search Bereich
|
|
//CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(Clientlist.ItemsSource);
|
|
//view.SortDescriptions.Add(new SortDescription("TimeStamp", ListSortDirection.Descending));
|
|
//// view.SortDescriptions.Add(new SortDescription("StatusType", ListSortDirection.Descending));
|
|
//view.Filter = UserFilter;
|
|
}
|
|
|
|
private ImageSource AvatarToImageSourceConverter(string avatar)
|
|
{
|
|
if (!avatar.Equals(""))
|
|
{
|
|
try
|
|
{
|
|
Bitmap bitmap;
|
|
var request = WebRequest.Create(avatar);
|
|
using (var response = request.GetResponse())
|
|
using (var stream = response.GetResponseStream())
|
|
{
|
|
bitmap = new Bitmap(stream);
|
|
}
|
|
|
|
MemoryStream ms = new MemoryStream();
|
|
bitmap.Save(ms, ImageFormat.Png);
|
|
ms.Position = 0;
|
|
BitmapImage bi = new BitmapImage();
|
|
bi.BeginInit();
|
|
bi.StreamSource = ms;
|
|
bi.EndInit();
|
|
|
|
return bi;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
BitmapImage bix = new BitmapImage();
|
|
bix.BeginInit();
|
|
bix.UriSource = new Uri ("pack://application:,,,/ChatController;component/Ressourcen/mitarbeiter-avatar.png");
|
|
bix.EndInit();
|
|
return bix;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Lade Nachrichten vom Kontakt in den Chat
|
|
public IOrderedEnumerable<KontaktMessageBuilder> LadeChatNachrichtenVomKontakt(AktuellerKontakt kontakt)
|
|
{
|
|
if (kontakt != null)
|
|
{
|
|
HoleNachrichtenVomServer(kontakt.GroupId);
|
|
Messages.Clear();
|
|
|
|
foreach (var ChatMessage in _userMessages.Response.Messages)
|
|
{
|
|
if (ChatMessage.UserId == ChatDaten.Userid.Value)
|
|
{
|
|
//var timeformated = DateTime.Parse(ChatMessage.Timestamp.Date);
|
|
|
|
var time = DateTime.Parse(ChatMessage.Timestamp.Date);
|
|
var clientZone = TimeZoneInfo.Local;
|
|
var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone);
|
|
|
|
|
|
if (!ChatMessage.File.Equals("")) // Bilder werden Sichtbar
|
|
{
|
|
//bool isGif = false;
|
|
|
|
//if (ChatMessage.File.Contains(".gif"))
|
|
//{
|
|
// isGif = true;
|
|
//}
|
|
|
|
Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text,
|
|
timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, LadeBildNach(ChatMessage.File),
|
|
timeformated));
|
|
|
|
}
|
|
else
|
|
{
|
|
Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text,
|
|
timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, timeformated));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//var timeformated = DateTime.Parse(ChatMessage.Timestamp.Date);
|
|
|
|
var time = DateTime.Parse(ChatMessage.Timestamp.Date);
|
|
var clientZone = TimeZoneInfo.Local;
|
|
var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone);
|
|
|
|
if (!ChatMessage.File.Equals("")) // Bilder werden Sichtbar
|
|
{
|
|
//bool isGif = false;
|
|
//if (ChatMessage.File.Contains(".gif"))
|
|
//{
|
|
// isGif = true;
|
|
//}
|
|
|
|
Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text,
|
|
timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, LadeBildNach(ChatMessage.File),
|
|
timeformated));
|
|
}
|
|
else
|
|
{
|
|
Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text,
|
|
timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, timeformated));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
var x = Messages.OrderBy(r => r.ConvertetSendtimeString);
|
|
|
|
return x;
|
|
}
|
|
else
|
|
{
|
|
return Messages.OrderBy(r => r.ConvertetSendtimeString);
|
|
}
|
|
}
|
|
|
|
private ImageSource LadeBildNach(string link)
|
|
{
|
|
try
|
|
{
|
|
BitmapImage bix = new BitmapImage();
|
|
bix.BeginInit();
|
|
bix.UriSource = new Uri(link);
|
|
bix.EndInit();
|
|
return bix;
|
|
}
|
|
catch (Exception edf)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private void HoleNachrichtenVomServer(long groupId)
|
|
{
|
|
try
|
|
{
|
|
var endurl = ChatDaten.ServerUrl + "/api/chat/messages?groupid=" + groupId;
|
|
|
|
WebRequest request = WebRequest.Create(endurl);
|
|
|
|
request.Credentials = CredentialCache.DefaultCredentials;
|
|
request.Headers["Token"] = ChatDaten.AuthToken;
|
|
request.Headers["CustomerID"] = ChatDaten.Kundennummer;
|
|
request.Proxy = null;
|
|
|
|
// Get the response.
|
|
WebResponse response = request.GetResponse();
|
|
|
|
// Display the status.
|
|
var statusResponse = ((HttpWebResponse)response).StatusDescription;
|
|
|
|
|
|
string responseFromServer = ReadStream(response);
|
|
|
|
//verarbeite hier zu json
|
|
if (!responseFromServer.Equals(""))
|
|
{
|
|
_userMessages = null;
|
|
//################# Deserialisierung mit Json ###############################
|
|
var jsonDaten = JsonConvert.DeserializeObject<UserMessages>(responseFromServer);
|
|
|
|
_userMessages = jsonDaten;
|
|
|
|
if (_userMessages.Response.HasMorePages == true)
|
|
{
|
|
_nextPage = _userMessages.Response.NextPage;
|
|
_hasNextPage = true;
|
|
}
|
|
else
|
|
{
|
|
_hasNextPage = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// MessageBox.Show("Keine Daten Vorhanden.");
|
|
}
|
|
|
|
response.Close();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
// MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK);
|
|
}
|
|
|
|
}
|
|
|
|
private string ReadStream(WebResponse response)
|
|
{
|
|
try
|
|
{
|
|
Stream dataStream = response.GetResponseStream();
|
|
|
|
StreamReader reader = new StreamReader(dataStream);
|
|
|
|
string responseFromServer = reader.ReadToEnd();
|
|
|
|
|
|
dataStream.Dispose();
|
|
reader.Dispose();
|
|
|
|
dataStream.Close();
|
|
reader.Close();
|
|
|
|
return responseFromServer;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
// MessageBox.Show(e.Message);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Verbesserung der LadeNachricht nach senden einer Nachricht
|
|
|
|
//public IOrderedEnumerable<KontaktMessageBuilder> LadeNeueNachrichtUndFuegeDieseHinzu(KontaktlistBuilder kontakt)
|
|
//{
|
|
// if (kontakt != null)
|
|
// {
|
|
// var neue = HoleNachrichtFV(kontakt.GroupId);
|
|
// //Messages.Clear();
|
|
|
|
// foreach (var neueMessage in neue.Response.Messages)
|
|
// {
|
|
// if (!_userMessages.Response.Messages.Contains(neueMessage))
|
|
// {
|
|
// if (neueMessage.UserId == ChatDaten.Userid.Value)
|
|
// {
|
|
// var time = DateTime.Parse(neueMessage.Timestamp.Date);
|
|
// var clientZone = TimeZoneInfo.Local;
|
|
// var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone);
|
|
|
|
|
|
// if (!neueMessage.File.Equals("")) // Bilder werden Sichtbar
|
|
// {
|
|
// Messages.Add(new KontaktMessageBuilder(neueMessage.User_Name, neueMessage.Text,
|
|
// timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, LadeBildNach(neueMessage.File),
|
|
// timeformated));
|
|
|
|
// }
|
|
// else
|
|
// {
|
|
// Messages.Add(new KontaktMessageBuilder(neueMessage.User_Name, neueMessage.Text,
|
|
// timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, timeformated));
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// var time = DateTime.Parse(neueMessage.Timestamp.Date);
|
|
// var clientZone = TimeZoneInfo.Local;
|
|
// var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone);
|
|
|
|
// if (!neueMessage.File.Equals("")) // Bilder werden Sichtbar
|
|
// {
|
|
// Messages.Add(new KontaktMessageBuilder(neueMessage.User_Name, neueMessage.Text,
|
|
// timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, LadeBildNach(neueMessage.File),
|
|
// timeformated));
|
|
// }
|
|
// else
|
|
// {
|
|
// Messages.Add(new KontaktMessageBuilder(neueMessage.User_Name, neueMessage.Text,
|
|
// timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, timeformated));
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
// var x = Messages.OrderBy(r => r.ConvertetSendtimeString);
|
|
|
|
// return x;
|
|
// }
|
|
// else
|
|
// {
|
|
// return Messages.OrderBy(r => r.ConvertetSendtimeString);
|
|
// }
|
|
|
|
//}
|
|
|
|
//private UserMessages HoleNachrichtFV(long groupId)
|
|
//{
|
|
// try
|
|
// {
|
|
// var endurl = ChatDaten.ServerUrl + "/api/chat/messages?groupid=" + groupId;
|
|
|
|
// WebRequest request = WebRequest.Create(endurl);
|
|
|
|
// request.Credentials = CredentialCache.DefaultCredentials;
|
|
// request.Headers["Token"] = ChatDaten.AuthToken;
|
|
// request.Headers["CustomerID"] = ChatDaten.Kundennummer;
|
|
// request.Proxy = null;
|
|
|
|
// // Get the response.
|
|
// WebResponse response = request.GetResponse();
|
|
|
|
// // Display the status.
|
|
// var statusResponse = ((HttpWebResponse)response).StatusDescription;
|
|
|
|
|
|
// string responseFromServer = ReadStream(response);
|
|
|
|
// UserMessages jsonDaten = null;
|
|
// //verarbeite hier zu json
|
|
// if (!responseFromServer.Equals(""))
|
|
// {
|
|
// // _userMessages = null;
|
|
// //################# Deserialisierung mit Json ###############################
|
|
// jsonDaten = JsonConvert.DeserializeObject<UserMessages>(responseFromServer);
|
|
|
|
// //_userMessages = jsonDaten;
|
|
|
|
// //if (_userMessages.Response.HasMorePages == true)
|
|
// //{
|
|
// // _nextPage = _userMessages.Response.NextPage;
|
|
// // _hasNextPage = true;
|
|
// //}
|
|
// //else
|
|
// //{
|
|
// // _hasNextPage = false;
|
|
// //}
|
|
// }
|
|
// else
|
|
// {
|
|
// // MessageBox.Show("Keine Daten Vorhanden.");
|
|
// }
|
|
|
|
// response.Close();
|
|
|
|
// return jsonDaten;
|
|
// }
|
|
// catch (Exception e)
|
|
// {
|
|
// return null;
|
|
// }
|
|
//}
|
|
|
|
#endregion
|
|
|
|
#region Lade Weiter Nachrichten
|
|
|
|
public IOrderedEnumerable<KontaktMessageBuilder> LadeWeiterNachrichten(KontaktlistBuilder kontakt)
|
|
{
|
|
if (_hasNextPage == true)
|
|
{
|
|
HoleWeitereNachrichtenVomServer(kontakt.GroupId, _nextPage);
|
|
|
|
foreach (var ChatMessage in _weitereUserMessages.Response.Messages)
|
|
{
|
|
if (ChatMessage.UserId == ChatDaten.Userid.Value)
|
|
{
|
|
//var timeformated = DateTime.Parse(ChatMessage.Timestamp.Date);
|
|
|
|
var time = DateTime.Parse(ChatMessage.Timestamp.Date);
|
|
var clientZone = TimeZoneInfo.Local;
|
|
var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone);
|
|
|
|
|
|
if (!ChatMessage.File.Equals("")) // Bilder werden Sichtbar
|
|
{
|
|
//bool isGif = false;
|
|
|
|
//if (ChatMessage.File.Contains(".gif"))
|
|
//{
|
|
// isGif = true;
|
|
//}
|
|
|
|
Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text,
|
|
timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, LadeBildNach(ChatMessage.File), timeformated));
|
|
|
|
}
|
|
else
|
|
{
|
|
Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text,
|
|
timeformated.ToString("dd MMMM yyyy HH:mm:ss"), true, timeformated));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//var timeformated = DateTime.Parse(ChatMessage.Timestamp.Date);
|
|
|
|
var time = DateTime.Parse(ChatMessage.Timestamp.Date);
|
|
var clientZone = TimeZoneInfo.Local;
|
|
var timeformated = TimeZoneInfo.ConvertTimeFromUtc(time, clientZone);
|
|
|
|
if (!ChatMessage.File.Equals("")) // Bilder werden Sichtbar
|
|
{
|
|
//bool isGif = false;
|
|
//if (ChatMessage.File.Contains(".gif"))
|
|
//{
|
|
// isGif = true;
|
|
//}
|
|
|
|
Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text,
|
|
timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, LadeBildNach(ChatMessage.File), timeformated));
|
|
}
|
|
else
|
|
{
|
|
Messages.Add(new KontaktMessageBuilder(ChatMessage.User_Name, ChatMessage.Text,
|
|
timeformated.ToString("dd MMMM yyyy HH:mm:ss"), false, timeformated));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
var x = Messages.OrderBy(r => r.ConvertetSendtimeString);
|
|
|
|
return x;
|
|
}
|
|
|
|
private void HoleWeitereNachrichtenVomServer(long groupId,string page)
|
|
{
|
|
try
|
|
{
|
|
var pa = page.Split('=');
|
|
var endurl = ChatDaten.ServerUrl + "/api/chat/messages?groupid=" + groupId+"&page="+pa[1];
|
|
|
|
WebRequest request = WebRequest.Create(endurl);
|
|
|
|
request.Credentials = CredentialCache.DefaultCredentials;
|
|
request.Headers["Token"] = ChatDaten.AuthToken;
|
|
request.Headers["CustomerID"] = ChatDaten.Kundennummer;
|
|
request.Proxy = null;
|
|
|
|
// Get the response.
|
|
WebResponse response = request.GetResponse();
|
|
|
|
// Display the status.
|
|
var statusResponse = ((HttpWebResponse)response).StatusDescription;
|
|
|
|
|
|
string responseFromServer = ReadStream(response);
|
|
|
|
//verarbeite hier zu json
|
|
if (!responseFromServer.Equals(""))
|
|
{
|
|
_weitereUserMessages = null;
|
|
//################# Deserialisierung mit Json ###############################
|
|
var jsonDaten = JsonConvert.DeserializeObject<UserMessages>(responseFromServer);
|
|
|
|
_weitereUserMessages = jsonDaten;
|
|
|
|
if (_weitereUserMessages.Response.HasMorePages == true) //neu
|
|
{
|
|
_nextPage = _weitereUserMessages.Response.NextPage;
|
|
_hasNextPage = true;
|
|
}
|
|
else
|
|
{
|
|
_hasNextPage = false;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
// MessageBox.Show("Keine Daten Vorhanden.");
|
|
}
|
|
|
|
response.Close();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
// MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Prüfe ob Neue Nachrichten vorhanden sind
|
|
|
|
private double? _oldMessageCount;
|
|
|
|
public bool SchaueNachNeuenNachrichten(AktuellerKontakt kontakt)
|
|
{
|
|
TimeSpan lastTs = DateTime.UtcNow.TimeOfDay;
|
|
|
|
double timespan = lastTs.TotalSeconds;
|
|
|
|
if (_userMessages != null && _userMessages.Response.Messages.Length > 0)
|
|
{
|
|
timespan = _userMessages.Response.Messages.First().CreatetdAt;
|
|
}
|
|
|
|
if (kontakt != null)
|
|
{
|
|
var newMsCount = SendeTimestamp(kontakt.GroupId, timespan);
|
|
|
|
if (_oldMessageCount == null)
|
|
{
|
|
_oldMessageCount = newMsCount;
|
|
}
|
|
|
|
if (newMsCount.Value == _oldMessageCount.Value)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
_oldMessageCount = newMsCount;
|
|
return true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private double? SendeTimestamp(long groupId,double lastStamp)
|
|
{
|
|
try
|
|
{
|
|
var endurl = ChatDaten.ServerUrl + "/api/ownchat/news/" + groupId+"/"+lastStamp;
|
|
|
|
WebRequest request = WebRequest.Create(endurl);
|
|
|
|
request.Credentials = CredentialCache.DefaultCredentials;
|
|
request.Headers["Token"] = ChatDaten.AuthToken;
|
|
request.Headers["CustomerID"] = ChatDaten.Kundennummer;
|
|
request.Proxy = null;
|
|
|
|
// Get the response.
|
|
WebResponse response = request.GetResponse();
|
|
|
|
// Display the status.
|
|
var statusResponse = ((HttpWebResponse)response).StatusDescription;
|
|
|
|
|
|
string responseFromServer = ReadStream(response);
|
|
|
|
var jsonDaten = JsonConvert.DeserializeObject<MessageCounter>(responseFromServer);
|
|
|
|
return jsonDaten.MessageCount;
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Prüfe für alle ob neue Nachrichten vorhanden sind
|
|
|
|
public double SchaueNachAllenMessageCounts()
|
|
{
|
|
TimeSpan lastTs = DateTime.UtcNow.TimeOfDay;
|
|
|
|
double timespan = lastTs.TotalSeconds;
|
|
|
|
var x = SendeTimestampForEach(0, timespan);
|
|
|
|
|
|
return x;
|
|
}
|
|
|
|
private double SendeTimestampForEach(long groupId, double lastStamp)
|
|
{
|
|
try
|
|
{
|
|
var endurl = ChatDaten.ServerUrl + "/api/ownchat/news/" + groupId + "/" + lastStamp;
|
|
|
|
WebRequest request = WebRequest.Create(endurl);
|
|
|
|
request.Credentials = CredentialCache.DefaultCredentials;
|
|
request.Headers["Token"] = ChatDaten.AuthToken;
|
|
request.Headers["CustomerID"] = ChatDaten.Kundennummer;
|
|
((HttpWebRequest) request).KeepAlive = false;
|
|
|
|
// Get the response.
|
|
WebResponse response = request.GetResponse();
|
|
|
|
// Display the status.
|
|
var statusResponse = ((HttpWebResponse)response).StatusDescription;
|
|
|
|
|
|
string responseFromServer = ReadStream(response);
|
|
|
|
var jsonDaten = JsonConvert.DeserializeObject<MessageCounter>(responseFromServer);
|
|
|
|
return jsonDaten.MessageCount;
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
public IOrderedEnumerable<KontaktlistBuilder> NeueGroupklassenKontakte()
|
|
{
|
|
List<KontaktlistBuilder> Kontakt = new List<KontaktlistBuilder>();
|
|
|
|
var daten = GruppenHolen();
|
|
|
|
foreach (var kontakt in daten.Response)
|
|
{
|
|
foreach (var value in kontakt.Value)
|
|
{
|
|
string message = "";
|
|
DateTime timestamp = new DateTime();
|
|
|
|
var lastMS = value.LastMessage;
|
|
|
|
if (lastMS != null)
|
|
{
|
|
if (lastMS.Text != null)
|
|
{
|
|
message = lastMS.Text;
|
|
timestamp = DateTime.Parse(lastMS.Timestamp.Date);
|
|
}
|
|
}
|
|
//null steht für employee
|
|
Kontakt.Add(new KontaktlistBuilder(value.Name, AvatarToImageSourceConverter(value.Avatar),
|
|
message, timestamp, value.Oid, null));
|
|
}
|
|
}
|
|
|
|
|
|
var sortedKontaktliste = Kontakt.OrderByDescending(r => r.TimeStamp);
|
|
|
|
return sortedKontaktliste;
|
|
|
|
|
|
//Search Bereich
|
|
//CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(Clientlist.ItemsSource);
|
|
//view.SortDescriptions.Add(new SortDescription("TimeStamp", ListSortDirection.Descending));
|
|
//// view.SortDescriptions.Add(new SortDescription("StatusType", ListSortDirection.Descending));
|
|
//view.Filter = UserFilter;
|
|
}
|
|
|
|
private ChatGruppenDaten GruppenHolen()
|
|
{
|
|
try
|
|
{
|
|
var endurl = ChatDaten.ServerUrl + "/api/chat/groups";
|
|
|
|
WebRequest request = WebRequest.Create(endurl);
|
|
|
|
request.Credentials = CredentialCache.DefaultCredentials;
|
|
request.Headers["Token"] = ChatDaten.AuthToken;
|
|
request.Headers["CustomerID"] = ChatDaten.Kundennummer;
|
|
//((HttpWebRequest) request).KeepAlive = false;
|
|
|
|
// Get the response.
|
|
WebResponse response = request.GetResponse();
|
|
|
|
// Display the status.
|
|
var statusResponse = ((HttpWebResponse)response).StatusDescription;
|
|
|
|
|
|
string responseFromServer = ReadStream(response);
|
|
|
|
//verarbeite hier zu json
|
|
//################# Deserialisierung mit Json ###############################
|
|
|
|
var jsonDaten = JsonConvert.DeserializeObject<ChatGruppenDaten>(responseFromServer);
|
|
|
|
|
|
response.Close();
|
|
|
|
|
|
return jsonDaten;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
// MessageBox.Show(e.Message, "Fehler", MessageBoxButton.OK);
|
|
return null;
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
|
|
#region Sende Normale Message an Kontakt
|
|
|
|
private HttpWebRequest requesten;
|
|
|
|
public async void SendMessage(string message, long groupId)
|
|
{
|
|
try
|
|
{
|
|
var endurl = ChatDaten.ServerUrl + "/api/chat/messages/send";
|
|
|
|
Dictionary<string, string> postparameter = new Dictionary<string, string>();
|
|
|
|
postparameter.Add("groupid", groupId + "");
|
|
postparameter.Add("text", message);
|
|
|
|
|
|
//Original
|
|
//string postdaten = "";
|
|
|
|
//foreach (var key in postparameter.Keys)
|
|
//{
|
|
// postdaten += HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(postparameter[key]) + "&";
|
|
//}
|
|
|
|
//requesten = (HttpWebRequest)WebRequest.Create(endurl);
|
|
|
|
//requesten.Method = "POST";
|
|
//requesten.Headers["Token"] = ChatDaten.AuthToken;
|
|
//requesten.Headers["CustomerID"] = ChatDaten.Kundennummer;
|
|
////requesten.KeepAlive = false;
|
|
|
|
|
|
//requesten.ContentType = "application/x-www-form-urlencoded";
|
|
|
|
//byte[] daten = Encoding.ASCII.GetBytes(postdaten);
|
|
|
|
//requesten.ContentLength = daten.Length;
|
|
|
|
//Stream requestStream = requesten.GetRequestStream();
|
|
|
|
//requestStream.Write(daten, 0, daten.Length);
|
|
|
|
//requestStream.Dispose();
|
|
|
|
//requestStream.Close();
|
|
|
|
//Original ende
|
|
|
|
//WebResponse myHttpWebResponse = requesten.GetResponse();
|
|
|
|
//string page = ReadStream(myHttpWebResponse);
|
|
|
|
//MessageBox.Show(page);
|
|
|
|
|
|
|
|
//########################## neuer versuch für bessere performance| hat geklappt #################################################
|
|
|
|
using (MultipartFormDataContent multiPartContent = new MultipartFormDataContent())
|
|
{
|
|
multiPartContent.Add(new StringContent(groupId + ""), "groupid");
|
|
multiPartContent.Add(new StringContent(message), "text");
|
|
|
|
Uri requestUri = new Uri(endurl);
|
|
|
|
HttpRequestMessage httpRequest = new HttpRequestMessage();
|
|
httpRequest.Method = HttpMethod.Post;
|
|
httpRequest.RequestUri = requestUri;
|
|
|
|
//wegen Kontent nachschauen
|
|
httpRequest.Content = multiPartContent;
|
|
|
|
httpRequest.Headers.Add("Token", ChatDaten.AuthToken);
|
|
httpRequest.Headers.Add("CustomerID", ChatDaten.Kundennummer);
|
|
|
|
|
|
HttpResponseMessage httpResponse = null;
|
|
|
|
HttpClient httpClient = new HttpClient();
|
|
//httpClient.Timeout = TimeSpan.FromSeconds(300);
|
|
httpResponse = await httpClient.SendAsync(httpRequest, CancellationToken.None).ConfigureAwait(false);
|
|
|
|
//string antwortResponse = await httpResponse.Content.ReadAsStringAsync();
|
|
|
|
}
|
|
//##################################################################################################################
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
// MessageBox.Show("Fehler: " + e.Message);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Sende Media Nachricht an Kontakt
|
|
|
|
public void HoleUndSendeMediumAnKontakt(AktuellerKontakt kontakt)
|
|
{
|
|
try
|
|
{
|
|
OpenFileDialog openFileDialog1 = new OpenFileDialog();
|
|
|
|
//if (typ == 1)
|
|
openFileDialog1.Filter = "Bilder |*.jpg;*.png;*.jpeg;*.jpe;*.gif;*.bmp";
|
|
//else
|
|
// openFileDialog1.Filter = "Office Dokumente |*.doc;*.xls;*.ppt;*.txt";
|
|
|
|
DialogResult result = openFileDialog1.ShowDialog();
|
|
|
|
if (result == System.Windows.Forms.DialogResult.OK)
|
|
{
|
|
VerarbeiteMedia(openFileDialog1.FileName,kontakt);
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
private void VerarbeiteMedia(string file,AktuellerKontakt kontakt)
|
|
{
|
|
byte[] mdatei;
|
|
using (Stream reader = File.OpenRead(file))
|
|
{
|
|
mdatei = ReadFully(reader);
|
|
}
|
|
|
|
string filename = Path.GetFileName(file);
|
|
|
|
SendMediaMessage(filename, kontakt.GroupId, mdatei);
|
|
|
|
//LoadKontakt();
|
|
}
|
|
|
|
private static byte[] ReadFully(Stream stream)
|
|
{
|
|
byte[] buffer = new byte[32768];
|
|
using (MemoryStream ms = new MemoryStream())
|
|
{
|
|
while (true)
|
|
{
|
|
int read = stream.Read(buffer, 0, buffer.Length);
|
|
if (read <= 0)
|
|
{
|
|
return ms.ToArray();
|
|
}
|
|
|
|
ms.Write(buffer, 0, read);
|
|
}
|
|
}
|
|
}
|
|
|
|
private HttpRequestMessage httpRequest;
|
|
|
|
private async void SendMediaMessage(string message, long groupId, byte[] mediaDatei)
|
|
{
|
|
try
|
|
{
|
|
#region test Multiplatform
|
|
using (MultipartFormDataContent multiPartContent = new MultipartFormDataContent())
|
|
{
|
|
Uri requestUri = new Uri(ChatDaten.ServerUrl + "/api/chat/messages/send");
|
|
|
|
multiPartContent.Add(new ByteArrayContent(mediaDatei, 0, mediaDatei.Count()), "file", message);
|
|
multiPartContent.Add(new StringContent(groupId + ""), "groupid");
|
|
|
|
httpRequest = new HttpRequestMessage();
|
|
httpRequest.Method = HttpMethod.Post;
|
|
httpRequest.RequestUri = requestUri;
|
|
httpRequest.Content = multiPartContent;
|
|
|
|
httpRequest.Headers.Add("Token", ChatDaten.AuthToken);
|
|
httpRequest.Headers.Add("CustomerID", ChatDaten.Kundennummer);
|
|
|
|
|
|
HttpResponseMessage httpResponse = null;
|
|
|
|
HttpClient httpClient = new HttpClient();
|
|
//httpClient.Timeout = TimeSpan.FromSeconds(300);
|
|
httpResponse = await httpClient.SendAsync(httpRequest, CancellationToken.None).ConfigureAwait(false);
|
|
|
|
|
|
string antwortResponse = await httpResponse.Content.ReadAsStringAsync();
|
|
|
|
//MessageBox.Show(antwortResponse);
|
|
}
|
|
#endregion
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Context Menue Für Chat inkl. Funktionen
|
|
public ContextMenu ErstelleKontextMenue()
|
|
{
|
|
ContextMenu context = new ContextMenu();
|
|
|
|
System.Windows.Controls.MenuItem item1 = new System.Windows.Controls.MenuItem();
|
|
System.Windows.Controls.MenuItem item2 = new System.Windows.Controls.MenuItem();
|
|
|
|
context.Items.Add(item1);
|
|
context.Items.Add(item2);
|
|
|
|
item1.Header = "Speichern unter";
|
|
item1.Visibility = Visibility.Visible;
|
|
|
|
item2.Header = "Einfügen";
|
|
item2.Visibility = Visibility.Visible;
|
|
|
|
//Image icon = new Image();
|
|
//icon.Source = new BitmapImage(new Uri(@"..\..\Ressource\ClipboardDisabled.png", UriKind.Relative));
|
|
//icon.Height = 16;
|
|
//icon.Width = 16;//(new Size(16, 16));
|
|
//item1.Icon = icon;
|
|
|
|
return context;
|
|
}
|
|
|
|
#region Speichere Chat Doku/MEdia aufm PC
|
|
public void SpeichernUnterFunkion(KontaktMessageBuilder item)
|
|
{
|
|
if (item.ImageSources != null)
|
|
{
|
|
string filename = item.ImageSources.ToString();
|
|
|
|
SpeichernUnter(1, filename,
|
|
DownloadMediaDatei(filename));
|
|
}
|
|
}
|
|
|
|
private byte[] DownloadMediaDatei(string pfad)
|
|
{
|
|
try
|
|
{
|
|
byte[] pic = null;
|
|
|
|
using (WebClient client = new WebClient())
|
|
{
|
|
pic = client.DownloadData(pfad);
|
|
}
|
|
|
|
return pic;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new Exception(e.Message);
|
|
}
|
|
}
|
|
|
|
private void SpeichernUnter(int filterTyp, string dateiname, byte[] datensatz)
|
|
{
|
|
try
|
|
{
|
|
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
|
|
|
|
saveFileDialog1.FileName = Path.GetFileName(dateiname);
|
|
|
|
if (filterTyp == 1) // Bilder
|
|
{
|
|
saveFileDialog1.Filter = "Bilder |*.jpg;*.png;*.jpeg;*.jpe;*.gif;*.bmp";
|
|
saveFileDialog1.Title = "Bild Speichern";
|
|
saveFileDialog1.ShowDialog();
|
|
}
|
|
|
|
if (filterTyp == 2) //Office
|
|
{
|
|
saveFileDialog1.Filter = "Office Dokumente |*.doc;*.xls;*.ppt;*.txt";
|
|
saveFileDialog1.Title = "Dokument Speichern";
|
|
saveFileDialog1.ShowDialog();
|
|
}
|
|
|
|
if (filterTyp == 3) // Audio
|
|
{
|
|
saveFileDialog1.Filter = "Audio Datei|*.wav;*.mp3;*.wma;*.aac;*.ogg;";
|
|
saveFileDialog1.Title = "Audio Speichern";
|
|
saveFileDialog1.ShowDialog();
|
|
}
|
|
|
|
if (saveFileDialog1.FileName != "")
|
|
{
|
|
FileStream fs = (FileStream)saveFileDialog1.OpenFile();
|
|
|
|
fs.Write(datensatz, 0, datensatz.Length);
|
|
|
|
fs.Close();
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
//throw fehler
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Fuege Daten Bilder usw via DragAndDrop in den Chat / muss noch bearbeitet werden
|
|
public void Einfuegen()
|
|
{
|
|
//var item = context.Items[2] as MenuItem;
|
|
|
|
//item.Visibility = Visibility.Collapsed;
|
|
//Chat.SelectionMode = SelectionMode.Single;
|
|
//Chat.Focusable = true;
|
|
|
|
var d = System.Windows.Forms.Clipboard.GetDataObject();
|
|
|
|
if (d.GetDataPresent(DataFormats.FileDrop))
|
|
{
|
|
string[] files = (String[])d.GetData(DataFormats.FileDrop);
|
|
|
|
string imgFileString = files[0];
|
|
|
|
|
|
//if (isAnImage(imgFileString))
|
|
//{
|
|
// ZeigeProgressWärendUpload(1, imgFileString);
|
|
//}
|
|
//else
|
|
//{
|
|
// ZeigeProgressWärendUpload(2, imgFileString);
|
|
//}
|
|
|
|
System.Windows.Forms.Clipboard.Clear();
|
|
}
|
|
else
|
|
{
|
|
if (d.GetDataPresent(DataFormats.Text))
|
|
{
|
|
string files = (String)d.GetData(DataFormats.Text);
|
|
|
|
string imgFileString = files;
|
|
|
|
try
|
|
{
|
|
byte[] data;
|
|
using (WebClient client = new WebClient())
|
|
{
|
|
data = client.DownloadData(imgFileString);
|
|
}
|
|
|
|
string filename = Path.GetFileName(imgFileString);
|
|
|
|
//string isloaded = LoadDokumentFromInet(data, filename);
|
|
|
|
//if (!isloaded.IsNullOrEmpty() && isAnImage(isloaded))
|
|
//{
|
|
// //ZeigeProgressWärendUpload(1, isloaded);
|
|
//}
|
|
//else
|
|
//{
|
|
// //ZeigeProgressWärendUpload(2, isloaded);
|
|
//}
|
|
|
|
System.Windows.Forms.Clipboard.Clear();
|
|
}
|
|
catch (Exception s)
|
|
{
|
|
//MessageBox.Show("Der Chat kann den Zwischen-Speicher nicht verarbeiten.", "Fehler",
|
|
// MessageBoxButton.OK);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (d.GetDataPresent(DataFormats.Bitmap))
|
|
{
|
|
Bitmap pic = (Bitmap)d.GetData(DataFormats.Bitmap);
|
|
|
|
var bildname = GeneriereZuffalsNamen() + ".jpg";
|
|
|
|
System.Drawing.Image img = pic;
|
|
|
|
//var data = Utils.CreateByteArrayFromImage(img);
|
|
|
|
//string isloaded = LoadDokumentFromInet(data, bildname);
|
|
|
|
//if (!isloaded.IsNullOrEmpty() && isAnImage(isloaded))
|
|
//{
|
|
// //ZeigeProgressWärendUpload(1, isloaded);
|
|
//}
|
|
//else
|
|
//{
|
|
// //ZeigeProgressWärendUpload(2, isloaded);
|
|
//}
|
|
|
|
System.Windows.Forms.Clipboard.Clear();
|
|
}
|
|
else
|
|
{
|
|
//MessageBox.Show("Der Chat kann den Zwischen-Speicher nicht verarbeiten.", "Fehler",
|
|
// MessageBoxButton.OK);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private string GeneriereZuffalsNamen()
|
|
{
|
|
int lenght = 6;
|
|
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
|
|
"abcdefghijklmnopqrstuvwxyz" +
|
|
"0123456789";
|
|
var random = new Random();
|
|
String Code = new string(Enumerable.Repeat(chars, lenght)
|
|
.Select(s => s[random.Next(s.Length)]).ToArray());
|
|
|
|
return Code;
|
|
}
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region Zeige Kontakt Bild / hat noch probleme
|
|
|
|
public void ShowKontaktPicture(AktuellerKontakt curItem )
|
|
{
|
|
using (Form form = new Form())
|
|
{
|
|
Image imgg = new Image();
|
|
|
|
imgg.Source = curItem.Image;
|
|
|
|
BmpBitmapEncoder encoder = new BmpBitmapEncoder();
|
|
MemoryStream ms = new MemoryStream();
|
|
encoder.Frames.Add(BitmapFrame.Create((BitmapSource)imgg.Source));
|
|
encoder.Save(ms);
|
|
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
|
|
|
|
Bitmap imgbit = new Bitmap(img);
|
|
|
|
form.StartPosition = FormStartPosition.CenterScreen;
|
|
form.Size = imgbit.Size;
|
|
form.FormBorderStyle = FormBorderStyle.Sizable;
|
|
|
|
PictureBox pb = new PictureBox();
|
|
pb.Dock = DockStyle.Fill;
|
|
pb.Image = imgbit;
|
|
|
|
pb.SizeMode = PictureBoxSizeMode.StretchImage;
|
|
|
|
|
|
form.Controls.Add(pb);
|
|
form.ShowDialog();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
}
|
|
}
|