fix
This commit is contained in:
parent
b554953d34
commit
5b8245e85c
8 changed files with 37 additions and 109 deletions
|
|
@ -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]);
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
],
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue