Add NotificationService and change the UrlGetters folder path
This commit is contained in:
@@ -2,10 +2,9 @@
|
||||
using DownloadManager.Models;
|
||||
using DownloadManager.Services;
|
||||
using System.Collections.Concurrent;
|
||||
using System.IO;
|
||||
|
||||
namespace DownloadManager.DownloaderCore;
|
||||
public class DownloadManagerService()
|
||||
public partial class DownloadManagerService()
|
||||
{
|
||||
private readonly ConcurrentQueue<DownloadItemData> _queuedDownloadData = new();
|
||||
private readonly ConcurrentDictionary<Guid, DownloadWorker> _activeWorkers = new();
|
||||
@@ -15,6 +14,7 @@ public class DownloadManagerService()
|
||||
public Action? OnQueuedItemChanged;
|
||||
public Action? OnAllWorkerCompleted;
|
||||
public Action<string, string>? OnWorkerFailed;
|
||||
public Action<string>? OnWorkerComplete;
|
||||
|
||||
public async Task LoadDownloadHistory()
|
||||
{
|
||||
@@ -101,6 +101,10 @@ public class DownloadManagerService()
|
||||
{
|
||||
OnWorkerFailed?.Invoke(worker.DownloadData.Url, worker.errorMessage);
|
||||
}
|
||||
else if (worker.DownloadData.Status == DownloadStatus.Completed)
|
||||
{
|
||||
OnWorkerComplete?.Invoke(worker.DownloadData.Url);
|
||||
}
|
||||
|
||||
if (_activeWorkers.Count == 0 && _queuedDownloadData.Count == 0)
|
||||
{
|
||||
@@ -124,64 +128,4 @@ public class DownloadManagerService()
|
||||
worker.Value.StopDownload();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task AddCompletedItem(DownloadItemData downloadData, string status, string errorMessage)
|
||||
{
|
||||
var completedItem = new CompletedItemData
|
||||
{
|
||||
Name = downloadData.FileName,
|
||||
Url = downloadData.Url,
|
||||
SavePath = downloadData.FilePath,
|
||||
FullName = Path.Combine(downloadData.FilePath, downloadData.FileName),
|
||||
Status = status,
|
||||
ErrorMessage = errorMessage == string.Empty ? "No error" : errorMessage
|
||||
};
|
||||
|
||||
_completedDownloadData.Add(completedItem);
|
||||
await SaveCompletedItemsAsync();
|
||||
}
|
||||
|
||||
private async Task SaveCompletedItemsAsync()
|
||||
{
|
||||
await HistoryStorageService.SaveCompletedItemsAsync(_completedDownloadData);
|
||||
}
|
||||
|
||||
public IEnumerable<DownloadItemData> GetDownloadingTask()
|
||||
{
|
||||
return _activeWorkers.Select(x => x.Value.DownloadData);
|
||||
}
|
||||
|
||||
public IEnumerable<DownloadItemData> GetWaitingTask()
|
||||
{
|
||||
return _queuedDownloadData;
|
||||
}
|
||||
|
||||
public IEnumerable<CompletedItemData> GetCompletedTask()
|
||||
{
|
||||
return _completedDownloadData;
|
||||
}
|
||||
|
||||
public async Task ClearCompletedTask()
|
||||
{
|
||||
_completedDownloadData.RemoveAll(x => x.Status == DownloadStatus.Completed.ToString());
|
||||
await SaveCompletedItemsAsync();
|
||||
}
|
||||
|
||||
public async Task ClearFailedTask()
|
||||
{
|
||||
_completedDownloadData.RemoveAll(x => x.Status == DownloadStatus.Failed.ToString());
|
||||
await SaveCompletedItemsAsync();
|
||||
}
|
||||
|
||||
public async Task ClearAllTask()
|
||||
{
|
||||
_completedDownloadData.Clear();
|
||||
await SaveCompletedItemsAsync();
|
||||
}
|
||||
|
||||
public async Task RemoveCompletedTask(CompletedItemData completedItem)
|
||||
{
|
||||
_completedDownloadData.Remove(completedItem);
|
||||
await SaveCompletedItemsAsync();
|
||||
}
|
||||
}
|
||||
82
DownloadManager/DownloaderCore/DownloadManagerServiceTask.cs
Normal file
82
DownloadManager/DownloaderCore/DownloadManagerServiceTask.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
using Downloader;
|
||||
using DownloadManager.Models;
|
||||
using DownloadManager.Services;
|
||||
|
||||
namespace DownloadManager.DownloaderCore
|
||||
{
|
||||
public partial class DownloadManagerService
|
||||
{
|
||||
private async Task AddCompletedItem(DownloadItemData downloadData, string status, string errorMessage)
|
||||
{
|
||||
var completedItem = new CompletedItemData
|
||||
{
|
||||
Name = downloadData.FileName,
|
||||
Url = downloadData.Url,
|
||||
SavePath = downloadData.FilePath,
|
||||
FullName = System.IO.Path.Combine(downloadData.FilePath, downloadData.FileName),
|
||||
Status = status,
|
||||
ErrorMessage = errorMessage == string.Empty ? "No error" : errorMessage
|
||||
};
|
||||
|
||||
_completedDownloadData.Add(completedItem);
|
||||
await SaveCompletedItemsAsync();
|
||||
}
|
||||
|
||||
private async Task SaveCompletedItemsAsync()
|
||||
{
|
||||
await HistoryStorageService.SaveCompletedItemsAsync(_completedDownloadData);
|
||||
}
|
||||
|
||||
public IEnumerable<DownloadItemData> GetDownloadingTask()
|
||||
{
|
||||
return _activeWorkers.Select(x => x.Value.DownloadData);
|
||||
}
|
||||
|
||||
public IEnumerable<DownloadItemData> GetWaitingTask()
|
||||
{
|
||||
return _queuedDownloadData;
|
||||
}
|
||||
|
||||
public IEnumerable<CompletedItemData> GetCompletedTask()
|
||||
{
|
||||
return _completedDownloadData;
|
||||
}
|
||||
|
||||
public async Task ClearCompletedTask()
|
||||
{
|
||||
_completedDownloadData.RemoveAll(x => x.Status == DownloadStatus.Completed.ToString());
|
||||
await SaveCompletedItemsAsync();
|
||||
}
|
||||
|
||||
public async Task ClearFailedTask()
|
||||
{
|
||||
_completedDownloadData.RemoveAll(x => x.Status == DownloadStatus.Failed.ToString());
|
||||
await SaveCompletedItemsAsync();
|
||||
}
|
||||
|
||||
public async Task ClearAllTask()
|
||||
{
|
||||
_completedDownloadData.Clear();
|
||||
await SaveCompletedItemsAsync();
|
||||
}
|
||||
|
||||
public async Task RemoveCompletedTask(CompletedItemData completedItem)
|
||||
{
|
||||
_completedDownloadData.Remove(completedItem);
|
||||
await SaveCompletedItemsAsync();
|
||||
}
|
||||
|
||||
public async Task RetryFailedTask()
|
||||
{
|
||||
var failedTasks = _completedDownloadData.Where(x => x.Status == DownloadStatus.Failed.ToString()).ToArray();
|
||||
foreach (var failedTask in failedTasks)
|
||||
{
|
||||
var downloadItemData = new DownloadItemData(failedTask.SavePath, failedTask.Url, "Direct", new DownloadConfiguration());
|
||||
AddDownloadItem(downloadItemData);
|
||||
_completedDownloadData.Remove(failedTask);
|
||||
}
|
||||
|
||||
await SaveCompletedItemsAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user