Handle invalid appdata file.

This commit is contained in:
2025-05-20 15:40:30 +08:00
parent 1f2147ef72
commit 9ee82975e8

View File

@@ -3,6 +3,7 @@ import 'dart:convert';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:venera/foundation/app.dart'; import 'package:venera/foundation/app.dart';
import 'package:venera/foundation/log.dart';
import 'package:venera/utils/data_sync.dart'; import 'package:venera/utils/data_sync.dart';
import 'package:venera/utils/init.dart'; import 'package:venera/utils/init.dart';
import 'package:venera/utils/io.dart'; import 'package:venera/utils/io.dart';
@@ -110,21 +111,31 @@ class Appdata with Init {
if (!await file.exists()) { if (!await file.exists()) {
return; return;
} }
var json = jsonDecode(await file.readAsString()); try {
for (var key in (json['settings'] as Map<String, dynamic>).keys) { var json = jsonDecode(await file.readAsString());
if (json['settings'][key] != null) { for (var key in (json['settings'] as Map<String, dynamic>).keys) {
settings[key] = json['settings'][key]; if (json['settings'][key] != null) {
settings[key] = json['settings'][key];
}
} }
searchHistory = List.from(json['searchHistory']);
} }
searchHistory = List.from(json['searchHistory']); catch(e) {
var implicitDataFile = File(FilePath.join(dataPath, 'implicitData.json')); Log.error("Appdata", "Failed to load appdata", e);
if (await implicitDataFile.exists()) { Log.info("Appdata", "Resetting appdata");
try { file.deleteIgnoreError();
}
try {
var implicitDataFile = File(FilePath.join(dataPath, 'implicitData.json'));
if (await implicitDataFile.exists()) {
implicitData = jsonDecode(await implicitDataFile.readAsString()); implicitData = jsonDecode(await implicitDataFile.readAsString());
} }
catch(_) { }
// ignore catch (e) {
} Log.error("Appdata", "Failed to load implicit data", e);
Log.info("Appdata", "Resetting implicit data");
var implicitDataFile = File(FilePath.join(dataPath, 'implicitData.json'));
implicitDataFile.deleteIgnoreError();
} }
} }
} }