diff options
| author | Roy <Roy.mail.net@gmail.com> | 2022-11-03 07:42:14 +0200 |
|---|---|---|
| committer | Roy <Roy.mail.net@gmail.com> | 2022-11-03 07:42:14 +0200 |
| commit | b93d7795c84da2e5317fd12d9a41cdd63fcb6659 (patch) | |
| tree | fc196de881ab7182912867686e4860eab9ec281b /Software/Visual_Studio/FSE | |
| parent | b461a5e1eb1f2fb72bcfdac94aa13d3f6485d401 (diff) | |
| download | Tango-b93d7795c84da2e5317fd12d9a41cdd63fcb6659.tar.gz Tango-b93d7795c84da2e5317fd12d9a41cdd63fcb6659.zip | |
Hot Folder Outbox View.
Diffstat (limited to 'Software/Visual_Studio/FSE')
5 files changed, 131 insertions, 27 deletions
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/HotFolder/HotFolderItem.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/HotFolder/HotFolderItem.cs index 7728c5466..9c8d24d05 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/HotFolder/HotFolderItem.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/HotFolder/HotFolderItem.cs @@ -22,19 +22,15 @@ namespace Tango.FSE.Common.HotFolder { _status = value; RaisePropertyChangedAuto(); - - if (_status != HotFolderItemStatus.Failed && _status != HotFolderItemStatus.CompletedWithError) - { - FailedMessage = null; - } + Message = Status.ToDescription(); } } - private String _failedMessage; - public String FailedMessage + private String _message; + public String Message { - get { return _failedMessage; } - set { _failedMessage = value; RaisePropertyChangedAuto(); } + get { return _message; } + set { _message = value; RaisePropertyChangedAuto(); } } public HotFolderItem() diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/HotFolder/IHotFolderService.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/HotFolder/IHotFolderService.cs index 1b3444990..c74fa9ac1 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.Common/HotFolder/IHotFolderService.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/HotFolder/IHotFolderService.cs @@ -4,14 +4,16 @@ using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.Core; namespace Tango.FSE.Common.HotFolder { public interface IHotFolderService { - ObservableCollection<HotFolderItem> Items { get; } + SynchronizedObservableCollection<HotFolderItem> Items { get; } bool Enabled { get; set; } bool IsActive { get; } String HotFolderPath { get; set; } + void RetryFailedItem(HotFolderItem item); } } diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Dialogs/HotFolderConfigurationView.xaml b/Software/Visual_Studio/FSE/Tango.FSE.UI/Dialogs/HotFolderConfigurationView.xaml index a7250a70f..be43b3218 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Dialogs/HotFolderConfigurationView.xaml +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Dialogs/HotFolderConfigurationView.xaml @@ -6,8 +6,9 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:material="http://materialdesigninxaml.net/winfx/xaml/themes" xmlns:local="clr-namespace:Tango.FSE.UI.Dialogs" + xmlns:hotFolder="clr-namespace:Tango.FSE.Common.HotFolder;assembly=Tango.FSE.Common" mc:Ignorable="d" - Width="600" Height="400" d:DataContext="{d:DesignInstance Type=local:HotFolderConfigurationViewVM, IsDesignTimeCreatable=False}" Background="{StaticResource FSE_PrimaryBackgroundLightBrush}" Foreground="{StaticResource FSE_PrimaryForegroundBrush}"> + Width="600" Height="500" d:DataContext="{d:DesignInstance Type=local:HotFolderConfigurationViewVM, IsDesignTimeCreatable=False}" Background="{StaticResource FSE_PrimaryBackgroundLightBrush}" Foreground="{StaticResource FSE_PrimaryForegroundBrush}"> <DockPanel Margin="10"> <StackPanel DockPanel.Dock="Top" Orientation="Horizontal"> @@ -34,17 +35,75 @@ </DockPanel> </StackPanel> - <Grid Margin="0 10 0 0"> - <ListBox ItemsSource="{Binding HotFolderService.Items}" Style="{StaticResource FSE_BlankListBox}" Background="{StaticResource FSE_Panel_BackgroundBrush}"> + <GroupBox Padding="4" Margin="0 10 0 0" Style="{StaticResource FSE_Game_GroupBox}"> + <GroupBox.Header> + <TextBlock>Outbox</TextBlock> + </GroupBox.Header> + + + <ListBox ItemsSource="{Binding HotFolderService.Items}" Background="{StaticResource FSE_Panel_BackgroundBrush}" HorizontalContentAlignment="Stretch"> <ListBox.ItemTemplate> <DataTemplate> - <Border Height="80" Background="{StaticResource FSE_PrimaryBackgroundBrush}"> - <TextBox Text="{Binding Name}"></TextBox> - </Border> + <DockPanel VerticalAlignment="Top" HorizontalAlignment="Stretch"> + <Grid> + <material:PackIcon Width="24"> + <material:PackIcon.Style> + <Style TargetType="material:PackIcon"> + <Setter Property="Visibility" Value="Visible"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding Status}" Value="{x:Static hotFolder:HotFolderItemStatus.Pending}"> + <Setter Property="Visibility" Value="Hidden"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Status}" Value="{x:Static hotFolder:HotFolderItemStatus.Uploading}"> + <Setter Property="Visibility" Value="Hidden"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Status}" Value="{x:Static hotFolder:HotFolderItemStatus.Completed}"> + <Setter Property="Kind" Value="Check"></Setter> + <Setter Property="Foreground" Value="{StaticResource FSE_SuccessBrush}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Status}" Value="{x:Static hotFolder:HotFolderItemStatus.Failed}"> + <Setter Property="Kind" Value="Alert"></Setter> + <Setter Property="Foreground" Value="{StaticResource FSE_ErrorBrush}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Status}" Value="{x:Static hotFolder:HotFolderItemStatus.CompletedWithError}"> + <Setter Property="Kind" Value="Alert"></Setter> + <Setter Property="Foreground" Value="{StaticResource FSE_WarningBrush}"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </material:PackIcon.Style> + </material:PackIcon> + <controls:ProgressRing IsIndeterminate="True" Maximum="100" Value="50" Width="18" Height="18"> + <controls:ProgressRing.Style> + <Style TargetType="controls:ProgressRing" BasedOn="{StaticResource {x:Type controls:ProgressRing}}"> + <Setter Property="Visibility" Value="Hidden"></Setter> + <Style.Triggers> + <DataTrigger Binding="{Binding Status}" Value="{x:Static hotFolder:HotFolderItemStatus.Pending}"> + <Setter Property="Visibility" Value="Visible"></Setter> + <Setter Property="Foreground" Value="{StaticResource FSE_GrayBrush}"></Setter> + </DataTrigger> + <DataTrigger Binding="{Binding Status}" Value="{x:Static hotFolder:HotFolderItemStatus.Uploading}"> + <Setter Property="Visibility" Value="Visible"></Setter> + </DataTrigger> + </Style.Triggers> + </Style> + </controls:ProgressRing.Style> + </controls:ProgressRing> + </Grid> + + <Button Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.RetryCommand}" CommandParameter="{Binding}" DockPanel.Dock="Right" Style="{StaticResource FSE_RaisedButton_Dark_Hover}" FontSize="{StaticResource FSE_SmallFontSize}" VerticalAlignment="Top" Visibility="{Binding Status,Converter={StaticResource EnumToVisibilityConverter},ConverterParameter='Failed'}"> + Retry + </Button> + + <StackPanel Margin="10 0 0 0" Orientation="Vertical"> + <TextBlock Text="{Binding Name}" FontSize="{StaticResource FSE_SmallFontSize}"></TextBlock> + <TextBlock FontSize="{StaticResource FSE_SmallerFontSize}" Foreground="{StaticResource FSE_GrayBrush}" Text="{Binding Message}" TextWrapping="Wrap" Margin="0 0 10 0"></TextBlock> + </StackPanel> + </DockPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> - </Grid> + </GroupBox> </DockPanel> </Grid> </DockPanel> diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/Dialogs/HotFolderConfigurationViewVM.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/Dialogs/HotFolderConfigurationViewVM.cs index de496533d..0a4da6855 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/Dialogs/HotFolderConfigurationViewVM.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/Dialogs/HotFolderConfigurationViewVM.cs @@ -22,6 +22,8 @@ namespace Tango.FSE.UI.Dialogs public RelayCommand BrowseHotFolderCommand { get; set; } + public RelayCommand<HotFolderItem> RetryCommand { get; set; } + public HotFolderConfigurationViewVM() { TangoIOC.Default.Inject(this); @@ -30,6 +32,12 @@ namespace Tango.FSE.UI.Dialogs CanCancel = false; BrowseHotFolderCommand = new RelayCommand(BrowseHotFolder); + RetryCommand = new RelayCommand<HotFolderItem>(RetryFailedItem); + } + + private void RetryFailedItem(HotFolderItem item) + { + HotFolderService.RetryFailedItem(item); } private async void BrowseHotFolder() diff --git a/Software/Visual_Studio/FSE/Tango.FSE.UI/HotFolder/DefaultHotFolderService.cs b/Software/Visual_Studio/FSE/Tango.FSE.UI/HotFolder/DefaultHotFolderService.cs index e6f7352bf..591d38249 100644 --- a/Software/Visual_Studio/FSE/Tango.FSE.UI/HotFolder/DefaultHotFolderService.cs +++ b/Software/Visual_Studio/FSE/Tango.FSE.UI/HotFolder/DefaultHotFolderService.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; +using Tango.Core; using Tango.Core.DI; using Tango.FSE.BL; using Tango.FSE.Common; @@ -58,11 +59,40 @@ namespace Tango.FSE.UI.HotFolder [TangoInject] private INotificationProvider NotificationProvider { get; set; } - public ObservableCollection<HotFolderItem> Items { get; private set; } + public SynchronizedObservableCollection<HotFolderItem> Items { get; private set; } public DefaultHotFolderService(IMachineProvider machineProvider) { - Items = new ObservableCollection<HotFolderItem>(); + Items = new SynchronizedObservableCollection<HotFolderItem>(); + + + bool testData = false; + + if (testData) + { + HotFolderItem item1 = new HotFolderItem("C:\\HotFolder\\file1.csv"); + item1.Status = HotFolderItemStatus.Pending; + Items.Add(item1); + + HotFolderItem item2 = new HotFolderItem("C:\\HotFolder\\file2.csv"); + item2.Status = HotFolderItemStatus.Uploading; + Items.Add(item2); + + HotFolderItem item3 = new HotFolderItem("C:\\HotFolder\\file3.csv"); + item3.Status = HotFolderItemStatus.Completed; + Items.Add(item3); + + HotFolderItem item4 = new HotFolderItem("C:\\HotFolder\\file4.csv"); + item4.Status = HotFolderItemStatus.Failed; + item4.Message = "Error some error with some message I don't know."; + Items.Add(item4); + + HotFolderItem item5 = new HotFolderItem("C:\\HotFolder\\file5.csv"); + item5.Status = HotFolderItemStatus.CompletedWithError; + item5.Message = "Can't delete file after completion.\nPlease remove manually."; + Items.Add(item5); + } + MachineProvider = machineProvider; var settings = SettingsManager.Default.GetOrCreate<FSESettings>(); @@ -142,20 +172,24 @@ namespace Tango.FSE.UI.HotFolder if (upload) { - HotFolderItem hotFolderItem = Items.FirstOrDefault(x => x.FilePath == file && x.Status == HotFolderItemStatus.Pending); + HotFolderItem hotFolderItem = Items.FirstOrDefault(x => x.FilePath == file); - if (hotFolderItem == null) + if (hotFolderItem == null || hotFolderItem.Status != HotFolderItemStatus.Pending && hotFolderItem.Status != HotFolderItemStatus.Failed) { LogManager.Log($"Found new hot folder item '{fileName}'. Uploading..."); hotFolderItem = new HotFolderItem(file); - Items.Add(hotFolderItem); + hotFolderItem.Status = HotFolderItemStatus.Uploading; + Items.Insert(0, hotFolderItem); } - else + else if (hotFolderItem.Status == HotFolderItemStatus.Pending) { LogManager.Log($"Retrying hot folder item '{fileName}'. Uploading..."); + hotFolderItem.Status = HotFolderItemStatus.Uploading; + } + else + { + continue; } - - hotFolderItem.Status = HotFolderItemStatus.Uploading; var snackItem = NotificationProvider.PushProgressSnackbar("Hot Folder", $"Uploading '{fileName}' to machine '{MachineProvider.Machine.SerialNumber}'..."); @@ -175,7 +209,7 @@ namespace Tango.FSE.UI.HotFolder LogManager.Log(ex, $"Error deleting file '{fileName}' after upload from hot folder."); NotificationProvider.PushSnackbarItem(MessageType.Error, "Hot Folder", true, $"$Error deleting '{fileName}' from hot folder."); hotFolderItem.Status = HotFolderItemStatus.CompletedWithError; - hotFolderItem.FailedMessage = "Error deleting file after completion."; + hotFolderItem.Message = "Error deleting file after completion."; } } catch (Exception ex) @@ -183,7 +217,7 @@ namespace Tango.FSE.UI.HotFolder LogManager.Log(ex, $"Error uploading hot folder item '{fileName}'."); snackItem.ProgressFailed($"'{fileName}' upload failed.\n{ex.Message}", TimeSpan.FromSeconds(10)); hotFolderItem.Status = HotFolderItemStatus.Failed; - hotFolderItem.FailedMessage = ex.Message; + hotFolderItem.Message = ex.Message; } } } @@ -201,5 +235,10 @@ namespace Tango.FSE.UI.HotFolder IsActive = false; } + + public void RetryFailedItem(HotFolderItem item) + { + if (item != null) item.Status = HotFolderItemStatus.Pending; + } } } |
