112 lines
3.6 KiB
C#
112 lines
3.6 KiB
C#
// Copyright (c) 2017- schick Informatik
|
|
// Description: Overview of messages currently in transmission
|
|
// 8/3/21: Diese Klasse wird wieder (aus der Verwendung) entfernt, da sie
|
|
// nach RS mit CH keinen Mehrwert im Workflow bringt.
|
|
//
|
|
|
|
using bsmd.database;
|
|
using ENI2.Controls;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Timers;
|
|
using System.Windows;
|
|
|
|
namespace ENI2.EditControls
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for MessageSendStatusDialog.xaml
|
|
/// </summary>
|
|
public partial class MessageSendStatusDialog : StatusWindowBase
|
|
{
|
|
private readonly Timer bgTimer;
|
|
private List<Message> _messages = new List<Message>();
|
|
private MessageCore _messageCore;
|
|
|
|
public MessageSendStatusDialog(MessageCore core)
|
|
{
|
|
InitializeComponent();
|
|
this.bgTimer = new Timer();
|
|
_messageCore = core;
|
|
|
|
this.bgTimer.Elapsed += BgTimer_Elapsed;
|
|
this.bgTimer.AutoReset = true;
|
|
this.bgTimer.Interval = Properties.Settings.Default.changeTimerTimeout;
|
|
}
|
|
|
|
public void AddMessages(List<Message> messages)
|
|
{
|
|
if (!messages.IsNullOrEmpty())
|
|
{
|
|
foreach (Message newMessage in messages)
|
|
{
|
|
if (!_messages.Contains(newMessage))
|
|
_messages.Add(newMessage);
|
|
}
|
|
this.RefreshGrid();
|
|
}
|
|
}
|
|
|
|
public event Action SendComplete;
|
|
|
|
private void RefreshGrid()
|
|
{
|
|
this.Dispatcher.Invoke(() =>
|
|
{
|
|
Util.UIHelper.SetMessageIcons(_messages);
|
|
this.dataGridMessages.ItemsSource = null;
|
|
this.dataGridMessages.ItemsSource = _messages;
|
|
});
|
|
}
|
|
|
|
private void BgTimer_Elapsed(object sender, ElapsedEventArgs e)
|
|
{
|
|
// check if a message has changed its status
|
|
bool updatedMessage = false;
|
|
bool finished = true;
|
|
System.Diagnostics.Trace.WriteLine(string.Format("Watching {0} messages.", _messages.Count));
|
|
|
|
for (int i = 0; i < _messages.Count; i++)
|
|
{
|
|
Message testMessage = (Message) DBManager.Instance.GetMessageById(_messages[i].Id.Value);
|
|
|
|
if(testMessage.Changed > _messages[i].Changed)
|
|
{
|
|
_messages[i] = testMessage; // replace Message in Array with "newer" Message
|
|
updatedMessage = true;
|
|
System.Diagnostics.Trace.WriteLine(string.Format("Updating {0} To status {1}", testMessage.Id, testMessage.InternalStatus));
|
|
}
|
|
|
|
finished &= (testMessage.InternalStatus != Message.BSMDStatus.TOSEND);
|
|
}
|
|
|
|
if (finished)
|
|
{
|
|
_messageCore.IsHighlighted = true;
|
|
this.OnSendComplete();
|
|
}
|
|
|
|
if(updatedMessage)
|
|
{
|
|
this.RefreshGrid();
|
|
}
|
|
}
|
|
|
|
private void StatusWindowBase_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
this.bgTimer.Start();
|
|
this.dataGridMessages.DataContext = _messages;
|
|
}
|
|
|
|
protected void OnSendComplete()
|
|
{
|
|
this.SendComplete?.Invoke();
|
|
}
|
|
|
|
private void StatusWindowBase_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
|
{
|
|
this.bgTimer.Stop();
|
|
this.bgTimer.Dispose();
|
|
}
|
|
}
|
|
}
|