aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2020-03-25 17:43:49 +0200
committerAvi Levkovich <avi@twine-s.com>2020-03-25 17:43:49 +0200
commitd29da53d6f71f45749c0ede5b4cd7281ed3a270e (patch)
treefd83afc7771c0f4f19c581e1cf407bcf7c14818b /Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs
parent0208e9f1800c044ec3bd002b7aa7fd00621c81be (diff)
downloadTango-d29da53d6f71f45749c0ede5b4cd7281ed3a270e.tar.gz
Tango-d29da53d6f71f45749c0ede5b4cd7281ed3a270e.zip
merge
Diffstat (limited to 'Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs')
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs119
1 files changed, 119 insertions, 0 deletions
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs
new file mode 100644
index 000000000..48fb35c0f
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/FileSystem/FileSystemHandler.cs
@@ -0,0 +1,119 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core;
+using Tango.FileSystem;
+
+namespace Tango.FSE.Common.FileSystem
+{
+ public class FileSystemHandler : ExtendedObject
+ {
+ private Action _abortAction;
+ private FileSystemHandlerStatus _statusBeforePause;
+
+ public FileSystemHandlerType Type { get; set; }
+
+ private FileSystemHandlerStatus _status;
+ public FileSystemHandlerStatus Status
+ {
+ get { return _status; }
+ set
+ {
+ _status = value;
+ RaisePropertyChangedAuto();
+ }
+ }
+
+ private bool _isPaused;
+ public bool IsPaused
+ {
+ get { return _isPaused; }
+ set
+ {
+ if (_isPaused != value)
+ {
+ _isPaused = value;
+
+ if (_isPaused)
+ {
+ _statusBeforePause = Status;
+ Status = FileSystemHandlerStatus.Paused;
+ }
+ else
+ {
+ Status = _statusBeforePause;
+ }
+
+ RaisePropertyChangedAuto();
+ }
+ }
+ }
+
+ private double _position;
+ public double Position
+ {
+ get { return _position; }
+ set { _position = value; RaisePropertyChangedAuto(); }
+ }
+
+ private double _length;
+ public double Length
+ {
+ get { return _length; }
+ set { _length = value; RaisePropertyChangedAuto(); }
+ }
+
+ private Exception _failedException;
+ public Exception FailedException
+ {
+ get { return _failedException; }
+ set { _failedException = value; RaisePropertyChangedAuto(); }
+ }
+
+ public FileSystemItem FileSystemItem { get; set; }
+ public String Destination { get; set; }
+ public String OperationId { get; set; }
+
+ public FileSystemHandler(FileSystemItem fileSystemItem, String destination, Action abortAction)
+ {
+ FileSystemItem = fileSystemItem;
+ Destination = destination;
+ _abortAction = abortAction;
+ }
+
+ internal void InvalidateProgress(double position, double length)
+ {
+ Position = position;
+ Length = length;
+
+ if (!IsPaused)
+ {
+ Status = (Type == FileSystemHandlerType.FileDownload || Type == FileSystemHandlerType.FolderDownload) ? FileSystemHandlerStatus.Downloading : FileSystemHandlerStatus.Uploading;
+ }
+ }
+
+ internal void RaiseFailed(Exception exception)
+ {
+ Status = FileSystemHandlerStatus.Failed;
+ FailedException = exception;
+ }
+
+ internal void RaiseAborted()
+ {
+ Status = FileSystemHandlerStatus.Aborted;
+ }
+
+ internal void RaiseCompleted()
+ {
+ Status = FileSystemHandlerStatus.Completed;
+ }
+
+ public void Abort()
+ {
+ Status = FileSystemHandlerStatus.Aborted;
+ _abortAction?.Invoke();
+ }
+ }
+}