mirror of
https://github.com/venera-app/venera.git
synced 2025-09-27 07:47:24 +00:00
Add a feature to allow saving custom reader settings for each comic. (#459)
* Add a feature to allow saving custom reader settings for each comic. * Comic-specific settings disabled by default
This commit is contained in:
@@ -26,8 +26,7 @@ class Appdata with Init {
|
||||
var data = jsonEncode(toJson());
|
||||
var file = File(FilePath.join(App.dataPath, 'appdata.json'));
|
||||
await file.writeAsString(data);
|
||||
}
|
||||
finally {
|
||||
} finally {
|
||||
_isSavingData = false;
|
||||
}
|
||||
if (sync) {
|
||||
@@ -57,10 +56,7 @@ class Appdata with Init {
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'settings': settings._data,
|
||||
'searchHistory': searchHistory,
|
||||
};
|
||||
return {'settings': settings._data, 'searchHistory': searchHistory};
|
||||
}
|
||||
|
||||
/// Following fields are related to device-specific data and should not be synced.
|
||||
@@ -95,8 +91,7 @@ class Appdata with Init {
|
||||
try {
|
||||
var file = File(FilePath.join(App.dataPath, 'implicitData.json'));
|
||||
await file.writeAsString(jsonEncode(implicitData));
|
||||
}
|
||||
finally {
|
||||
} finally {
|
||||
_isSavingData = false;
|
||||
}
|
||||
}
|
||||
@@ -104,10 +99,7 @@ class Appdata with Init {
|
||||
@override
|
||||
Future<void> doInit() async {
|
||||
var dataPath = (await getApplicationSupportDirectory()).path;
|
||||
var file = File(FilePath.join(
|
||||
dataPath,
|
||||
'appdata.json',
|
||||
));
|
||||
var file = File(FilePath.join(dataPath, 'appdata.json'));
|
||||
if (!await file.exists()) {
|
||||
return;
|
||||
}
|
||||
@@ -119,8 +111,7 @@ class Appdata with Init {
|
||||
}
|
||||
}
|
||||
searchHistory = List.from(json['searchHistory']);
|
||||
}
|
||||
catch(e) {
|
||||
} catch (e) {
|
||||
Log.error("Appdata", "Failed to load appdata", e);
|
||||
Log.info("Appdata", "Resetting appdata");
|
||||
file.deleteIgnoreError();
|
||||
@@ -130,8 +121,7 @@ class Appdata with Init {
|
||||
if (await implicitDataFile.exists()) {
|
||||
implicitData = jsonDecode(await implicitDataFile.readAsString());
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
} 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'));
|
||||
@@ -162,6 +152,7 @@ class Settings with ChangeNotifier {
|
||||
'blockedWords': [],
|
||||
'defaultSearchTarget': null,
|
||||
'autoPageTurningInterval': 5, // in seconds
|
||||
'enableComicSpecificSettings': false,
|
||||
'readerMode': 'galleryLeftToRight', // values of [ReaderMode]
|
||||
'readerScreenPicNumberForLandscape': 1, // 1 - 5
|
||||
'readerScreenPicNumberForPortrait': 1, // 1 - 5
|
||||
@@ -199,6 +190,7 @@ class Settings with ChangeNotifier {
|
||||
'enableDoubleTapToZoom': true,
|
||||
'reverseChapterOrder': false,
|
||||
'showSystemStatusBar': false,
|
||||
'comicSpecificSettings': <String, Map<String, dynamic>>{},
|
||||
};
|
||||
|
||||
operator [](String key) {
|
||||
@@ -212,6 +204,60 @@ class Settings with ChangeNotifier {
|
||||
}
|
||||
}
|
||||
|
||||
bool haveComicSpecificSettings(String comicId, String sourceKey, String key) {
|
||||
return _data['comicSpecificSettings']?["$comicId@$sourceKey"]?.containsKey(
|
||||
key,
|
||||
) ??
|
||||
false;
|
||||
}
|
||||
|
||||
dynamic getReaderSetting(String comicId, String sourceKey, String key) {
|
||||
if (key == 'enableComicSpecificSettings') {
|
||||
return _data['enableComicSpecificSettings'];
|
||||
}
|
||||
if (_data['enableComicSpecificSettings'] == false) {
|
||||
return _data[key];
|
||||
}
|
||||
return _data['comicSpecificSettings']["$comicId@$sourceKey"]?[key] ??
|
||||
_data[key];
|
||||
}
|
||||
|
||||
void setReaderSetting(
|
||||
String comicId,
|
||||
String sourceKey,
|
||||
String key,
|
||||
dynamic value,
|
||||
) {
|
||||
if (key == 'enableComicSpecificSettings') {
|
||||
_data['enableComicSpecificSettings'] = value;
|
||||
notifyListeners();
|
||||
return;
|
||||
}
|
||||
if (_data['enableComicSpecificSettings'] == false) {
|
||||
_data[key] = value;
|
||||
notifyListeners();
|
||||
return;
|
||||
}
|
||||
(_data['comicSpecificSettings'] as Map<String, dynamic>).putIfAbsent(
|
||||
"$comicId@$sourceKey",
|
||||
() => <String, dynamic>{},
|
||||
)[key] = value;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void resetComicReaderSettings(String comicId, String sourceKey) {
|
||||
final allComicSettings = _data['comicSpecificSettings'] as Map;
|
||||
if (allComicSettings.containsKey("$comicId@$sourceKey")) {
|
||||
allComicSettings.remove("$comicId@$sourceKey");
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void resetAllComicReaderSettings() {
|
||||
_data['comicSpecificSettings'] = <String, Map<String, dynamic>>{};
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return _data.toString();
|
||||
@@ -236,4 +282,5 @@ function processImage(image, cid, eid, page, sourceKey) {
|
||||
}
|
||||
''';
|
||||
|
||||
const _defaultSourceListUrl = "https://git.nyne.dev/nyne/venera-configs/raw/branch/main/index.json";
|
||||
const _defaultSourceListUrl =
|
||||
"https://git.nyne.dev/nyne/venera-configs/raw/branch/main/index.json";
|
||||
|
Reference in New Issue
Block a user