// 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
{
///
/// Interaction logic for MessageSendStatusDialog.xaml
///
public partial class MessageSendStatusDialog : StatusWindowBase
{
private readonly Timer bgTimer;
private List _messages = new List();
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 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();
}
}
}