Smooth mobile post swipes and export providers

This commit is contained in:
2026-05-23 12:27:20 +03:00
parent f9938e393d
commit 00ad16dc51
3 changed files with 109 additions and 14 deletions
+31 -5
View File
@@ -227,18 +227,44 @@ class SettingsService {
Future<Result<String>> exportSettingsToJson() async {
final result = await getSettings();
return result.fold(
onSuccess: (settings) => Success(jsonEncode(settings.toJson())),
onError: Error<String>.new,
if (result is Error<AppSettings>) return Error(result.failure);
final settings = (result as Success<AppSettings>).data;
final providers = <ContentProviderConfig>[];
final repository = _providerRepository;
if (repository != null) {
final providersResult = await repository.getProviders(enabledOnly: false);
if (providersResult is Success<List<ContentProviderConfig>>) {
providers.addAll(providersResult.data);
}
}
return Success(
const JsonEncoder.withIndent(' ').convert({
'schemaVersion': 2,
'settings': settings.toJson(),
'providers': providers.map((provider) => provider.toJson()).toList(),
}),
);
}
Future<Result<void>> importSettingsFromJson(String json) async {
try {
final settings =
AppSettings.fromJson(jsonDecode(json) as Map<String, dynamic>);
final decoded = jsonDecode(json) as Map<String, dynamic>;
final settingsJson =
(decoded['settings'] as Map?)?.cast<String, dynamic>() ?? decoded;
final settings = AppSettings.fromJson(settingsJson);
final result = await updateSettings(settings);
if (result is Error<void>) return result;
final repository = _providerRepository;
final providerItems = decoded['providers'];
if (repository != null && providerItems is List) {
for (final item in providerItems.whereType<Map>()) {
await repository.saveProvider(
ContentProviderConfig.fromJson(
Map<String, dynamic>.from(item),
).copyWith(updatedAt: DateTime.now()),
);
}
}
await saveEnabledProviders(settings.enabledProviderIds);
return result;
} catch (error) {