using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Ink_Canvas.Helpers
{
///
/// 上传提供者接口
///
public interface IUploadProvider
{
///
/// 提供者名称
///
string Name { get; }
///
/// 是否启用
///
bool IsEnabled { get; }
///
/// 上传文件
///
/// 文件路径
/// 是否上传成功
Task UploadAsync(string filePath);
}
///
/// Dlass上传提供者
///
public class DlassUploadProvider : IUploadProvider
{
///
/// 提供者名称
///
public string Name => "Dlass";
///
/// 是否启用
///
public bool IsEnabled => MainWindow.Settings?.Dlass?.IsAutoUploadNotes ?? false;
///
/// 上传文件
///
/// 文件路径
/// 是否上传成功
public async Task UploadAsync(string filePath)
{
return await DlassNoteUploader.UploadNoteFileAsync(filePath);
}
}
///
/// 上传帮助类
///
public static class UploadHelper
{
private static readonly List _providers = new List();
private static bool _initialized;
private static readonly object s_sync = new object();
///
/// 初始化上传帮助类
///
public static void Initialize()
{
lock (s_sync)
{
if (_initialized)
return;
// 注册默认上传提供者
RegisterProviderInternal(new DlassUploadProvider());
_initialized = true;
}
}
///
/// 注册上传提供者
///
/// 上传提供者
public static void RegisterProvider(IUploadProvider provider)
{
if (provider == null)
return;
lock (s_sync)
{
RegisterProviderInternal(provider);
}
}
private static void RegisterProviderInternal(IUploadProvider provider)
{
if (provider != null)
{
bool providerExists = _providers.Any(p => p.GetType() == provider.GetType());
if (!providerExists)
{
_providers.Add(provider);
}
}
}
///
/// 上传文件到所有启用的提供者
///
/// 文件路径
/// 是否至少有一个提供者上传成功
public static async Task UploadFileAsync(string filePath)
{
if (!_initialized)
{
Initialize();
}
List providersSnapshot;
lock (s_sync)
{
providersSnapshot = new List(_providers);
}
bool anySuccess = false;
foreach (var provider in providersSnapshot)
{
try
{
if (provider.IsEnabled)
{
bool success = await provider.UploadAsync(filePath);
if (success)
{
anySuccess = true;
}
}
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"使用 {provider.Name} 上传失败: {ex}", LogHelper.LogType.Error);
}
}
return anySuccess;
}
///
/// 获取所有上传提供者
///
/// 上传提供者列表
public static List GetProviders()
{
if (!_initialized)
{
Initialize();
}
lock (s_sync)
{
return new List(_providers);
}
}
///
/// 获取所有启用的上传提供者
///
/// 启用的上传提供者列表
public static List GetEnabledProviders()
{
if (!_initialized)
{
Initialize();
}
lock (s_sync)
{
return _providers.FindAll(p => p.IsEnabled);
}
}
}
}