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