nc-photos/app/lib/use_case/compat/v32.dart
2022-04-06 02:37:58 +08:00

53 lines
1.7 KiB
Dart

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<bool> isPrefNeedMigration() async {
final pref = await SharedPreferences.getInstance();
return pref.containsKey("accounts");
}
static Future<void> migratePref() async {
final pref = await SharedPreferences.getInstance();
final jsons = pref.getStringList("accounts");
if (jsons == null) {
return;
}
_log.info("[migratePref] Migrate Pref.accounts");
final newJsons = <JsonObj>[];
for (final j in jsons) {
newJsons.add(<String, dynamic>{
"account": jsonDecode(j),
"settings": <String, dynamic>{
"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");
}