aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/FSE
diff options
context:
space:
mode:
authorRoy <Roy.mail.net@gmail.com>2022-11-03 07:42:14 +0200
committerRoy <Roy.mail.net@gmail.com>2022-11-03 07:42:14 +0200
commitb93d7795c84da2e5317fd12d9a41cdd63fcb6659 (patch)
treefc196de881ab7182912867686e4860eab9ec281b /Software/Visual_Studio/FSE
parentb461a5e1eb1f2fb72bcfdac94aa13d3f6485d401 (diff)
downloadTango-b93d7795c84da2e5317fd12d9a41cdd63fcb6659.tar.gz
Tango-b93d7795c84da2e5317fd12d9a41cdd63fcb6659.zip
Hot Folder Outbox View.
Diffstat (limited to 'Software/Visual_Studio/FSE')
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/HotFolder/HotFolderItem.cs14
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/HotFolder/IHotFolderService.cs4
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/Dialogs/HotFolderConfigurationView.xaml73
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/Dialogs/HotFolderConfigurationViewVM.cs8
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.UI/HotFolder/DefaultHotFolderService.cs59
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;
+ }
}
}