// 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(); } } }