import 'package:json_annotation/json_annotation.dart'; part 'downloader_config.g.dart'; @JsonSerializable(explicitToJson: true) class DownloaderConfig { String downloadDir = ''; int maxRunning = 0; ProtocolConfig protocolConfig = ProtocolConfig(); ExtraConfig extra = ExtraConfig(); ProxyConfig proxy = ProxyConfig(); DownloaderConfig(); factory DownloaderConfig.fromJson(Map json) => _$DownloaderConfigFromJson(json); Map toJson() => _$DownloaderConfigToJson(this); } @JsonSerializable(explicitToJson: true) class ProtocolConfig { HttpConfig http = HttpConfig(); BtConfig bt = BtConfig(); ProtocolConfig(); factory ProtocolConfig.fromJson(Map? json) => json == null ? ProtocolConfig() : _$ProtocolConfigFromJson(json); Map toJson() => _$ProtocolConfigToJson(this); } @JsonSerializable() class HttpConfig { String userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'; int connections = 0; HttpConfig(); factory HttpConfig.fromJson(Map json) => _$HttpConfigFromJson(json); Map toJson() => _$HttpConfigToJson(this); } @JsonSerializable() class BtConfig { int listenPort = 0; List trackers = []; BtConfig(); factory BtConfig.fromJson(Map json) => _$BtConfigFromJson(json); Map toJson() => _$BtConfigToJson(this); } @JsonSerializable(explicitToJson: true) class ExtraConfig { String themeMode = ''; String locale = ''; ExtraConfigBt bt = ExtraConfigBt(); ExtraConfig(); factory ExtraConfig.fromJson(Map? json) => json == null ? ExtraConfig() : _$ExtraConfigFromJson(json); Map toJson() => _$ExtraConfigToJson(this); } @JsonSerializable() class ProxyConfig { bool enable = false; String scheme = ''; String host = ''; String usr = ''; String pwd = ''; ProxyConfig(); factory ProxyConfig.fromJson(Map json) => _$ProxyConfigFromJson(json); Map toJson() => _$ProxyConfigToJson(this); } @JsonSerializable() class ExtraConfigBt { List trackerSubscribeUrls = []; List subscribeTrackers = []; DateTime? lastTrackerUpdateTime; List customTrackers = []; ExtraConfigBt(); factory ExtraConfigBt.fromJson(Map json) => _$ExtraConfigBtFromJson(json); Map toJson() => _$ExtraConfigBtToJson(this); }