Add NotificationService and change the UrlGetters folder path

This commit is contained in:
Misaki
2024-07-07 16:34:10 +09:00
parent cb3f021855
commit d239fa2010
24 changed files with 385 additions and 410 deletions

View File

@@ -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();
}
}

View 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();
}
}
}