public AddDownloadViewModel(AddItemsAsyncDelegate addItemsAsync, ShowPreviewDelegate showPreview) { _addItemsAsync = addItemsAsync; AddCommand = new RelayCommand <object>(Add, Add_CanExecute); PreviewCommand = new RelayCommand <object>(Preview, Add_CanExecute); _clipboardService = new ClipboardObserver(); if (Settings.Default.LastSavedLocation.Trim().Length > 0) { this.SaveToFolder = Settings.Default.LastSavedLocation; } else { this.SaveToFolder = AppPaths.DownloadsFolder; } this.AddToQueue = Settings.Default.AddItemsToQueue; this.StartDownload = Settings.Default.StartDownloadingAddedItems; this.Urls = string.Empty; this.ShowPreview = showPreview; var clipText = _clipboardService.GetText(); if (clipText.Contains("http") || clipText.Contains("ftp")) { this.Urls += clipText.Trim() + "\n"; } }
public PreviewViewModel(string message, List <string> urls) { CopyCommand = new RelayCommand <object>(Copy); _clipboard = new ClipboardObserver(); this.Message = message; this.Urls = new ObservableCollection <UrlListType>(); foreach (var url in urls) { var urlListType = new UrlListType(); urlListType.Url = url; Urls.Add(urlListType); } }
public DownloaderViewModel(DisplayMessageDelegate displayMessage, ShowUrlsDelegate showUrls) { _client = new HttpClient(); DownloadItemsList = new ObservableCollection <DownloaderObjectModel>(); CategoriesList = new ObservableCollection <Category>(); QueueProcessor = new QueueProcessor(Settings.Default.MaxParallelDownloads, QueueProcessor_PropertyChanged); _requestThrottler = new RequestThrottler(AppConstants.RequestThrottlerInterval); CollectionView = CollectionViewSource.GetDefaultView(DownloadItemsList); CollectionView.CurrentChanged += CollectionView_CurrentChanged; _clipboardService = new ClipboardObserver(); _semaphoreMeasuringSpeed = new SemaphoreSlim(1); _semaphoreUpdatingList = new SemaphoreSlim(1); _semaphoreRefreshingView = new SemaphoreSlim(1); _ctsUpdatingList = null; _ctsRefreshView = null; _displayMessage = displayMessage; _lockDownloadItemsList = DownloadItemsList; _lockBytesDownloaded = this.BytesDownloaded; _lockBytesTransferredOverLifetime = Settings.Default.BytesTransferredOverLifetime; _showUrls = showUrls; this.Count = 0; this.DownloadingCount = 0; this.ErroredCount = 0; this.FinishedCount = 0; this.PausedCount = 0; this.QueuedCount = 0; this.ReadyCount = 0; this.VerifyingCount = 0; this.BytesDownloaded = 0; this.Status = "Ready"; this.ProgressReporter = new Progress <long>(value => { Monitor.Enter(_lockBytesDownloaded); try { this.BytesDownloaded += value; } finally { Monitor.Exit(_lockBytesDownloaded); } }); AddCommand = new RelayCommand <object>(Add); StartCommand = new RelayCommand <object>(Start); RemoveFromListCommand = new RelayCommand <object>(RemoveFromList); CancelCommand = new RelayCommand <object>(Cancel); PauseCommand = new RelayCommand <object>(Pause); OpenCommand = new RelayCommand <object>(Open); OpenContainingFolderCommand = new RelayCommand <object>(OpenContainingFolder); StartQueueCommand = new RelayCommand <object>(StartQueue); StopQueueCommand = new RelayCommand <object>(StopQueue); CloseAppCommand = new RelayCommand <object>(CloseApp); CategoryChangedCommand = new RelayCommand <object>(CategoryChanged); OptionsCommand = new RelayCommand <object>(ShowOptions); EnqueueCommand = new RelayCommand <object>(Enqueue); DequeueCommand = new RelayCommand <object>(Dequeue); DeleteFileCommand = new RelayCommand <object>(DeleteFile); RecheckCommand = new RelayCommand <object>(Recheck); RedownloadCommand = new RelayCommand <object>(Redownload); CopyLinkToClipboardCommand = new RelayCommand <object>(CopyLinkToClipboard); ClearFinishedDownloadsCommand = new RelayCommand <object>(ClearFinishedDownloads); CancelBackgroundTaskCommand = new RelayCommand <object>( CancelBackgroundTask, CancelBackgroundTask_CanExecute); CheckForUpdatesCommand = new RelayCommand <object>(CheckForUpdates); ShowHelpTopicsCommand = new RelayCommand <object>(ShowHelpTopics); foreach (Category cat in (Category[])Enum.GetValues(typeof(Category))) { CategoriesList.Add(cat); } // Load last selected category if (string.IsNullOrEmpty(Settings.Default.LastSelectedCatagory)) { SwitchCategory(Category.All); } else { SwitchCategory((Category)Enum.Parse(typeof(Category), Settings.Default.LastSelectedCatagory)); } // Check for updates if (Settings.Default.AutoCheckForUpdates) { Task.Run(async() => await TriggerUpdateCheckAsync(true)); } // Populate history Task.Run(async() => { await _semaphoreUpdatingList.WaitAsync(); _ctsUpdatingList = new CancellationTokenSource(); var ct = _ctsUpdatingList.Token; RaisePropertyChanged(nameof(this.IsBackgroundWorking)); try { if (Directory.Exists(AppPaths.LocalAppData)) { this.Status = "Restoring data..."; RaisePropertyChanged(nameof(this.Status)); } else { return; } SerializableDownloaderObjectModelList source; var xmlReader = new XmlSerializer(typeof(SerializableDownloaderObjectModelList)); using (var streamReader = new StreamReader(AppPaths.DownloadsHistoryFile)) { source = (SerializableDownloaderObjectModelList)xmlReader.Deserialize(streamReader); } var sourceObjects = source.Objects.ToArray(); var finalObjects = new DownloaderObjectModel[sourceObjects.Count()]; var total = sourceObjects.Count(); for (int i = 0; i < sourceObjects.Count(); i++) { if (ct.IsCancellationRequested) { break; } if (sourceObjects[i] == null) { continue; } int progress = (int)((double)(i + 1) / total * 100); this.Progress = progress; this.Status = "Restoring " + (i + 1) + " of " + total + ": " + sourceObjects[i].Url; RaisePropertyChanged(nameof(this.Progress)); RaisePropertyChanged(nameof(this.Status)); var item = new DownloaderObjectModel( ref _client, sourceObjects[i].Url, sourceObjects[i].Destination, sourceObjects[i].IsQueued, sourceObjects[i].TotalBytesToDownload, sourceObjects[i].StatusCode, Download_Created, Download_Verifying, Download_Verified, Download_Started, Download_Stopped, Download_Enqueued, Download_Dequeued, Download_Finished, Download_PropertyChanged, ProgressReporter, ref _requestThrottler); item.SetCreationTime(sourceObjects[i].DateCreated); finalObjects[i] = item; } this.Status = "Listing..."; RaisePropertyChanged(nameof(this.Status)); AddObjects(finalObjects); } catch { return; } finally { _ctsUpdatingList = null; this.Progress = 0; this.Status = "Ready"; RaisePropertyChanged(nameof(this.Progress)); RaisePropertyChanged(nameof(this.Status)); RaisePropertyChanged(nameof(this.IsBackgroundWorking)); _semaphoreUpdatingList.Release(); RefreshCollection(); } }); }