import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../app/app.dart'; import '../../../app/app_version.dart'; import '../../../backend/backend.dart'; import '../../../core/utils/logger.dart'; import '../../../core/utils/result.dart'; final settingsControllerProvider = AsyncNotifierProvider( SettingsController.new); class SettingsController extends AsyncNotifier { @override Future build() async { final result = await ref.read(settingsServiceProvider).getSettings(); return result is Success ? result.data : AppSettings.defaults; } Future saveSettings(AppSettings settings) async { await ref.read(settingsServiceProvider).updateSettings(settings); state = AsyncData(settings); ref.invalidate(appSettingsProvider); } Future clearCache() async { await ref.read(cacheServiceProvider).clear(); } Future clearViewedHistory() async { await ref.read(viewedHistoryServiceProvider).clearHistory(); ref.invalidate(viewedKeysProvider); } Future clearHiddenPosts() async { await ref.read(settingsServiceProvider).clearHiddenPosts(); ref.invalidate(appSettingsProvider); ref.invalidateSelf(); } Future clearSearchHistory() async { await ref.read(searchServiceProvider).clearHistory(); } Future clearTagCache() async { await ref.read(searchServiceProvider).clearTagCache(); } Future diagnosticsReport() async { final result = await ref.read(settingsServiceProvider).buildDiagnosticsReport( appVersion: appDisplayVersion, buildNumber: appBuildNumber, ); return result is Success ? result.data : '{}'; } Future diagnosticLogs() async { final settings = state.value ?? AppSettings.defaults; final persistent = settings.diagnosticLogLines; final runtime = AppLogger.lines; return [...persistent, ...runtime].join('\n'); } Future clearDiagnosticLogs() async { AppLogger.clear(); await ref.read(settingsServiceProvider).clearDiagnosticLogs(); ref.invalidateSelf(); } Future exportJson() async { final result = await ref.read(settingsServiceProvider).exportSettingsToJson(); return result is Success ? result.data : '{}'; } Future importJson(String json) async { await ref.read(settingsServiceProvider).importSettingsFromJson(json); ref.invalidate(appSettingsProvider); ref.invalidateSelf(); } }