public void StartDownload(DownloadRequestBM request) { QueuedDownloadBM download = new QueuedDownloadBM( downloadId: request.DownloadId, downloadProgress: this.youtubeDl.PrepareDownload(request.MediaUri, request.Format, serviceConfig.DownloadPath) ); runningDownloads.Add(download); download.DownloadHandler.PercentageChanged += (o, e) => this.notifier.Notify(download.DownloadID, download.DownloadHandler.Status, e); download.DownloadHandler.DownloadStatusChanged += (o, e) => { this.notifier.Notify(download.DownloadID, e, download.DownloadHandler.Percentage); if (e == DownloadState.Completed) { EventHandler_DownloadCompleted(download); } else if (e == DownloadState.Failed) { string errorOutput = download.DownloadHandler.ErrorMessage.Replace("\r", "\\r").Replace("\n", "\\n"); logger.LogError($"Error occurred during download: CommandLine='{download.DownloadHandler.CommandLine}' StdErr='{errorOutput}'"); } }; download.DownloadHandler.Start(); this.logger.LogInformation($"Download started with GUID: {download.DownloadID}"); }
private void EventHandler_DownloadCompleted(QueuedDownloadBM download) { CompletedQueuedDownloadBM completedDownload = new CompletedQueuedDownloadBM(download.DownloadID, download.DownloadHandler, DateTime.UtcNow); runningDownloads.Remove(download); completedDownloads.Add(completedDownload); cleanupService.MarkToCleanup(completedDownload); this.logger.LogInformation($"Download completed with GUID: {download.DownloadID}"); }
public DownloadStatusBM GetDownloadStatus(Guid downloadID) { QueuedDownloadBM result = this.runningDownloads.Concat(this.completedDownloads).FirstOrDefault(x => x.DownloadID == downloadID); if (result == null) { throw new InvalidOperationException($"Download not found with ID {downloadID}."); } return(new DownloadStatusBM(result.DownloadHandler.Percentage, result.DownloadHandler.Status)); }