Ejemplo n.º 1
0
        private async Task DownloadNextItemAsync()
        {
            DownloadItemViewModel downloadItem = Downloads.FirstOrDefault(downloadItemViewModel => downloadItemViewModel.Status == DownloadItemStatus.QUEUED);

            if (downloadItem == null)
            {
                return;
            }
            string            dumpUrl                 = downloadItem.Collection.DownloadUrl;
            string            dumpFilePath            = downloadItem.Collection.DownloadFilePath;
            Progress <object> downloadProgressHandler = new Progress <object>(progress => HandleDownloadProgress(downloadItem, progress));

            DownloadUtils.DownloadResult downloadResult = default;
            bool error = false;

            downloadItem.UpdateStatus(DownloadItemStatus.DOWNLOADING);
            try
            {
                downloadResult = await MainModel.LibgenDumpDownloader.DownloadDumpAsync(dumpUrl, dumpFilePath, downloadProgressHandler,
                                                                                        downloadCancellationTokenSource.Token);
            }
            catch (Exception exception)
            {
                Logger.Exception(exception);
                error = true;
            }
            if (!error)
            {
                switch (downloadResult)
                {
                case DownloadUtils.DownloadResult.COMPLETED:
                    downloadItem.UpdateStatus(DownloadItemStatus.COMPLETED);
                    break;

                case DownloadUtils.DownloadResult.CANCELLED:
                    downloadItem.UpdateStatus(DownloadItemStatus.STOPPED);
                    break;

                case DownloadUtils.DownloadResult.INCOMPLETE:
                case DownloadUtils.DownloadResult.ERROR:
                    error = true;
                    break;
                }
            }
            if (error)
            {
                downloadItem.UpdateStatus(DownloadItemStatus.ERROR);
            }
        }