import 'package:freezed_annotation/freezed_annotation.dart'; import 'auth.dart'; import 'danmaku.dart'; import 'script_widget.dart'; import 'server.dart'; part 'backup.freezed.dart'; part 'backup.g.dart'; @freezed abstract class BackupBundle with _$BackupBundle { const factory BackupBundle({ required int version, required String exportedAt, required List servers, required List sessions, @JsonKey(fromJson: _danmakuSourcesFromJson, toJson: _danmakuSourcesToJson) @Default([]) List danmakuSources, @Default([]) List scriptWidgets, @Default([]) List scriptWidgetSubscriptions, }) = _BackupBundle; factory BackupBundle.fromJson(Map json) => _$BackupBundleFromJson(json); } List _danmakuSourcesFromJson(Object? raw) { if (raw is! List) return const []; final out = []; for (final item in raw) { if (item is Map) { final source = DanmakuSource.fromJson(item); if (source.url.isNotEmpty) out.add(source); } } return out; } List> _danmakuSourcesToJson(List sources) { return [ for (final s in sources) if (s.url.trim().isNotEmpty) {'url': s.url.trim(), 'name': s.name}, ]; }