This commit is contained in:
kodjomoustapha 2024-03-15 16:12:49 +01:00
parent b554953d34
commit 5b8245e85c
8 changed files with 37 additions and 109 deletions

View file

@ -8,13 +8,13 @@ class JsPreferences {
JsPreferences(this.runtime, this.source);
init() {
runtime.onMessage('getPreferenceValue', (dynamic args) async {
return await getPreferenceValueAsync(source!.id!, args[0]);
runtime.onMessage('getPreferenceValue', (dynamic args) {
return getPreferenceValue(source!.id!, args[0]);
});
runtime.onMessage('getPrefStringValue', (dynamic args) async {
runtime.onMessage('getPrefStringValue', (dynamic args) {
return getSourcePreferenceStringValue(source!.id!, args[0], args[1]);
});
runtime.onMessage('setPrefStringValue', (dynamic args) async {
runtime.onMessage('setPrefStringValue', (dynamic args) {
return setSourcePreferenceStringValue(source!.id!, args[0], args[1]);
});

View file

@ -63,8 +63,8 @@ var extention = new DefaultExtension();
Future<MPages> getPopular(int page) async {
_init();
final res = (await runtime.handlePromise(
await runtime.evaluateAsync('jsonStringify(() => extention.getPopular($page))')))
final res = (await runtime.handlePromise(await runtime
.evaluateAsync('jsonStringify(() => extention.getPopular($page))')))
.stringResult;
return MPages.fromJson(jsonDecode(res));
@ -72,8 +72,8 @@ var extention = new DefaultExtension();
Future<MPages> getLatestUpdates(int page) async {
_init();
final res = (await runtime.handlePromise(
await runtime.evaluateAsync('jsonStringify(() => extention.getLatestUpdates($page))')))
final res = (await runtime.handlePromise(await runtime.evaluateAsync(
'jsonStringify(() => extention.getLatestUpdates($page))')))
.stringResult;
return MPages.fromJson(jsonDecode(res));
@ -81,8 +81,8 @@ var extention = new DefaultExtension();
Future<MPages> search(String query, int page, String filters) async {
_init();
final res = (await runtime.handlePromise(await runtime
.evaluateAsync('jsonStringify(() => extention.search("$query",$page,$filters))')))
final res = (await runtime.handlePromise(await runtime.evaluateAsync(
'jsonStringify(() => extention.search("$query",$page,$filters))')))
.stringResult;
return MPages.fromJson(jsonDecode(res));
@ -90,8 +90,8 @@ var extention = new DefaultExtension();
Future<MManga> getDetail(String url) async {
_init();
final res = (await runtime.handlePromise(
await runtime.evaluateAsync('jsonStringify(() => extention.getDetail("$url"))')))
final res = (await runtime.handlePromise(await runtime
.evaluateAsync('jsonStringify(() => extention.getDetail("$url"))')))
.stringResult;
return MManga.fromJson(jsonDecode(res));
@ -99,8 +99,8 @@ var extention = new DefaultExtension();
Future<List<String>> getPageList(String url) async {
_init();
final res = (await runtime.handlePromise(
await runtime.evaluateAsync('jsonStringify(() => extention.getPageList("$url"))')))
final res = (await runtime.handlePromise(await runtime.evaluateAsync(
'jsonStringify(() => extention.getPageList("$url"))')))
.stringResult;
return jsonDecode(res);
@ -108,18 +108,18 @@ var extention = new DefaultExtension();
Future<List<Video>> getVideoList(String url) async {
_init();
final res = (await runtime.handlePromise(
await runtime.evaluateAsync('jsonStringify(() => extention.getVideoList("$url"))')))
final res = (await runtime.handlePromise(await runtime.evaluateAsync(
'jsonStringify(() => extention.getVideoList("$url"))')))
.stringResult;
return (jsonDecode(res) as List).map((e) => Video.fromJson(e)).toList();
}
Future<dynamic> getFilterList() async {
dynamic getFilterList() {
_init();
try {
final res = (await runtime.handlePromise(
await runtime.evaluateAsync('jsonStringify(() => extention.getFilterList())')))
final res = runtime
.evaluate('JSON.stringify(extention.getFilterList())')
.stringResult;
return FilterList(fromJsonFilterValuestoList(jsonDecode(res))).filters;
} catch (_) {
@ -127,11 +127,11 @@ var extention = new DefaultExtension();
}
}
Future<List<SourcePreference>> getSourcePreferences() async {
List<SourcePreference> getSourcePreferences() {
_init();
try {
final res = (await runtime.handlePromise(
await runtime.evaluateAsync('jsonStringify(() => extention.getSourcePreferences())')))
final res = runtime
.evaluate('JSON.stringify(extention.getSourcePreferences())')
.stringResult;
return (jsonDecode(res) as List)
.map((e) => SourcePreference.fromJson(e))

View file

@ -23,23 +23,10 @@ class ExtensionDetail extends ConsumerStatefulWidget {
class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
late Source source = widget.source;
List<SourcePreference> sourcePreference = [];
bool _isLoading = true;
@override
void initState() {
getSourcePreferenceAsync(source: source).then((value) {
if (mounted) {
setState(() {
sourcePreference = value
.map((e) => getSourcePreferenceEntry(e.key!, source.id!))
.toList();
_isLoading = false;
});
}
});
print(source.id);
super.initState();
}
late List<SourcePreference> sourcePreference =
getSourcePreference(source: source)
.map((e) => getSourcePreferenceEntry(e.key!, source.id!))
.toList();
@override
Widget build(BuildContext context) {
@ -224,9 +211,8 @@ class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
)),
),
),
if (!_isLoading)
SourcePreferenceWidget(
sourcePreference: sourcePreference, source: source)
SourcePreferenceWidget(
sourcePreference: sourcePreference, source: source)
],
),
),

View file

@ -85,37 +85,3 @@ void setSourcePreferenceStringValue(int sourceId, String key, String value) {
}
});
}
Future<dynamic> getPreferenceValueAsync(int sourceId, String key) async {
final sourcePreference = await getSourcePreferenceEntryAsync(key, sourceId);
if (sourcePreference.listPreference != null) {
final pref = sourcePreference.listPreference!;
return pref.entryValues![pref.valueIndex!];
} else if (sourcePreference.checkBoxPreference != null) {
return sourcePreference.checkBoxPreference!.value;
} else if (sourcePreference.switchPreferenceCompat != null) {
return sourcePreference.switchPreferenceCompat!.value;
} else if (sourcePreference.editTextPreference != null) {
return sourcePreference.editTextPreference!.value;
}
return sourcePreference.multiSelectListPreference!.values;
}
Future<SourcePreference> getSourcePreferenceEntryAsync(
String key, int sourceId) async {
SourcePreference? sourcePreference = isar.sourcePreferences
.filter()
.sourceIdEqualTo(sourceId)
.keyEqualTo(key)
.findFirstSync();
if (sourcePreference == null) {
final source = isar.sources.getSync(sourceId)!;
sourcePreference = (await getSourcePreferenceAsync(source: source))
.firstWhere((element) => element.key == key,
orElse: () => throw "Error when getting source preference");
setPreferenceSetting(sourcePreference, source);
}
return sourcePreference;
}

View file

@ -122,19 +122,12 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
AsyncValue<MPages?>? _getManga;
int _length = 0;
bool _isFiltering = false;
List<dynamic> filterList = [];
@override
void initState() {
getFilterList(source: widget.source).then((value) => setState(() {
filterList = value;
}));
super.initState();
}
@override
Widget build(BuildContext context) {
final supportsLatest =
ref.watch(supportsLatestProvider(source: widget.source));
final filterList = getFilterList(source: widget.source);
if (_selectedIndex == 2 && (_isSearch && _query.isNotEmpty) ||
_isFiltering) {
_getManga = ref.watch(searchProvider(
@ -339,7 +332,8 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
TextButton(
onPressed: () {
setState(() {
filters = filterList;
filters = getFilterList(
source: widget.source);
});
},
child: Text(l10n.reset),

View file

@ -171,6 +171,9 @@ class _SeachFormTextFieldWidgetState extends State<SeachFormTextFieldWidget> {
late final _controller = TextEditingController(text: widget.text);
@override
Widget build(BuildContext context) {
if (widget.text.isEmpty) {
_controller.clear();
}
return Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(

View file

@ -7,7 +7,7 @@ import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/eval/dart/runtime/runtime.dart';
import 'package:mangayomi/sources/source_test.dart';
Future<List<dynamic>> getFilterList({required Source source}) async {
List<dynamic> getFilterList({required Source source}) {
List<dynamic> filterList = [];
if (source.sourceCodeLanguage == SourceCodeLanguage.dart) {
try {
@ -26,7 +26,7 @@ Future<List<dynamic>> getFilterList({required Source source}) async {
return [];
}
} else {
filterList = (await JsExtensionService(source).getFilterList()).filters;
filterList = (JsExtensionService(source).getFilterList()).filters;
}
return filterList;

View file

@ -10,27 +10,6 @@ import 'package:mangayomi/eval/dart/runtime/runtime.dart';
List<SourcePreference> getSourcePreference({required Source source}) {
List<SourcePreference> sourcePreference = [];
try {
final bytecode = compilerEval(source.sourceCode!);
final runtime = runtimeEval(bytecode);
var res = runtime.executeLib('package:mangayomi/main.dart', 'main',
[$MSource.wrap(source.toMSource())]);
sourcePreference = (res as MProvider)
.getSourcePreferences()
.map((e) => (e is $Value ? e.$reified : e) as SourcePreference)
.toList();
} catch (_) {
return [];
}
return sourcePreference;
}
Future<List<SourcePreference>> getSourcePreferenceAsync(
{required Source source}) async {
List<SourcePreference> sourcePreference = [];
if (source.sourceCodeLanguage == SourceCodeLanguage.dart) {
try {
final bytecode = compilerEval(source.sourceCode!);
@ -47,7 +26,7 @@ Future<List<SourcePreference>> getSourcePreferenceAsync(
return [];
}
} else {
sourcePreference = await JsExtensionService(source).getSourcePreferences();
sourcePreference = JsExtensionService(source).getSourcePreferences();
}
return sourcePreference;