二次开发源码提交
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
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<ServerModel> _servers = [];
|
||||
ServerModel? _currentServer;
|
||||
|
||||
/// 获取服务器列表
|
||||
List<ServerModel> get servers => List.unmodifiable(_servers);
|
||||
|
||||
/// 获取当前服务器
|
||||
ServerModel? get currentServer => _currentServer;
|
||||
|
||||
/// 初始化服务器
|
||||
Future<void> init() async {
|
||||
await _loadServers();
|
||||
}
|
||||
|
||||
/// 从存储加载服务器列表
|
||||
Future<void> _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<ServerModel> 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<void> _saveServers() async {
|
||||
try {
|
||||
await StorageService.instance.setServers(_servers);
|
||||
AppLogger.d('已保存 ${_servers.length} 个服务器配置');
|
||||
} catch (e) {
|
||||
AppLogger.d('保存服务器列表失败: $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// 保存上次选中的服务器
|
||||
Future<void> _saveLastSelected() async {
|
||||
if (_currentServer != null) {
|
||||
await StorageService.instance.setLastSelectedServerLabel(_currentServer!.label);
|
||||
}
|
||||
}
|
||||
|
||||
/// 固定服务器模式下不支持添加服务器
|
||||
Future<void> addServer(ServerModel server) async {
|
||||
throw UnsupportedError('当前版本不支持自定义服务器');
|
||||
}
|
||||
|
||||
/// 固定服务器模式下不支持更新服务器
|
||||
Future<void> updateServer(String oldLabel, ServerModel newServer) async {
|
||||
throw UnsupportedError('当前版本不支持自定义服务器');
|
||||
}
|
||||
|
||||
/// 固定服务器模式下不支持删除服务器
|
||||
Future<void> deleteServer(String label) async {
|
||||
throw UnsupportedError('当前版本不支持自定义服务器');
|
||||
}
|
||||
|
||||
/// 固定服务器模式下始终使用内置服务器
|
||||
Future<void> selectServer(String label) async {
|
||||
if (_currentServer == null || _currentServer!.baseUrl != _defaultBaseUrl) {
|
||||
_setFixedDefaultServer(_servers);
|
||||
}
|
||||
await _saveLastSelected();
|
||||
AppLogger.d('当前服务器: ${_currentServer?.label}');
|
||||
}
|
||||
|
||||
/// 更新当前服务器的服务登录信息
|
||||
Future<void> 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<void> clearCurrentServerLogin() async {
|
||||
await updateCurrentServerLogin(
|
||||
email: null,
|
||||
password: null,
|
||||
user: null,
|
||||
);
|
||||
}
|
||||
|
||||
/// 重置为默认服务器列表
|
||||
Future<void> resetToDefault() async {
|
||||
_servers = [
|
||||
ServerModel(
|
||||
label: _defaultLabel,
|
||||
baseUrl: _defaultBaseUrl,
|
||||
),
|
||||
];
|
||||
_currentServer = _servers.first;
|
||||
await _saveServers();
|
||||
await _saveLastSelected();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user