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