import '../config/api_config.dart'; import '../data/models/server_model.dart'; import '../data/models/user_model.dart'; import 'storage_service.dart'; import '../core/utils/app_logger.dart'; /// 服务器服务 - 固定使用内置服务器 class ServerService { static ServerService? _instance; ServerService._(); static ServerService get instance { _instance ??= ServerService._(); return _instance!; } static const String _defaultLabel = '共云网盘'; static const String _defaultBaseUrl = ApiConfig.defaultBaseUrl; List _servers = []; ServerModel? _currentServer; /// 获取服务器列表 List get servers => List.unmodifiable(_servers); /// 获取当前服务器 ServerModel? get currentServer => _currentServer; /// 初始化服务器 Future init() async { await _loadServers(); } /// 从存储加载服务器列表 Future _loadServers() async { try { // 从 StorageService 加载服务器列表 final loadedServers = await StorageService.instance.servers; _setFixedDefaultServer(loadedServers); await _saveServers(); await _saveLastSelected(); AppLogger.d('加载了 ${_servers.length} 个服务器配置'); AppLogger.d('当前服务器: ${_currentServer?.label}'); } catch (e) { AppLogger.d('加载服务器列表失败: $e'); // 加载失败时使用默认服务器 _servers = [ ServerModel( label: _defaultLabel, baseUrl: _defaultBaseUrl, ), ]; _currentServer = _servers.first; } } /// 固定使用内置服务器,并保留同地址服务器上的登录信息 void _setFixedDefaultServer(List loadedServers) { ServerModel? savedDefaultServer; for (final server in loadedServers) { if (server.baseUrl == _defaultBaseUrl) { savedDefaultServer = server; break; } } _currentServer = (savedDefaultServer ?? ServerModel( label: _defaultLabel, baseUrl: _defaultBaseUrl, )) .copyWith( label: _defaultLabel, baseUrl: _defaultBaseUrl, ); _servers = [_currentServer!]; } /// 保存服务器列表到存储 Future _saveServers() async { try { await StorageService.instance.setServers(_servers); AppLogger.d('已保存 ${_servers.length} 个服务器配置'); } catch (e) { AppLogger.d('保存服务器列表失败: $e'); } } /// 保存上次选中的服务器 Future _saveLastSelected() async { if (_currentServer != null) { await StorageService.instance.setLastSelectedServerLabel(_currentServer!.label); } } /// 固定服务器模式下不支持添加服务器 Future addServer(ServerModel server) async { throw UnsupportedError('当前版本不支持自定义服务器'); } /// 固定服务器模式下不支持更新服务器 Future updateServer(String oldLabel, ServerModel newServer) async { throw UnsupportedError('当前版本不支持自定义服务器'); } /// 固定服务器模式下不支持删除服务器 Future deleteServer(String label) async { throw UnsupportedError('当前版本不支持自定义服务器'); } /// 固定服务器模式下始终使用内置服务器 Future selectServer(String label) async { if (_currentServer == null || _currentServer!.baseUrl != _defaultBaseUrl) { _setFixedDefaultServer(_servers); } await _saveLastSelected(); AppLogger.d('当前服务器: ${_currentServer?.label}'); } /// 更新当前服务器的服务登录信息 Future updateCurrentServerLogin({ String? email, String? password, UserModel? user, bool? rememberMe, }) async { if (_currentServer == null) { throw Exception('没有选中的服务器'); } _currentServer = _currentServer!.copyWith( email: email, password: password, user: user, rememberMe: rememberMe ?? _currentServer!.rememberMe, ); // 更新列表中的引用 final index = _servers.indexWhere((s) => s.label == _currentServer!.label); if (index != -1) { _servers[index] = _currentServer!; } await _saveServers(); } /// 清除当前服务器的服务登录信息 Future clearCurrentServerLogin() async { await updateCurrentServerLogin( email: null, password: null, user: null, ); } /// 重置为默认服务器列表 Future resetToDefault() async { _servers = [ ServerModel( label: _defaultLabel, baseUrl: _defaultBaseUrl, ), ]; _currentServer = _servers.first; await _saveServers(); await _saveLastSelected(); } }