/// <summary> /// Queue a download action. /// </summary> /// <param name="client">Source remote client.</param> /// <param name="dataStore">Destination data source.</param> public void QueueDownload(RemoteClient client, DataStore dataStore) { if (_downloadActions.Count(x => x.Client.Address.RawUrl == client.Address.RawUrl) > 0 && _downloadActions.Count(x => x.Store.Location == dataStore.Location) > 0) { throw new InvalidOperationException("This operation is already queued"); } DownloadAction action = new DownloadAction(client, dataStore); _downloadActions.Add(action); action.DownloadStarted += action_DownloadStarted; action.DownloadFailed += action_DownloadFailed; action.DownloadCompleted += action_DownloadCompleted; }
/// <summary> /// Starts the download process. /// </summary> public virtual void Start() { if (IsDownloading) { throw new InvalidOperationException("Download Already in Progress!"); } onDownloadStarted(new DownloadEventArgs(_downloadActions.Count)); IsDownloading = true; foreach (var item in _downloadActions) { _currentAction = item; item.Start(); } IsDownloading = !IsDownloading; onDownloadCompleted(new DownloadEventArgs(_downloadActions.Count, _itemsCompleted, _itemsFailed)); }
/// <summary> /// Creates a new DataDownloader instance /// </summary> internal DataDownloader() { _downloadActions = new List <DownloadAction>(); _itemsCompleted = 0; _itemsFailed = 0; _currentAction = null; }