private void InitializeCommands()
        {
            PauseCommand = new RelayCommand <IDownloadingFile>(
                item => OperateTaskToken(item, token => token.Suspend(), "Pause task failed."), // TODO: [I18N]
                item => item.DownloadInfo.Status == TransferStatus.Transferring ||
                item.DownloadInfo.Status == TransferStatus.Ready);

            StartCommand = new RelayCommand <IDownloadingFile>(
                item => OperateTaskToken(item, token => token.Ready(), "Restart task failed."),
                item => item.DownloadInfo.Status == TransferStatus.Suspended);

            StartForceCommand = new RelayCommand <IDownloadingFile>(
                item => OperateTaskToken(item, token => token.AsNext(), "Jump queue failed."),
                item => item.DownloadInfo.Status != TransferStatus.Transferring);

            CancelCommand = new RelayCommand <IDownloadingFile>(
                item => OperateTaskToken(item, token => token.Dispose(), "Cancel task failed."));

            PauseAllCommand = new RelayCommand(
                () => TransferTasks.ForEach(item => PauseCommand.Invoke(item)),
                () => TransferTasks?.Any() ?? false);

            CancelAllCommand = new RelayCommand(
                () => TransferTasks.ForEach(item => CancelCommand.Invoke(item)),
                () => TransferTasks?.Any() ?? false);
        }
        public DownloadingViewModel(IUnityContainer container) : base(container)
        {
            PauseAllCommand = new RelayCommand(() =>
            {
                foreach (var task in TransferTasks)
                {
                    if (PauseCommand.CanExecute(task))
                    {
                        PauseCommand.Execute(task);
                    }
                }
            },
                                               () => TransferTasks?.Any() ?? false);

            CancelAllCommand = new RelayCommand(() =>
            {
                foreach (var task in TransferTasks)
                {
                    if (CancelCommand.CanExecute(task))
                    {
                        CancelCommand.Execute(task);
                    }
                }
            },
                                                () => TransferTasks?.Any() ?? false);
        }
        private void InitializeTransferItem(IDownloadingFile item)
        {
            var previousStatus = item.DownloadInfo.Status;

            item.DownloadInfo
            .Where(notification =>
            {
                var result     = notification.Status != previousStatus;
                previousStatus = notification.Status;
                return(result);
            })
            .ObserveOn(Dispatcher)
            .Subscribe(_ =>
            {
                TransferTasks.Remove(item);
                TransferTasks.Add(item);
            });

            item.DownloadInfo
            .Where(notification => notification.Status == TransferStatus.Disposed)
            .ObserveOn(Dispatcher)
            .Subscribe(
                _ => TransferTasks.Remove(item),
                () =>
            {
                TransferTasks.Remove(item);
                EventAggregator
                .GetEvent <TransferItemCompletedEvent>()
                .Publish(LocalDiskFile.Create(item));
            });

            TransferTasks.Add(item);
        }
Example #4
0
        public DownloadingViewModel(IUnityContainer container) : base(container)
        {
            PauseAllCommand = new RelayCommand(() => TransferTasks.ForEach(item =>
            {
                if (PauseCommand.CanExecute(item))
                {
                    PauseCommand.Execute(item);
                }
            }),
                                               () => TransferTasks?.Any() ?? false);

            CancelAllCommand = new RelayCommand(() => TransferTasks.ForEach(item =>
            {
                if (CancelCommand.CanExecute(item))
                {
                    CancelCommand.Execute(item);
                }
            }),
                                                () => TransferTasks?.Any() ?? false);
        }