import 'dart:convert'; import 'package:encrypt/encrypt.dart'; import 'package:rhythm_box/services/wm_tools.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:uuid/uuid.dart'; abstract class KVStoreService { static SharedPreferences? _sharedPreferences; static SharedPreferences get sharedPreferences => _sharedPreferences!; static Future initialize() async { _sharedPreferences = await SharedPreferences.getInstance(); } static bool get askedForBatteryOptimization => sharedPreferences.getBool('asked_for_battery_optimization') ?? false; static Future setAskedForBatteryOptimization(bool value) async => await sharedPreferences.setBool('asked_for_battery_optimization', value); static List get recentSearches => sharedPreferences.getStringList('recent_searches') ?? []; static Future setRecentSearches(List value) async => await sharedPreferences.setStringList('recent_searches', value); static WindowSize? get windowSize { final raw = sharedPreferences.getString('window_size'); if (raw == null) { return null; } return WindowSize.fromJson(jsonDecode(raw)); } static Future setWindowSize(WindowSize value) async => await sharedPreferences.setString( 'window_size', jsonEncode( value.toJson(), ), ); static String get encryptionKey { final value = sharedPreferences.getString('encryption'); final key = const Uuid().v4(); if (value == null) { setEncryptionKey(key); return key; } return value; } static Future setEncryptionKey(String key) async { await sharedPreferences.setString('encryption', key); } static IV get ivKey { final iv = sharedPreferences.getString('iv'); final value = IV.fromSecureRandom(8); if (iv == null) { setIVKey(value); return value; } return IV.fromBase64(iv); } static Future setIVKey(IV iv) async { await sharedPreferences.setString('iv', iv.base64); } static double get volume => sharedPreferences.getDouble('volume') ?? 1.0; static Future setVolume(double value) async => await sharedPreferences.setDouble('volume', value); }