import 'dart:io'; import 'package:cloud_archiver/utils.dart'; import 'dart:convert' show json; import 'package:path_provider/path_provider.dart'; import 'package:path/path.dart' show join; import 'package:uuid/uuid.dart'; late File _configFile; AppConfig? appConfig; class AppConfig { final String client; final String server; final String user; final String passwd; final List syncItems; static Future init() async { var directory = await getApplicationSupportDirectory(); _configFile = File(join(directory.path, 'config.json')); if (_configFile.existsSync()) { try { appConfig = AppConfig.fromJson(json.decode(_configFile.readAsStringSync())); } catch (e) { print(e); } } } static void updateConfig({ required String client, required String server, required String user, required String passwd, }) { appConfig = AppConfig( client: client, server: server, user: user, passwd: passwd, syncItems: appConfig?.syncItems ?? [], ); _save(); } static void addSyncItem(SyncItemConfig item) { var items = (appConfig?.syncItems ?? []).where((ele) => ele.uuid != item.uuid); appConfig = AppConfig( client: appConfig?.client ?? '', server: appConfig?.server ?? '', user: appConfig?.user ?? '', passwd: appConfig?.passwd ?? '', syncItems: [ item, ...items, ], ); _save(); loadLocalStatus(); } static void removeSyncItem(SyncItemConfig item) { var items = (appConfig?.syncItems ?? []).where((ele) => ele.uuid != item.uuid); appConfig = AppConfig( client: appConfig?.client ?? '', server: appConfig?.server ?? '', user: appConfig?.user ?? '', passwd: appConfig?.passwd ?? '', syncItems: items.toList(), ); _save(); loadLocalStatus(); } AppConfig({ required this.client, required this.server, required this.user, required this.passwd, required this.syncItems, }); factory AppConfig.fromJson(Map json) => AppConfig( client: json['client'], server: json['server'], user: json['user'], passwd: json['passwd'], syncItems: (json['syncItems'] as List? ?? []).map((ele) => SyncItemConfig.fromJson(ele)).toList(), ); Map toJson() => { 'client': client, 'server': server, 'user': user, 'passwd': passwd, 'syncItems': syncItems, }; static void _save() { _configFile.writeAsStringSync(json.encode(appConfig)); } } class SyncItemConfig { final String uuid; final String name; final String path; SyncItemConfig({required this.name, required this.path, String? uuid}) : uuid = uuid ?? Uuid().v4(); factory SyncItemConfig.fromJson(Map json) => SyncItemConfig( uuid: json['uuid'], name: json['name'], path: json['path'], ); Map toJson() => { 'uuid': uuid, 'name': name, 'path': path, }; }