import 'dart:convert'; import 'package:logging/logging.dart'; import 'package:nc_photos/entity/exif.dart'; import 'package:nc_photos/type.dart'; import 'package:shared_preferences/shared_preferences.dart'; /// Compatibility helper for v32 class CompatV32 { static Future isPrefNeedMigration() async { final pref = await SharedPreferences.getInstance(); return pref.containsKey("accounts"); } static Future migratePref() async { final pref = await SharedPreferences.getInstance(); final jsons = pref.getStringList("accounts"); if (jsons == null) { return; } _log.info("[migratePref] Migrate Pref.accounts"); final newJsons = []; for (final j in jsons) { newJsons.add({ "account": jsonDecode(j), "settings": { "isEnableFaceRecognitionApp": true, }, }); } if (await pref.setStringList( "accounts2", newJsons.map((e) => jsonEncode(e)).toList())) { _log.info("[migratePref] Migrated ${newJsons.length} accounts"); await pref.remove("accounts"); } else { _log.severe("[migratePref] Failed while writing pref"); } } static bool isExifNeedMigration(Exif exif) => exif.data.containsKey("UserComment") || exif.data.containsKey("MakerNote"); static Exif migrateExif(Exif exif, String logFilename) { _log.info("[migrateExif] Migrate EXIF for file: $logFilename"); final newData = Map.of(exif.data); newData.removeWhere( (key, value) => key == "UserComment" || key == "MakerNote"); return Exif(newData); } static final _log = Logger("use_case.compat.v32.CompatV32"); }