diff --git a/Source/LibationWinForms/AvaloniaUI/ViewModels/GridEntryBindingList2.cs b/Source/LibationWinForms/AvaloniaUI/ViewModels/GridEntryBindingList2.cs index 8e7570b4..b2c42b57 100644 --- a/Source/LibationWinForms/AvaloniaUI/ViewModels/GridEntryBindingList2.cs +++ b/Source/LibationWinForms/AvaloniaUI/ViewModels/GridEntryBindingList2.cs @@ -1,12 +1,9 @@ using ApplicationServices; -using Dinah.Core.DataBinding; using LibationSearchEngine; -using LibationWinForms.GridView; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; -using System.ComponentModel; using System.Linq; namespace LibationWinForms.AvaloniaUI.ViewModels diff --git a/Source/LibationWinForms/AvaloniaUI/ViewModels/ProcessBook2.cs b/Source/LibationWinForms/AvaloniaUI/ViewModels/ProcessBook2.cs index 167523a3..97241615 100644 --- a/Source/LibationWinForms/AvaloniaUI/ViewModels/ProcessBook2.cs +++ b/Source/LibationWinForms/AvaloniaUI/ViewModels/ProcessBook2.cs @@ -70,7 +70,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels ProcessBookStatus.Cancelled => "Khaki", ProcessBookStatus.Completed => "PaleGreen", ProcessBookStatus.Failed => "LightCoral", - _ => string.Empty, + _ => "White", }; public string StatusText => Result switch { diff --git a/Source/LibationWinForms/AvaloniaUI/ViewModels/ProcessQueueViewModel.cs b/Source/LibationWinForms/AvaloniaUI/ViewModels/ProcessQueueViewModel.cs index 049968e7..1d610264 100644 --- a/Source/LibationWinForms/AvaloniaUI/ViewModels/ProcessQueueViewModel.cs +++ b/Source/LibationWinForms/AvaloniaUI/ViewModels/ProcessQueueViewModel.cs @@ -1,6 +1,7 @@ using ReactiveUI; using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,6 +10,8 @@ namespace LibationWinForms.AvaloniaUI.ViewModels { public class ProcessQueueViewModel : ViewModelBase { + + public string QueueHeader => "this is a header!"; private TrackedQueue2 _items = new(); public ProcessQueueViewModel() { } public TrackedQueue2 Items @@ -17,6 +20,17 @@ namespace LibationWinForms.AvaloniaUI.ViewModels set => this.RaiseAndSetIfChanged(ref _items, value); } + + public ObservableCollection LogEntries { get; } = new(); + public ProcessBook2 SelectedItem { get; set; } } + + public class LogEntry + { + public DateTime LogDate { get; init; } + public string LogDateString => LogDate.ToShortTimeString(); + public string LogMessage { get; init; } + } + } diff --git a/Source/LibationWinForms/AvaloniaUI/ViewModels/TrackedQueue2[T].cs b/Source/LibationWinForms/AvaloniaUI/ViewModels/TrackedQueue2[T].cs index f44f0130..1f2af103 100644 --- a/Source/LibationWinForms/AvaloniaUI/ViewModels/TrackedQueue2[T].cs +++ b/Source/LibationWinForms/AvaloniaUI/ViewModels/TrackedQueue2[T].cs @@ -10,7 +10,7 @@ namespace LibationWinForms.AvaloniaUI.ViewModels Fisrt, OneUp, OneDown, - Last + Last, } /* diff --git a/Source/LibationWinForms/AvaloniaUI/Views/ProcessBookControl2.axaml.cs b/Source/LibationWinForms/AvaloniaUI/Views/ProcessBookControl2.axaml.cs index 9519374d..5b0869d8 100644 --- a/Source/LibationWinForms/AvaloniaUI/Views/ProcessBookControl2.axaml.cs +++ b/Source/LibationWinForms/AvaloniaUI/Views/ProcessBookControl2.axaml.cs @@ -1,22 +1,17 @@ using Avalonia; +using System; using Avalonia.Controls; using Avalonia.Markup.Xaml; using LibationWinForms.AvaloniaUI.ViewModels; namespace LibationWinForms.AvaloniaUI.Views { - public enum QueueButton - { - Cancel, - MoveFirst, - MoveUp, - MoveDown, - MoveLast - } - public delegate void QueueItemButtonClicked(ProcessBook2 item, QueueButton queueButton); + public delegate void QueueItemPositionButtonClicked(ProcessBook2 item, QueuePosition queueButton); + public delegate void QueueItemCancelButtonClicked(ProcessBook2 item); public partial class ProcessBookControl2 : UserControl { - public static event QueueItemButtonClicked ButtonClicked; + public static event QueueItemPositionButtonClicked PositionButtonClicked; + public static event QueueItemCancelButtonClicked CancelButtonClicked; public ProcessBookControl2() { InitializeComponent(); @@ -25,15 +20,15 @@ namespace LibationWinForms.AvaloniaUI.Views private ProcessBook2 DataItem => DataContext is null ? null : DataContext as ProcessBook2; public void Cancel_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) - => ButtonClicked?.Invoke(DataItem, QueueButton.Cancel); + => CancelButtonClicked?.Invoke(DataItem); public void MoveFirst_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) - => ButtonClicked?.Invoke(DataItem, QueueButton.MoveFirst); + => PositionButtonClicked?.Invoke(DataItem, QueuePosition.Fisrt); public void MoveUp_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) - => ButtonClicked?.Invoke(DataItem, QueueButton.MoveUp); + => PositionButtonClicked?.Invoke(DataItem, QueuePosition.OneUp); public void MoveDown_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) - => ButtonClicked?.Invoke(DataItem, QueueButton.MoveDown); + => PositionButtonClicked?.Invoke(DataItem, QueuePosition.OneDown); public void MoveLast_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) - => ButtonClicked?.Invoke(DataItem, QueueButton.MoveLast); + => PositionButtonClicked?.Invoke(DataItem, QueuePosition.Last); private void InitializeComponent() { diff --git a/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml b/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml index f4cd64fe..0145e46b 100644 --- a/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml +++ b/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml @@ -1,5 +1,5 @@ - - + @@ -19,21 +19,66 @@ - + + + + + - Process Queue + Process Queue - - - - - - - + + + + + + + + + + + + + + + Queue Log + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml.cs b/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml.cs index 9760cfc4..e708737d 100644 --- a/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml.cs +++ b/Source/LibationWinForms/AvaloniaUI/Views/ProcessQueueControl2.axaml.cs @@ -7,6 +7,7 @@ using Avalonia.Threading; using LibationWinForms.AvaloniaUI.ViewModels; using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; @@ -65,7 +66,8 @@ namespace LibationWinForms.AvaloniaUI.Views _repeater.KeyDown += RepeaterOnKeyDown; DataContext = _viewModel = new ProcessQueueViewModel(); - ProcessBookControl2.ButtonClicked += ProcessBookControl2_ButtonClicked; + ProcessBookControl2.PositionButtonClicked += ProcessBookControl2_ButtonClicked; + ProcessBookControl2.CancelButtonClicked += ProcessBookControl2_CancelButtonClicked; queueNumberLbl_Icon = this.FindControl(nameof(queueNumberLbl_Icon)); errorNumberLbl_Icon = this.FindControl(nameof(errorNumberLbl_Icon)); @@ -99,29 +101,17 @@ namespace LibationWinForms.AvaloniaUI.Views AvaloniaXamlLoader.Load(this); } - private async void ProcessBookControl2_ButtonClicked(ProcessBook2 item, QueueButton queueButton) + private async void ProcessBookControl2_CancelButtonClicked(ProcessBook2 item) + { + if (item is not null) + await item.CancelAsync(); + Queue.RemoveQueued(item); + } + + private void ProcessBookControl2_ButtonClicked(ProcessBook2 item, QueuePosition queueButton) { - switch (queueButton) - { - case QueueButton.MoveFirst: - Queue.MoveQueuePosition(item, QueuePosition.Fisrt); - break; - case QueueButton.MoveUp: - Queue.MoveQueuePosition(item, QueuePosition.OneUp); - break; - case QueueButton.MoveDown: - Queue.MoveQueuePosition(item, QueuePosition.OneDown); - break; - case QueueButton.MoveLast: - Queue.MoveQueuePosition(item, QueuePosition.Last); - break; - case QueueButton.Cancel: - if (item is not null) - await item.CancelAsync(); - Queue.RemoveQueued(item); - break; - } - } + Queue.MoveQueuePosition(item, queueButton); + } private void RepeaterClick(object sender, PointerPressedEventArgs e) { @@ -154,6 +144,18 @@ namespace LibationWinForms.AvaloniaUI.Views runningTimeLbl.Text = string.Empty; } + public void ClearLogBtn_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) + { + _viewModel.LogEntries.Clear(); + } + + private void LogCopyBtn_Click(object sender, Avalonia.Interactivity.RoutedEventArgs e) + { + string logText = string.Join("\r\n", _viewModel.LogEntries.Select(r => $"{r.LogDate.ToShortDateString()} {r.LogDate.ToShortTimeString()}\t{r.LogMessage}")); + System.Windows.Forms.Clipboard.SetDataObject(logText, false, 5, 150); + } + + private bool isBookInQueue(DataLayer.LibraryBook libraryBook) => Queue.Any(b => b?.LibraryBook?.Book?.AudibleProductId == libraryBook.Book.AudibleProductId); @@ -267,7 +269,12 @@ namespace LibationWinForms.AvaloniaUI.Views public void WriteLine(string text) { - + Dispatcher.UIThread.Post(() => + _viewModel.LogEntries.Add(new() + { + LogDate = DateTime.Now, + LogMessage = text.Trim() + })); } #region Control event handlers diff --git a/Source/LibationWinForms/AvaloniaUI/Views/ProductsDisplay2.axaml b/Source/LibationWinForms/AvaloniaUI/Views/ProductsDisplay2.axaml index ed3449e4..e6b36885 100644 --- a/Source/LibationWinForms/AvaloniaUI/Views/ProductsDisplay2.axaml +++ b/Source/LibationWinForms/AvaloniaUI/Views/ProductsDisplay2.axaml @@ -13,7 +13,7 @@ - +