From f0cf52813a5a87fddc89068df8d9949355cd9c70 Mon Sep 17 00:00:00 2001 From: Yegor Shovkun Date: Sat, 14 Dec 2024 13:55:40 +0200 Subject: [PATCH] refactor: refactor extension services --- lib/eval/dart/bridge/document.dart | 4 +- lib/eval/dart/bridge/element.dart | 10 +- lib/eval/dart/bridge/filter.dart | 2 +- lib/eval/dart/bridge/http.dart | 2 +- lib/eval/dart/bridge/m_chapter.dart | 2 +- lib/eval/dart/bridge/m_manga.dart | 4 +- lib/eval/dart/bridge/m_pages.dart | 4 +- lib/eval/dart/bridge/m_provider.dart | 10 +- lib/eval/dart/bridge/m_source.dart | 2 +- lib/eval/dart/bridge/source_preference.dart | 2 +- lib/eval/dart/service.dart | 52 ++++--- lib/eval/interface.dart | 35 +++++ lib/eval/javascript/extractors.dart | 2 +- lib/eval/javascript/service.dart | 138 +++++++++--------- lib/eval/javascript/utils.dart | 2 +- lib/eval/lib.dart | 12 ++ lib/eval/{dart => }/model/document.dart | 2 +- lib/eval/{dart => }/model/element.dart | 0 lib/eval/{dart => }/model/filter.dart | 54 ++++--- lib/eval/{dart => }/model/m_bridge.dart | 2 +- lib/eval/{dart => }/model/m_chapter.dart | 0 lib/eval/{dart => }/model/m_manga.dart | 2 +- lib/eval/{dart => }/model/m_pages.dart | 2 +- lib/eval/{dart => }/model/m_provider.dart | 6 +- lib/eval/{dart => }/model/m_source.dart | 0 lib/eval/{dart => }/model/m_video.dart | 0 .../{dart => }/model/source_preference.dart | 0 .../{dart => }/model/source_preference.g.dart | 0 lib/models/source.dart | 2 +- lib/modules/browse/extension/edit_code.dart | 45 +++--- .../browse/extension/extension_detail.dart | 4 +- .../extension_preferences_providers.dart | 2 +- .../extension/widgets/create_extension.dart | 2 +- .../widgets/source_preference_widget.dart | 2 +- .../global_search/global_search_screen.dart | 4 +- lib/modules/library/library_screen.dart | 2 +- .../manga/detail/manga_detail_view.dart | 2 +- .../update_manga_detail_providers.dart | 4 +- lib/modules/manga/home/manga_home_screen.dart | 4 +- .../manga/home/widget/filter_widget.dart | 2 +- lib/modules/manga/reader/reader_view.dart | 2 +- .../backup_and_restore.dart | 2 +- .../backup_and_restore/providers/backup.dart | 2 +- .../backup_and_restore/providers/restore.dart | 4 +- lib/modules/updates/updates_screen.dart | 2 +- .../widgets/manga_image_card_widget.dart | 2 +- lib/providers/storage_provider.dart | 2 +- .../anime_extractors/gogocdn_extractor.dart | 2 +- lib/services/fetch_sources_list.dart | 19 +-- lib/services/get_chapter_pages.dart | 10 +- lib/services/get_chapter_pages.g.dart | 2 +- lib/services/get_detail.dart | 13 +- lib/services/get_detail.g.dart | 2 +- lib/services/get_filter_list.dart | 13 +- lib/services/get_latest_updates.dart | 13 +- lib/services/get_latest_updates.g.dart | 2 +- lib/services/get_popular.dart | 14 +- lib/services/get_popular.g.dart | 2 +- lib/services/get_source_baseurl.dart | 15 +- lib/services/get_source_baseurl.g.dart | 2 +- lib/services/get_source_preference.dart | 15 +- lib/services/get_video_list.dart | 21 +-- lib/services/get_video_list.g.dart | 2 +- lib/services/http/m_client.dart | 4 +- lib/services/search.dart | 24 ++- lib/services/search.g.dart | 2 +- lib/services/search_.dart | 23 ++- lib/services/supports_latest.dart | 11 +- lib/services/supports_latest.g.dart | 2 +- lib/services/sync_server.dart | 4 +- lib/services/trackers/anilist.dart | 2 +- lib/services/trackers/kitsu.dart | 2 +- lib/utils/headers.dart | 23 ++- lib/utils/headers.g.dart | 2 +- 74 files changed, 337 insertions(+), 351 deletions(-) create mode 100644 lib/eval/interface.dart create mode 100644 lib/eval/lib.dart rename lib/eval/{dart => }/model/document.dart (96%) rename lib/eval/{dart => }/model/element.dart (100%) rename lib/eval/{dart => }/model/filter.dart (78%) rename lib/eval/{dart => }/model/m_bridge.dart (99%) rename lib/eval/{dart => }/model/m_chapter.dart (100%) rename lib/eval/{dart => }/model/m_manga.dart (96%) rename lib/eval/{dart => }/model/m_pages.dart (89%) rename lib/eval/{dart => }/model/m_provider.dart (76%) rename lib/eval/{dart => }/model/m_source.dart (100%) rename lib/eval/{dart => }/model/m_video.dart (100%) rename lib/eval/{dart => }/model/source_preference.dart (100%) rename lib/eval/{dart => }/model/source_preference.g.dart (100%) diff --git a/lib/eval/dart/bridge/document.dart b/lib/eval/dart/bridge/document.dart index 744c179..4256ab3 100644 --- a/lib/eval/dart/bridge/document.dart +++ b/lib/eval/dart/bridge/document.dart @@ -3,8 +3,8 @@ import 'package:dart_eval/dart_eval_bridge.dart'; import 'package:dart_eval/stdlib/core.dart'; import 'package:html/dom.dart'; import 'package:mangayomi/eval/dart/bridge/element.dart'; -import 'package:mangayomi/eval/dart/model/document.dart'; -import 'package:mangayomi/eval/dart/model/element.dart'; +import 'package:mangayomi/eval/model/document.dart'; +import 'package:mangayomi/eval/model/element.dart'; class $MDocument implements MDocument, $Instance { $MDocument.wrap(this.$value) : _superclass = $Object($value); diff --git a/lib/eval/dart/bridge/element.dart b/lib/eval/dart/bridge/element.dart index aec03d1..ab1ded5 100644 --- a/lib/eval/dart/bridge/element.dart +++ b/lib/eval/dart/bridge/element.dart @@ -1,7 +1,7 @@ import 'package:dart_eval/dart_eval_bridge.dart'; import 'package:dart_eval/stdlib/core.dart'; import 'package:html/dom.dart'; -import 'package:mangayomi/eval/dart/model/element.dart'; +import 'package:mangayomi/eval/model/element.dart'; class $MElement implements MElement, $Instance { $MElement.wrap(this.$value) : _superclass = $Object($value); @@ -192,48 +192,56 @@ class $MElement implements MElement, $Instance { } static const $Function __attr = $Function(_attr); + static $Value? _attr(final Runtime runtime, final $Value? target, final List<$Value?> args) { final res = (target!.$value as MElement).attr(args[0]?.$value ?? ""); return res == null ? const $null() : $String(res); } static const $Function __select = $Function(_select); + static $Value? _select(final Runtime runtime, final $Value? target, final List<$Value?> args) { final res = (target!.$value as MElement).select(args[0]?.$value); return res == null ? const $null() : $List.wrap(res.map((e) => $MElement.wrap(e)).toList()); } static const $Function __selectFirst = $Function(_selectFirst); + static $Value? _selectFirst(final Runtime runtime, final $Value? target, final List<$Value?> args) { final res = (target!.$value as MElement).selectFirst(args[0]?.$value); return res == null ? const $null() : $MElement.wrap(res); } static const $Function __getElementsByClassName = $Function(_getElementsByClassName); + static $Value? _getElementsByClassName(final Runtime runtime, final $Value? target, final List<$Value?> args) { final res = (target!.$value as MElement).getElementsByClassName(args[0]?.$value); return res == null ? const $null() : $List.wrap(res.map((e) => $MElement.wrap(e)).toList()); } static const $Function __getElementsByTagName = $Function(_getElementsByTagName); + static $Value? _getElementsByTagName(final Runtime runtime, final $Value? target, final List<$Value?> args) { final res = (target!.$value as MElement).getElementsByTagName(args[0]?.$value); return res == null ? const $null() : $List.wrap(res.map((e) => $MElement.wrap(e)).toList()); } static const $Function __xpath = $Function(_xpath); + static $Value? _xpath(final Runtime runtime, final $Value? target, final List<$Value?> args) { final res = (target!.$value as MElement).xpath(args[0]?.$value); return res == null ? const $null() : $List.wrap(res.map((e) => $String(e)).toList()); } static const $Function __xpathFirst = $Function(_xpathFirst); + static $Value? _xpathFirst(final Runtime runtime, final $Value? target, final List<$Value?> args) { final res = (target!.$value as MElement).xpathFirst(args[0]?.$value); return res == null ? const $null() : $String(res); } static const $Function __hasAttr = $Function(_hasAttr); + static $Value? _hasAttr(final Runtime runtime, final $Value? target, final List<$Value?> args) { final res = (target!.$value as MElement).attr(args[0]?.$value ?? ""); return res == null ? const $null() : $String(res); diff --git a/lib/eval/dart/bridge/filter.dart b/lib/eval/dart/bridge/filter.dart index 64d0221..c723af7 100644 --- a/lib/eval/dart/bridge/filter.dart +++ b/lib/eval/dart/bridge/filter.dart @@ -1,6 +1,6 @@ import 'package:dart_eval/dart_eval_bridge.dart'; import 'package:dart_eval/stdlib/core.dart'; -import 'package:mangayomi/eval/dart/model/filter.dart'; +import 'package:mangayomi/eval/model/filter.dart'; class $FilterList implements FilterList, $Instance { $FilterList.wrap(this.$value) : _superclass = $Object($value); diff --git a/lib/eval/dart/bridge/http.dart b/lib/eval/dart/bridge/http.dart index 029e2a1..08ea353 100644 --- a/lib/eval/dart/bridge/http.dart +++ b/lib/eval/dart/bridge/http.dart @@ -4,7 +4,7 @@ import 'package:dart_eval/stdlib/core.dart'; import 'package:flutter/foundation.dart'; import 'package:http_interceptor/http_interceptor.dart'; import 'package:mangayomi/eval/dart/bridge/m_source.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/services/http/m_client.dart'; /// dart_eval wrapper for [InterceptedClient] diff --git a/lib/eval/dart/bridge/m_chapter.dart b/lib/eval/dart/bridge/m_chapter.dart index 278d4dc..5e177e8 100644 --- a/lib/eval/dart/bridge/m_chapter.dart +++ b/lib/eval/dart/bridge/m_chapter.dart @@ -1,6 +1,6 @@ import 'package:dart_eval/dart_eval_bridge.dart'; import 'package:dart_eval/stdlib/core.dart'; -import 'package:mangayomi/eval/dart/model/m_chapter.dart'; +import 'package:mangayomi/eval/model/m_chapter.dart'; class $MChapter implements MChapter, $Instance { $MChapter.wrap(this.$value) : _superclass = $Object($value); diff --git a/lib/eval/dart/bridge/m_manga.dart b/lib/eval/dart/bridge/m_manga.dart index 6e70583..69d43ac 100644 --- a/lib/eval/dart/bridge/m_manga.dart +++ b/lib/eval/dart/bridge/m_manga.dart @@ -2,8 +2,8 @@ import 'package:dart_eval/dart_eval_bridge.dart'; import 'package:dart_eval/stdlib/core.dart'; import 'package:mangayomi/eval/dart/bridge/m_chapter.dart'; import 'package:mangayomi/eval/dart/bridge/m_status.dart'; -import 'package:mangayomi/eval/dart/model/m_chapter.dart'; -import 'package:mangayomi/eval/dart/model/m_manga.dart'; +import 'package:mangayomi/eval/model/m_chapter.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/utils/extensions/string_extensions.dart'; diff --git a/lib/eval/dart/bridge/m_pages.dart b/lib/eval/dart/bridge/m_pages.dart index fd5ff3d..1249cd0 100644 --- a/lib/eval/dart/bridge/m_pages.dart +++ b/lib/eval/dart/bridge/m_pages.dart @@ -1,8 +1,8 @@ import 'package:dart_eval/dart_eval_bridge.dart'; import 'package:dart_eval/stdlib/core.dart'; import 'package:mangayomi/eval/dart/bridge/m_manga.dart'; -import 'package:mangayomi/eval/dart/model/m_manga.dart'; -import 'package:mangayomi/eval/dart/model/m_pages.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; +import 'package:mangayomi/eval/model/m_pages.dart'; class $MPages implements MPages, $Instance { $MPages.wrap(this.$value) : _superclass = $Object($value); diff --git a/lib/eval/dart/bridge/m_provider.dart b/lib/eval/dart/bridge/m_provider.dart index d183bbc..72765b7 100644 --- a/lib/eval/dart/bridge/m_provider.dart +++ b/lib/eval/dart/bridge/m_provider.dart @@ -9,11 +9,11 @@ import 'package:mangayomi/eval/dart/bridge/m_pages.dart'; import 'package:mangayomi/eval/dart/bridge/m_status.dart'; import 'package:mangayomi/eval/dart/bridge/m_track.dart'; import 'package:mangayomi/eval/dart/bridge/m_video.dart'; -import 'package:mangayomi/eval/dart/model/filter.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; -import 'package:mangayomi/eval/dart/model/m_pages.dart'; -import 'package:mangayomi/eval/dart/model/m_manga.dart'; -import 'package:mangayomi/eval/dart/model/m_provider.dart'; +import 'package:mangayomi/eval/model/filter.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; +import 'package:mangayomi/eval/model/m_pages.dart'; +import 'package:mangayomi/eval/model/m_provider.dart'; import 'package:mangayomi/eval/javascript/http.dart'; import 'package:mangayomi/models/video.dart'; import 'package:mangayomi/modules/browse/extension/providers/extension_preferences_providers.dart'; diff --git a/lib/eval/dart/bridge/m_source.dart b/lib/eval/dart/bridge/m_source.dart index a511556..f4e0766 100644 --- a/lib/eval/dart/bridge/m_source.dart +++ b/lib/eval/dart/bridge/m_source.dart @@ -1,6 +1,6 @@ import 'package:dart_eval/dart_eval_bridge.dart'; import 'package:dart_eval/stdlib/core.dart'; -import 'package:mangayomi/eval/dart/model/m_source.dart'; +import 'package:mangayomi/eval/model/m_source.dart'; class $MSource implements MSource, $Instance { $MSource.wrap(this.$value) : _superclass = $Object($value); diff --git a/lib/eval/dart/bridge/source_preference.dart b/lib/eval/dart/bridge/source_preference.dart index c3b50b7..2cbddd4 100644 --- a/lib/eval/dart/bridge/source_preference.dart +++ b/lib/eval/dart/bridge/source_preference.dart @@ -1,7 +1,7 @@ import 'package:dart_eval/dart_eval_bridge.dart'; import 'package:dart_eval/stdlib/core.dart'; import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/source_preference.dart'; +import 'package:mangayomi/eval/model/source_preference.dart'; class $CheckBoxPreference implements SourcePreference, $Instance { $CheckBoxPreference.wrap(this.$value) : _superclass = $Object($value); diff --git a/lib/eval/dart/service.dart b/lib/eval/dart/service.dart index e7fce71..a479726 100644 --- a/lib/eval/dart/service.dart +++ b/lib/eval/dart/service.dart @@ -2,35 +2,40 @@ import 'package:dart_eval/dart_eval_bridge.dart'; import 'package:dart_eval/stdlib/core.dart'; import 'package:mangayomi/eval/dart/bridge/m_source.dart'; import 'package:mangayomi/eval/dart/compiler/compiler.dart'; -import 'package:mangayomi/eval/dart/model/m_provider.dart'; import 'package:mangayomi/eval/dart/runtime/runtime.dart'; +import 'package:mangayomi/eval/model/filter.dart'; import 'package:mangayomi/eval/javascript/http.dart'; -import 'package:mangayomi/eval/dart/model/filter.dart'; -import 'package:mangayomi/eval/dart/model/m_manga.dart'; -import 'package:mangayomi/eval/dart/model/m_pages.dart'; -import 'package:mangayomi/eval/dart/model/source_preference.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; +import 'package:mangayomi/eval/model/m_pages.dart'; +import 'package:mangayomi/eval/model/m_provider.dart'; +import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/models/page.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/video.dart'; -class DartExtensionService { - late Source? source; +import '../interface.dart'; + +class DartExtensionService implements ExtensionService { + @override + late Source source; + DartExtensionService(this.source); MProvider _executeLib() { - final bytecode = compilerEval(source!.sourceCode!); + final bytecode = compilerEval(source.sourceCode!); final runtime = runtimeEval(bytecode); - return runtime.executeLib('package:mangayomi/main.dart', 'main', [$MSource.wrap(source!.toMSource())]) as MProvider; + return runtime.executeLib('package:mangayomi/main.dart', 'main', [$MSource.wrap(source.toMSource())]) as MProvider; } + @override Map getHeaders() { Map headers = {}; try { - final bytecode = compilerEval(source!.sourceCode!); + final bytecode = compilerEval(source.sourceCode!); final runtime = runtimeEval(bytecode); - runtime.args = [$String(source!.baseUrl!)]; + runtime.args = [$String(source.baseUrl!)]; var res = runtime.executeLib( 'package:mangayomi/main.dart', 'getHeader', @@ -52,16 +57,19 @@ class DartExtensionService { return headers; } + @override String get sourceBaseUrl { String? baseUrl; try { baseUrl = _executeLib().baseUrl; - } catch (e) { - baseUrl = source!.baseUrl; + } catch (_) { + // } - return baseUrl!; + + return baseUrl == null || baseUrl.isEmpty ? source.baseUrl! : baseUrl; } + @override bool get supportsLatest { bool? supportsLatest; try { @@ -72,36 +80,44 @@ class DartExtensionService { return supportsLatest; } + @override Future getPopular(int page) async { return await _executeLib().getPopular(page); } + @override Future getLatestUpdates(int page) async { return await _executeLib().getLatestUpdates(page); } - Future search(String query, int page, List filterList) async { - return await _executeLib().search(query, page, FilterList(filterList)); + @override + Future search(String query, int page, List filters) async { + return await _executeLib().search(query, page, FilterList(filters)); } + @override Future getDetail(String url) async { return await _executeLib().getDetail(url); } + @override Future> getPageList(String url) async { return (await _executeLib().getPageList(url)) .map((e) => e is String ? PageUrl(e.toString().trim()) : PageUrl.fromJson((e as Map).toMapStringDynamic!)) .toList(); } + @override Future> getVideoList(String url) async { return await _executeLib().getVideoList(url); } - List getFilterList() { - return _executeLib().getFilterList().map((e) => e is $Value ? e.$reified : e).toList(); + @override + FilterList getFilterList() { + return FilterList(_executeLib().getFilterList().map((e) => e is $Value ? e.$reified : e).toList()); } + @override List getSourcePreferences() { try { return _executeLib() diff --git a/lib/eval/interface.dart b/lib/eval/interface.dart new file mode 100644 index 0000000..441487d --- /dev/null +++ b/lib/eval/interface.dart @@ -0,0 +1,35 @@ +import 'package:mangayomi/models/page.dart'; +import 'package:mangayomi/models/source.dart'; +import 'package:mangayomi/models/video.dart'; + +import 'model/filter.dart'; +import 'model/m_manga.dart'; +import 'model/m_pages.dart'; +import 'model/source_preference.dart'; + +abstract interface class ExtensionService { + late Source source; + + ExtensionService(this.source); + + String get sourceBaseUrl; + bool get supportsLatest; + + Map getHeaders(); + + Future getPopular(int page); + + Future getLatestUpdates(int page); + + Future search(String query, int page, List filters); + + Future getDetail(String url); + + Future> getPageList(String url); + + Future> getVideoList(String url); + + FilterList getFilterList(); + + List getSourcePreferences(); +} diff --git a/lib/eval/javascript/extractors.dart b/lib/eval/javascript/extractors.dart index 6272c89..762810a 100644 --- a/lib/eval/javascript/extractors.dart +++ b/lib/eval/javascript/extractors.dart @@ -1,6 +1,6 @@ import 'dart:convert'; import 'package:flutter_qjs/flutter_qjs.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/eval/javascript/http.dart'; import 'package:mangayomi/models/video.dart'; diff --git a/lib/eval/javascript/service.dart b/lib/eval/javascript/service.dart index c66e59d..ed7dc59 100644 --- a/lib/eval/javascript/service.dart +++ b/lib/eval/javascript/service.dart @@ -1,21 +1,26 @@ import 'dart:convert'; + import 'package:flutter_qjs/flutter_qjs.dart'; import 'package:mangayomi/eval/javascript/dom_selector.dart'; import 'package:mangayomi/eval/javascript/extractors.dart'; import 'package:mangayomi/eval/javascript/http.dart'; import 'package:mangayomi/eval/javascript/preferences.dart'; import 'package:mangayomi/eval/javascript/utils.dart'; -import 'package:mangayomi/eval/dart/model/filter.dart'; -import 'package:mangayomi/eval/dart/model/m_manga.dart'; -import 'package:mangayomi/eval/dart/model/m_pages.dart'; -import 'package:mangayomi/eval/dart/model/source_preference.dart'; +import 'package:mangayomi/eval/model/filter.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; +import 'package:mangayomi/eval/model/m_pages.dart'; +import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/models/page.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/video.dart'; -class JsExtensionService { +import '../interface.dart'; + +class JsExtensionService implements ExtensionService { late JavascriptRuntime runtime; - late Source? source; + @override + late Source source; + JsExtensionService(this.source); void _init() { @@ -29,7 +34,7 @@ class JsExtensionService { runtime.evaluate(''' class MProvider { get source() { - return JSON.parse('${jsonEncode(source!.toMSource().toJson())}'); + return JSON.parse('${jsonEncode(source.toMSource().toJson())}'); } get supportsLatest() { throw new Error("supportsLatest not implemented"); @@ -66,83 +71,57 @@ async function jsonStringify(fn) { return JSON.stringify(await fn()); } '''); - runtime.evaluate('''${source!.sourceCode} + runtime.evaluate('''${source.sourceCode} var extention = new DefaultExtension(); '''); } - Map getHeaders(String url) { - _init(); - try { - final res = runtime.evaluate('JSON.stringify(extention.getHeaders(`$url`))').stringResult; - - return (jsonDecode(res) as Map).toMapStringString!; - } catch (_) { - return {}; - } + @override + Map getHeaders() { + return _extensionCall('getHeaders(`${source.baseUrl ?? ''}`)', {}).toMapStringString!; } + @override bool get supportsLatest { - _init(); - try { - return jsonDecode(runtime.evaluate('JSON.stringify(extention.supportsLatest)').stringResult) as bool; - } catch (e) { - return true; - } + return _extensionCall('supportsLatest', true); } + @override + String get sourceBaseUrl { + return source.baseUrl!; + } + + @override Future getPopular(int page) async { - _init(); - final res = - (await runtime.handlePromise(await runtime.evaluateAsync('jsonStringify(() => extention.getPopular($page))'))) - .stringResult; - - return MPages.fromJson(jsonDecode(res)); + return MPages.fromJson(await _extensionCallAsync('getPopular($page)', {})); } + @override Future getLatestUpdates(int page) async { - _init(); - final res = (await runtime - .handlePromise(await runtime.evaluateAsync('jsonStringify(() => extention.getLatestUpdates($page))'))) - .stringResult; - - return MPages.fromJson(jsonDecode(res)); + return MPages.fromJson(await _extensionCallAsync('getLatestUpdates($page)', {})); } - Future search(String query, int page, String filters) async { - _init(); - final res = (await runtime.handlePromise( - await runtime.evaluateAsync('jsonStringify(() => extention.search("$query",$page,$filters))'))) - .stringResult; - - return MPages.fromJson(jsonDecode(res)); + @override + Future search(String query, int page, List filters) async { + return MPages.fromJson( + await _extensionCallAsync('search("$query",$page,${jsonEncode(filterValuesListToJson(filters))})', {})); } + @override Future getDetail(String url) async { - _init(); - final res = - (await runtime.handlePromise(await runtime.evaluateAsync('jsonStringify(() => extention.getDetail(`$url`))'))) - .stringResult; - return MManga.fromJson(jsonDecode(res)); + return MManga.fromJson(await _extensionCallAsync('getDetail(`$url`)', {})); } + @override Future> getPageList(String url) async { - _init(); - final res = - (await runtime.handlePromise(await runtime.evaluateAsync('jsonStringify(() => extention.getPageList(`$url`))'))) - .stringResult; - return (jsonDecode(res) as List) - .map((e) => e is String ? PageUrl(e.toString().trim()) : PageUrl.fromJson((e as Map).toMapStringDynamic!)) + return (await _extensionCallAsync('getPageList(`$url`)', [])) + .map((e) => e is String ? PageUrl(e.trim()) : PageUrl.fromJson((e as Map).toMapStringDynamic!)) .toList(); } + @override Future> getVideoList(String url) async { - _init(); - final res = (await runtime - .handlePromise(await runtime.evaluateAsync('jsonStringify(() => extention.getVideoList(`$url`))'))) - .stringResult; - - return (jsonDecode(res) as List) + return (await _extensionCallAsync('getVideoList(`$url`)', [])) .where((element) => element['url'] != null && element['originalUrl'] != null) .map((e) => Video.fromJson(e)) .toList() @@ -150,23 +129,48 @@ var extention = new DefaultExtension(); .toList(); } - dynamic getFilterList() { + @override + FilterList getFilterList() { + return FilterList(fromJsonFilterValuesToList(_extensionCall('getFilterList()', []))); + } + + @override + List getSourcePreferences() { + return _extensionCall('getSourcePreferences()', []) + .map((e) => SourcePreference.fromJson(e)..sourceId = source.id) + .toList(); + } + + + T _extensionCall(String call, T def) { _init(); + try { - final res = runtime.evaluate('JSON.stringify(extention.getFilterList())').stringResult; - return FilterList(fromJsonFilterValuestoList(jsonDecode(res))); + final res = runtime.evaluate('JSON.stringify(extention.`$call`)'); + + return jsonDecode(res.stringResult) as T; } catch (_) { - return []; + if (def != null) { + return def; + } + + rethrow; } } - List getSourcePreferences() { + Future _extensionCallAsync(String call, T def) async { _init(); + try { - final res = runtime.evaluate('JSON.stringify(extention.getSourcePreferences())').stringResult; - return (jsonDecode(res) as List).map((e) => SourcePreference.fromJson(e)..sourceId = source!.id).toList(); + final promised = await runtime.handlePromise(await runtime.evaluateAsync('jsonStringify(() => extention.$call)')); + + return jsonDecode(promised.stringResult) as T; } catch (_) { - return []; + if (def != null) { + return def; + } + + rethrow; } } } diff --git a/lib/eval/javascript/utils.dart b/lib/eval/javascript/utils.dart index 1a649b9..4357e96 100644 --- a/lib/eval/javascript/utils.dart +++ b/lib/eval/javascript/utils.dart @@ -1,6 +1,6 @@ import 'package:flutter_qjs/flutter_qjs.dart'; import 'package:js_packer/js_packer.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/utils/cryptoaes/js_unpacker.dart'; import 'package:mangayomi/utils/log/log.dart'; diff --git a/lib/eval/lib.dart b/lib/eval/lib.dart new file mode 100644 index 0000000..e185a75 --- /dev/null +++ b/lib/eval/lib.dart @@ -0,0 +1,12 @@ +import 'package:mangayomi/eval/interface.dart'; +import 'package:mangayomi/models/source.dart'; + +import 'dart/service.dart'; +import 'javascript/service.dart'; + +ExtensionService getExtensionService(Source source) { + return switch (source.sourceCodeLanguage) { + SourceCodeLanguage.dart => DartExtensionService(source), + SourceCodeLanguage.javascript => JsExtensionService(source), + }; +} diff --git a/lib/eval/dart/model/document.dart b/lib/eval/model/document.dart similarity index 96% rename from lib/eval/dart/model/document.dart rename to lib/eval/model/document.dart index 7c4ca41..974dc76 100644 --- a/lib/eval/dart/model/document.dart +++ b/lib/eval/model/document.dart @@ -1,5 +1,5 @@ import 'package:html/dom.dart'; -import 'package:mangayomi/eval/dart/model/element.dart'; +import 'package:mangayomi/eval/model/element.dart'; import 'package:mangayomi/utils/extensions/dom_extensions.dart'; class MDocument { diff --git a/lib/eval/dart/model/element.dart b/lib/eval/model/element.dart similarity index 100% rename from lib/eval/dart/model/element.dart rename to lib/eval/model/element.dart diff --git a/lib/eval/dart/model/filter.dart b/lib/eval/model/filter.dart similarity index 78% rename from lib/eval/dart/model/filter.dart rename to lib/eval/model/filter.dart index dcce0d0..d9ca494 100644 --- a/lib/eval/dart/model/filter.dart +++ b/lib/eval/model/filter.dart @@ -4,7 +4,7 @@ class FilterList { List filters; FilterList(this.filters); factory FilterList.fromJson(Map json) { - return FilterList(fromJsonFilterValuestoList(json['filters'])); + return FilterList(fromJsonFilterValuesToList(json['filters'])); } Map toJson() => {'filters': filterValuesListToJson(filters)}; } @@ -19,7 +19,7 @@ class SelectFilter { SelectFilter(this.type, this.name, this.state, this.values, this.typeName); factory SelectFilter.fromJson(Map json) { return SelectFilter( - json['type'], json['name'], json['state'] ?? 0, fromJsonFilterValuestoList(json['values']), json['type_name']); + json['type'], json['name'], json['state'] ?? 0, fromJsonFilterValuesToList(json['values']), json['type_name']); } Map toJson() => { 'type': type, @@ -89,7 +89,7 @@ class SortFilter { json['type'], json['name'], json['state'] == null ? SortState(0, false, "") : SortState.fromJson(json['state']), - fromJsonFilterValuestoList(json['values']), + fromJsonFilterValuesToList(json['values']), json['type_name']); } Map toJson() => { @@ -136,7 +136,7 @@ class GroupFilter { GroupFilter(this.type, this.name, this.state, this.typeName); factory GroupFilter.fromJson(Map json) { - return GroupFilter(json['type'], json['name'], fromJsonFilterValuestoList(json['state']), json['type_name']); + return GroupFilter(json['type'], json['name'], fromJsonFilterValuesToList(json['state']), json['type_name']); } Map toJson() => {'type': type, 'name': name, 'state': filterValuesListToJson(state), 'type_name': "GroupFilter"}; @@ -157,31 +157,27 @@ class CheckBoxFilter { {'type': type, 'name': name, 'value': value, 'state': state, 'type_name': "CheckBox"}; } -List fromJsonFilterValuestoList(List list) { - return list.map((e) { - final map = (e as Map).toMapStringDynamic!; - if (map['type_name'] == 'TriState') { - return TriStateFilter.fromJson(map.toMapStringDynamic!); - } else if (map['type_name'] == 'CheckBox') { - return CheckBoxFilter.fromJson(map.toMapStringDynamic!); - } else if (map['type_name'] == 'SelectOption') { - return SelectFilterOption.fromJson(map.toMapStringDynamic!); - } else if (map['type_name'] == 'SelectFilter') { - return SelectFilter.fromJson(map.toMapStringDynamic!); - } else if (map['type_name'] == 'SeparatorFilter') { - return SeparatorFilter.fromJson(map.toMapStringDynamic!); - } else if (map['type_name'] == 'HeaderFilter') { - return HeaderFilter.fromJson(map.toMapStringDynamic!); - } else if (map['type_name'] == 'TextFilter') { - return TextFilter.fromJson(map.toMapStringDynamic!); - } else if (map['type_name'] == 'SortFilter') { - return SortFilter.fromJson(map.toMapStringDynamic!); - } else if (map['type_name'] == 'SortState') { - return SortState.fromJson(map.toMapStringDynamic!); - } else if (map['type_name'] == 'GroupFilter') { - return GroupFilter.fromJson(map.toMapStringDynamic!); - } - }).toList(); +List fromJsonFilterValuesToList(List list) { + return list + .map((e) { + final map = (e as Map).toMapStringDynamic!; + + return switch (map['type_name']) { + 'TriState' => TriStateFilter.fromJson(map.toMapStringDynamic!), + 'CheckBox' => CheckBoxFilter.fromJson(map.toMapStringDynamic!), + 'SelectOption' => SelectFilterOption.fromJson(map.toMapStringDynamic!), + 'SelectFilter' => SelectFilter.fromJson(map.toMapStringDynamic!), + 'SeparatorFilter' => SeparatorFilter.fromJson(map.toMapStringDynamic!), + 'HeaderFilter' => HeaderFilter.fromJson(map.toMapStringDynamic!), + 'TextFilter' => TextFilter.fromJson(map.toMapStringDynamic!), + 'SortFilter' => SortFilter.fromJson(map.toMapStringDynamic!), + 'SortState' => SortState.fromJson(map.toMapStringDynamic!), + 'GroupFilter' => GroupFilter.fromJson(map.toMapStringDynamic!), + _ => null, + }; + }) + .where((filter) => filter != null) + .toList(); } List?> filterValuesListToJson(List values) { diff --git a/lib/eval/dart/model/m_bridge.dart b/lib/eval/model/m_bridge.dart similarity index 99% rename from lib/eval/dart/model/m_bridge.dart rename to lib/eval/model/m_bridge.dart index c21be34..38c5dae 100644 --- a/lib/eval/dart/model/m_bridge.dart +++ b/lib/eval/model/m_bridge.dart @@ -9,7 +9,7 @@ import 'package:intl/date_symbol_data_local.dart'; import 'package:intl/intl.dart'; import 'package:js_packer/js_packer.dart'; import 'package:json_path/json_path.dart'; -import 'package:mangayomi/eval/dart/model/document.dart'; +import 'package:mangayomi/eval/model/document.dart'; import 'package:mangayomi/eval/javascript/http.dart'; import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/router/router.dart'; diff --git a/lib/eval/dart/model/m_chapter.dart b/lib/eval/model/m_chapter.dart similarity index 100% rename from lib/eval/dart/model/m_chapter.dart rename to lib/eval/model/m_chapter.dart diff --git a/lib/eval/dart/model/m_manga.dart b/lib/eval/model/m_manga.dart similarity index 96% rename from lib/eval/dart/model/m_manga.dart rename to lib/eval/model/m_manga.dart index 68a5d8c..f1fd7db 100644 --- a/lib/eval/dart/model/m_manga.dart +++ b/lib/eval/model/m_manga.dart @@ -1,4 +1,4 @@ -import 'package:mangayomi/eval/dart/model/m_chapter.dart'; +import 'package:mangayomi/eval/model/m_chapter.dart'; import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/utils/extensions/string_extensions.dart'; diff --git a/lib/eval/dart/model/m_pages.dart b/lib/eval/model/m_pages.dart similarity index 89% rename from lib/eval/dart/model/m_pages.dart rename to lib/eval/model/m_pages.dart index 95dae30..6b8343d 100644 --- a/lib/eval/dart/model/m_pages.dart +++ b/lib/eval/model/m_pages.dart @@ -1,4 +1,4 @@ -import 'package:mangayomi/eval/dart/model/m_manga.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; class MPages { List list; diff --git a/lib/eval/dart/model/m_provider.dart b/lib/eval/model/m_provider.dart similarity index 76% rename from lib/eval/dart/model/m_provider.dart rename to lib/eval/model/m_provider.dart index 24d216c..88ead25 100644 --- a/lib/eval/dart/model/m_provider.dart +++ b/lib/eval/model/m_provider.dart @@ -1,6 +1,6 @@ -import 'package:mangayomi/eval/dart/model/filter.dart'; -import 'package:mangayomi/eval/dart/model/m_pages.dart'; -import 'package:mangayomi/eval/dart/model/m_manga.dart'; +import 'package:mangayomi/eval/model/filter.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; +import 'package:mangayomi/eval/model/m_pages.dart'; import 'package:mangayomi/models/video.dart'; abstract class MProvider { diff --git a/lib/eval/dart/model/m_source.dart b/lib/eval/model/m_source.dart similarity index 100% rename from lib/eval/dart/model/m_source.dart rename to lib/eval/model/m_source.dart diff --git a/lib/eval/dart/model/m_video.dart b/lib/eval/model/m_video.dart similarity index 100% rename from lib/eval/dart/model/m_video.dart rename to lib/eval/model/m_video.dart diff --git a/lib/eval/dart/model/source_preference.dart b/lib/eval/model/source_preference.dart similarity index 100% rename from lib/eval/dart/model/source_preference.dart rename to lib/eval/model/source_preference.dart diff --git a/lib/eval/dart/model/source_preference.g.dart b/lib/eval/model/source_preference.g.dart similarity index 100% rename from lib/eval/dart/model/source_preference.g.dart rename to lib/eval/model/source_preference.g.dart diff --git a/lib/models/source.dart b/lib/models/source.dart index 512b189..d71f76d 100644 --- a/lib/models/source.dart +++ b/lib/models/source.dart @@ -1,5 +1,5 @@ import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/m_source.dart'; +import 'package:mangayomi/eval/model/m_source.dart'; part 'source.g.dart'; @collection diff --git a/lib/modules/browse/extension/edit_code.dart b/lib/modules/browse/extension/edit_code.dart index 4d05e56..e9746a2 100644 --- a/lib/modules/browse/extension/edit_code.dart +++ b/lib/modules/browse/extension/edit_code.dart @@ -1,12 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_code_editor/flutter_code_editor.dart'; import 'package:flutter_highlight/themes/atom-one-dark.dart'; +import 'package:highlight/highlight.dart'; import 'package:json_view/json_view.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:highlight/languages/dart.dart'; import 'package:highlight/languages/javascript.dart'; -import 'package:mangayomi/eval/dart/service.dart'; -import 'package:mangayomi/eval/javascript/service.dart'; +import 'package:mangayomi/eval/lib.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/manga/home/widget/filter_widget.dart'; @@ -27,16 +27,20 @@ class CodeEditor extends ConsumerStatefulWidget { ConsumerState createState() => _CodeEditorState(); } +Mode getSourceMode(Source? source) { + return switch (source?.sourceCodeLanguage) { + SourceCodeLanguage.dart => dart, + SourceCodeLanguage.javascript => javascript, + _ => dart, + }; +} + class _CodeEditorState extends ConsumerState { dynamic result; late final source = widget.sourceId == null ? null : isar.sources.getSync(widget.sourceId!); late final controller = CodeController( text: source?.sourceCode ?? "", - language: source == null - ? dart - : source!.sourceCodeLanguage == SourceCodeLanguage.dart - ? dart - : javascript, + language: getSourceMode(source), namedSectionParser: const BracketsStartEndNamedSectionParser()); List<(String, int)> _getServices(BuildContext context) => [ @@ -224,6 +228,8 @@ class _CodeEditorState extends ConsumerState { _errorText = ""; }); if (source != null) { + final service = getExtensionService(source!); + try { if (_serviceIndex == 0) { final getManga = @@ -243,26 +249,15 @@ class _CodeEditorState extends ConsumerState { await ref.watch(getDetailProvider(source: source!, url: _url).future); result = getManga.toJson(); } else if (_serviceIndex == 4) { - if (source!.sourceCodeLanguage == SourceCodeLanguage.dart) { - result = (await DartExtensionService(source).getPageList(_url)) + result = { + "pages": (await service.getPageList(_url)) .map((e) => e.toJson()) - .toList(); - } else { - result = (await JsExtensionService(source).getPageList(_url)) - .map((e) => e.toJson()) - .toList(); - } - result = {"pages": result}; + .toList(), + }; } else { - if (source!.sourceCodeLanguage == SourceCodeLanguage.dart) { - result = (await DartExtensionService(source).getVideoList(_url)) - .map((e) => e.toJson()) - .toList(); - } else { - result = (await JsExtensionService(source).getVideoList(_url)) - .map((e) => e.toJson()) - .toList(); - } + result = (await service.getVideoList(_url)) + .map((e) => e.toJson()) + .toList(); } if (mounted) { setState(() { diff --git a/lib/modules/browse/extension/extension_detail.dart b/lib/modules/browse/extension/extension_detail.dart index d8df5af..5bb1517 100644 --- a/lib/modules/browse/extension/extension_detail.dart +++ b/lib/modules/browse/extension/extension_detail.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; -import 'package:mangayomi/eval/dart/model/source_preference.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/browse/extension/providers/extension_preferences_providers.dart'; diff --git a/lib/modules/browse/extension/providers/extension_preferences_providers.dart b/lib/modules/browse/extension/providers/extension_preferences_providers.dart index 5a4a7f6..043619b 100644 --- a/lib/modules/browse/extension/providers/extension_preferences_providers.dart +++ b/lib/modules/browse/extension/providers/extension_preferences_providers.dart @@ -1,5 +1,5 @@ import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/source_preference.dart'; +import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/services/get_source_preference.dart'; diff --git a/lib/modules/browse/extension/widgets/create_extension.dart b/lib/modules/browse/extension/widgets/create_extension.dart index 72b4d48..aacd626 100644 --- a/lib/modules/browse/extension/widgets/create_extension.dart +++ b/lib/modules/browse/extension/widgets/create_extension.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/providers/l10n_providers.dart'; diff --git a/lib/modules/browse/extension/widgets/source_preference_widget.dart b/lib/modules/browse/extension/widgets/source_preference_widget.dart index e7fd25e..97744f1 100644 --- a/lib/modules/browse/extension/widgets/source_preference_widget.dart +++ b/lib/modules/browse/extension/widgets/source_preference_widget.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:mangayomi/eval/dart/model/source_preference.dart'; +import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/browse/extension/providers/extension_preferences_providers.dart'; import 'package:mangayomi/modules/manga/detail/widgets/chapter_filter_list_tile_widget.dart'; diff --git a/lib/modules/browse/global_search/global_search_screen.dart b/lib/modules/browse/global_search/global_search_screen.dart index 3d96e40..09b1585 100644 --- a/lib/modules/browse/global_search/global_search_screen.dart +++ b/lib/modules/browse/global_search/global_search_screen.dart @@ -2,8 +2,8 @@ import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/m_manga.dart'; -import 'package:mangayomi/eval/dart/model/m_pages.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; +import 'package:mangayomi/eval/model/m_pages.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/modules/manga/home/manga_home_screen.dart'; diff --git a/lib/modules/library/library_screen.dart b/lib/modules/library/library_screen.dart index de73630..06670c9 100644 --- a/lib/modules/library/library_screen.dart +++ b/lib/modules/library/library_screen.dart @@ -8,7 +8,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/category.dart'; import 'package:mangayomi/models/chapter.dart'; diff --git a/lib/modules/manga/detail/manga_detail_view.dart b/lib/modules/manga/detail/manga_detail_view.dart index 4a186f7..8afb443 100644 --- a/lib/modules/manga/detail/manga_detail_view.dart +++ b/lib/modules/manga/detail/manga_detail_view.dart @@ -7,7 +7,7 @@ import 'package:flutter/rendering.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/download.dart'; diff --git a/lib/modules/manga/detail/providers/update_manga_detail_providers.dart b/lib/modules/manga/detail/providers/update_manga_detail_providers.dart index c0359ae..3943c0b 100644 --- a/lib/modules/manga/detail/providers/update_manga_detail_providers.dart +++ b/lib/modules/manga/detail/providers/update_manga_detail_providers.dart @@ -1,5 +1,5 @@ -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; -import 'package:mangayomi/eval/dart/model/m_manga.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/update.dart'; diff --git a/lib/modules/manga/home/manga_home_screen.dart b/lib/modules/manga/home/manga_home_screen.dart index 48e1ca7..43fbcd8 100644 --- a/lib/modules/manga/home/manga_home_screen.dart +++ b/lib/modules/manga/home/manga_home_screen.dart @@ -2,8 +2,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; -import 'package:mangayomi/eval/dart/model/m_manga.dart'; -import 'package:mangayomi/eval/dart/model/m_pages.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; +import 'package:mangayomi/eval/model/m_pages.dart'; import 'package:mangayomi/models/settings.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/library/providers/library_state_provider.dart'; diff --git a/lib/modules/manga/home/widget/filter_widget.dart b/lib/modules/manga/home/widget/filter_widget.dart index 148c7d8..3575df2 100644 --- a/lib/modules/manga/home/widget/filter_widget.dart +++ b/lib/modules/manga/home/widget/filter_widget.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:mangayomi/eval/dart/model/filter.dart'; +import 'package:mangayomi/eval/model/filter.dart'; import 'package:mangayomi/utils/extensions/build_context_extensions.dart'; class FilterWidget extends StatelessWidget { diff --git a/lib/modules/manga/reader/reader_view.dart b/lib/modules/manga/reader/reader_view.dart index 1f917cb..bd66689 100644 --- a/lib/modules/manga/reader/reader_view.dart +++ b/lib/modules/manga/reader/reader_view.dart @@ -8,7 +8,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/manga.dart'; diff --git a/lib/modules/more/backup_and_restore/backup_and_restore.dart b/lib/modules/more/backup_and_restore/backup_and_restore.dart index 6d88a6f..5412adb 100644 --- a/lib/modules/more/backup_and_restore/backup_and_restore.dart +++ b/lib/modules/more/backup_and_restore/backup_and_restore.dart @@ -2,7 +2,7 @@ import 'dart:io'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/modules/manga/detail/widgets/chapter_filter_list_tile_widget.dart'; import 'package:mangayomi/modules/more/backup_and_restore/providers/auto_backup.dart'; import 'package:mangayomi/modules/more/backup_and_restore/providers/backup.dart'; diff --git a/lib/modules/more/backup_and_restore/providers/backup.dart b/lib/modules/more/backup_and_restore/providers/backup.dart index ad21913..7fde7f6 100644 --- a/lib/modules/more/backup_and_restore/providers/backup.dart +++ b/lib/modules/more/backup_and_restore/providers/backup.dart @@ -4,7 +4,7 @@ import 'package:archive/archive_io.dart'; import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/source_preference.dart'; +import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/category.dart'; import 'package:mangayomi/models/chapter.dart'; diff --git a/lib/modules/more/backup_and_restore/providers/restore.dart b/lib/modules/more/backup_and_restore/providers/restore.dart index e0efe86..493b27c 100644 --- a/lib/modules/more/backup_and_restore/providers/restore.dart +++ b/lib/modules/more/backup_and_restore/providers/restore.dart @@ -3,8 +3,8 @@ import 'package:archive/archive_io.dart'; import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; -import 'package:mangayomi/eval/dart/model/source_preference.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/category.dart'; import 'package:mangayomi/models/chapter.dart'; diff --git a/lib/modules/updates/updates_screen.dart b/lib/modules/updates/updates_screen.dart index b072983..d5ea629 100644 --- a/lib/modules/updates/updates_screen.dart +++ b/lib/modules/updates/updates_screen.dart @@ -4,7 +4,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:grouped_list/sliver_grouped_list.dart'; import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/update.dart'; diff --git a/lib/modules/widgets/manga_image_card_widget.dart b/lib/modules/widgets/manga_image_card_widget.dart index eea8f20..2d64854 100644 --- a/lib/modules/widgets/manga_image_card_widget.dart +++ b/lib/modules/widgets/manga_image_card_widget.dart @@ -3,7 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/m_manga.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/settings.dart'; diff --git a/lib/providers/storage_provider.dart b/lib/providers/storage_provider.dart index 44c9d24..47ab25e 100644 --- a/lib/providers/storage_provider.dart +++ b/lib/providers/storage_provider.dart @@ -1,7 +1,7 @@ // ignore_for_file: depend_on_referenced_packages import 'dart:io'; import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/model/source_preference.dart'; +import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/category.dart'; import 'package:mangayomi/models/changed_items.dart'; diff --git a/lib/services/anime_extractors/gogocdn_extractor.dart b/lib/services/anime_extractors/gogocdn_extractor.dart index e320af2..e68c38b 100644 --- a/lib/services/anime_extractors/gogocdn_extractor.dart +++ b/lib/services/anime_extractors/gogocdn_extractor.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:html/dom.dart'; import 'package:http_interceptor/http_interceptor.dart'; -import 'package:mangayomi/eval/dart/model/m_bridge.dart'; +import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/models/video.dart'; import 'package:html/parser.dart' as parser; import 'package:mangayomi/services/http/m_client.dart'; diff --git a/lib/services/fetch_sources_list.dart b/lib/services/fetch_sources_list.dart index 8f6d362..9ab3076 100644 --- a/lib/services/fetch_sources_list.dart +++ b/lib/services/fetch_sources_list.dart @@ -1,8 +1,7 @@ import 'dart:convert'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:isar/isar.dart'; -import 'package:mangayomi/eval/dart/service.dart'; -import 'package:mangayomi/eval/javascript/service.dart'; +import 'package:mangayomi/eval/lib.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/more/settings/browse/providers/browse_state_provider.dart'; @@ -26,7 +25,7 @@ Future fetchSourcesList( if (id == source.id) { final sourc = isar.sources.getSync(id)!; final req = await http.get(Uri.parse(source.sourceCodeUrl!)); - final headers = getSourceHeaders(source..sourceCode = req.body); + final headers = getExtensionService(source..sourceCode = req.body).getHeaders(); isar.writeTxnSync(() { isar.sources.putSync(sourc ..headers = jsonEncode(headers) @@ -60,10 +59,10 @@ Future fetchSourcesList( final sourc = isar.sources.getSync(source.id!)!; if (sourc.isAdded!) { if (compareVersions(sourc.version!, source.version!) < 0) { - // log("update aivalable auto update"); + // log("update available auto update"); if (ref.watch(autoUpdateExtensionsStateProvider)) { final req = await http.get(Uri.parse(source.sourceCodeUrl!)); - final headers = getSourceHeaders(source..sourceCode = req.body); + final headers = getExtensionService(source..sourceCode = req.body).getHeaders(); isar.writeTxnSync(() { isar.sources.putSync(sourc ..headers = jsonEncode(headers) @@ -179,13 +178,3 @@ int compareVersions(String version1, String version2) { return 0; } - -Map getSourceHeaders(Source source) { - Map headers = {}; - if (source.sourceCodeLanguage == SourceCodeLanguage.javascript) { - headers = JsExtensionService(source).getHeaders(source.baseUrl ?? ""); - } else { - headers = DartExtensionService(source).getHeaders(); - } - return headers; -} diff --git a/lib/services/get_chapter_pages.dart b/lib/services/get_chapter_pages.dart index 73e746b..ea585eb 100644 --- a/lib/services/get_chapter_pages.dart +++ b/lib/services/get_chapter_pages.dart @@ -1,14 +1,12 @@ import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; -import 'package:mangayomi/eval/dart/service.dart'; +import 'package:mangayomi/eval/lib.dart'; import 'package:mangayomi/eval/javascript/http.dart'; -import 'package:mangayomi/eval/javascript/service.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/page.dart'; import 'package:mangayomi/models/settings.dart'; -import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/modules/manga/archive_reader/providers/archive_reader_providers.dart'; import 'package:mangayomi/modules/manga/reader/reader_view.dart'; import 'package:mangayomi/providers/storage_provider.dart'; @@ -63,11 +61,7 @@ Future getChapterPages( pageUrls.add(PageUrl(isarPageUrls.first.urls![i], headers: headers)); } } else { - if (source.sourceCodeLanguage == SourceCodeLanguage.dart) { - pageUrls = await DartExtensionService(source).getPageList(chapter.url!); - } else { - pageUrls = await JsExtensionService(source).getPageList(chapter.url!); - } + pageUrls = await getExtensionService(source).getPageList(chapter.url!); } } diff --git a/lib/services/get_chapter_pages.g.dart b/lib/services/get_chapter_pages.g.dart index 0bb5c40..62e0dda 100644 --- a/lib/services/get_chapter_pages.g.dart +++ b/lib/services/get_chapter_pages.g.dart @@ -6,7 +6,7 @@ part of 'get_chapter_pages.dart'; // RiverpodGenerator // ************************************************************************** -String _$getChapterPagesHash() => r'c806798536b6d4ca5b2a51417f12c648100cfc44'; +String _$getChapterPagesHash() => r'8a2606a6640046cb006b24516bf88512f3204aca'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/services/get_detail.dart b/lib/services/get_detail.dart index cc0f835..9911c66 100644 --- a/lib/services/get_detail.dart +++ b/lib/services/get_detail.dart @@ -1,6 +1,5 @@ -import 'package:mangayomi/eval/dart/service.dart'; -import 'package:mangayomi/eval/javascript/service.dart'; -import 'package:mangayomi/eval/dart/model/m_manga.dart'; +import 'package:mangayomi/eval/lib.dart'; +import 'package:mangayomi/eval/model/m_manga.dart'; import 'package:mangayomi/models/source.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -12,11 +11,5 @@ Future getDetail( required String url, required Source source, }) async { - MManga? mangadetail; - if (source.sourceCodeLanguage == SourceCodeLanguage.dart) { - mangadetail = await DartExtensionService(source).getDetail(url); - } else { - mangadetail = await JsExtensionService(source).getDetail(url); - } - return mangadetail; + return getExtensionService(source).getDetail(url); } diff --git a/lib/services/get_detail.g.dart b/lib/services/get_detail.g.dart index c47ca29..719b45d 100644 --- a/lib/services/get_detail.g.dart +++ b/lib/services/get_detail.g.dart @@ -6,7 +6,7 @@ part of 'get_detail.dart'; // RiverpodGenerator // ************************************************************************** -String _$getDetailHash() => r'c9e268bb19e786b3bb160023f74336b80da65b6c'; +String _$getDetailHash() => r'84cc79aa0fd35a2d8efa95f75b85978f521c5daa'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/services/get_filter_list.dart b/lib/services/get_filter_list.dart index 04f243a..3822d58 100644 --- a/lib/services/get_filter_list.dart +++ b/lib/services/get_filter_list.dart @@ -1,19 +1,10 @@ -import 'package:mangayomi/eval/dart/service.dart'; -import 'package:mangayomi/eval/javascript/service.dart'; +import 'package:mangayomi/eval/lib.dart'; import 'package:mangayomi/models/source.dart'; List getFilterList({required Source source}) { - List filterList = []; - try { - if (source.sourceCodeLanguage == SourceCodeLanguage.dart) { - filterList = DartExtensionService(source).getFilterList(); - } else { - filterList = (JsExtensionService(source).getFilterList()).filters; - } + return getExtensionService(source).getFilterList().filters; } catch (_) { return []; } - - return filterList; } diff --git a/lib/services/get_latest_updates.dart b/lib/services/get_latest_updates.dart index 52bcc78..ad7fb06 100644 --- a/lib/services/get_latest_updates.dart +++ b/lib/services/get_latest_updates.dart @@ -1,6 +1,5 @@ -import 'package:mangayomi/eval/dart/service.dart'; -import 'package:mangayomi/eval/javascript/service.dart'; -import 'package:mangayomi/eval/dart/model/m_pages.dart'; +import 'package:mangayomi/eval/lib.dart'; +import 'package:mangayomi/eval/model/m_pages.dart'; import 'package:mangayomi/models/source.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -12,11 +11,5 @@ Future getLatestUpdates( required Source source, required int page, }) async { - MPages? latestUpdatesManga; - if (source.sourceCodeLanguage == SourceCodeLanguage.dart) { - latestUpdatesManga = await DartExtensionService(source).getLatestUpdates(page); - } else { - latestUpdatesManga = await JsExtensionService(source).getLatestUpdates(page); - } - return latestUpdatesManga; + return getExtensionService(source).getLatestUpdates(page); } diff --git a/lib/services/get_latest_updates.g.dart b/lib/services/get_latest_updates.g.dart index 8a7a80b..268bdc9 100644 --- a/lib/services/get_latest_updates.g.dart +++ b/lib/services/get_latest_updates.g.dart @@ -6,7 +6,7 @@ part of 'get_latest_updates.dart'; // RiverpodGenerator // ************************************************************************** -String _$getLatestUpdatesHash() => r'ed983c23ad7d8a1af4332230537daede29b9275e'; +String _$getLatestUpdatesHash() => r'93e1ba376d14006110e9a6c06d191ffd12b1fdfb'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/services/get_popular.dart b/lib/services/get_popular.dart index a752bf3..a0fedd0 100644 --- a/lib/services/get_popular.dart +++ b/lib/services/get_popular.dart @@ -1,6 +1,5 @@ -import 'package:mangayomi/eval/dart/service.dart'; -import 'package:mangayomi/eval/javascript/service.dart'; -import 'package:mangayomi/eval/dart/model/m_pages.dart'; +import 'package:mangayomi/eval/lib.dart'; +import 'package:mangayomi/eval/model/m_pages.dart'; import 'package:mangayomi/models/source.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -12,12 +11,5 @@ Future getPopular( required Source source, required int page, }) async { - MPages? popularManga; - if (source.sourceCodeLanguage == SourceCodeLanguage.dart) { - popularManga = await DartExtensionService(source).getPopular(page); - } else { - popularManga = await JsExtensionService(source).getPopular(page); - } - - return popularManga; + return getExtensionService(source).getPopular(page); } diff --git a/lib/services/get_popular.g.dart b/lib/services/get_popular.g.dart index 1cf2e98..278d11e 100644 --- a/lib/services/get_popular.g.dart +++ b/lib/services/get_popular.g.dart @@ -6,7 +6,7 @@ part of 'get_popular.dart'; // RiverpodGenerator // ************************************************************************** -String _$getPopularHash() => r'2db0191dd013043970cfac2153e22054b0927ad1'; +String _$getPopularHash() => r'02291ff9c3eba594b2344b853c34b2cea7be491b'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/services/get_source_baseurl.dart b/lib/services/get_source_baseurl.dart index dbbf1b1..7335454 100644 --- a/lib/services/get_source_baseurl.dart +++ b/lib/services/get_source_baseurl.dart @@ -1,18 +1,11 @@ -import 'package:mangayomi/eval/dart/service.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:mangayomi/eval/lib.dart'; import 'package:mangayomi/models/source.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; + part 'get_source_baseurl.g.dart'; @riverpod String sourceBaseUrl(Ref ref, {required Source source}) { - String? baseUrl; - if (source.sourceCodeLanguage == SourceCodeLanguage.dart) { - baseUrl = DartExtensionService(source).sourceBaseUrl; - } else {} - if (baseUrl == null || baseUrl.isEmpty) { - baseUrl = source.baseUrl; - } - - return baseUrl!; + return getExtensionService(source).sourceBaseUrl; } diff --git a/lib/services/get_source_baseurl.g.dart b/lib/services/get_source_baseurl.g.dart index 875744a..1c3bee5 100644 --- a/lib/services/get_source_baseurl.g.dart +++ b/lib/services/get_source_baseurl.g.dart @@ -6,7 +6,7 @@ part of 'get_source_baseurl.dart'; // RiverpodGenerator // ************************************************************************** -String _$sourceBaseUrlHash() => r'853fdcc3b12f567c7570a8569c7832234d2bf7bf'; +String _$sourceBaseUrlHash() => r'2eaf2f441085cec9e2f035763ef2ec64aa00f838'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/services/get_source_preference.dart b/lib/services/get_source_preference.dart index 2a0f4e8..1dff1ac 100644 --- a/lib/services/get_source_preference.dart +++ b/lib/services/get_source_preference.dart @@ -1,16 +1,7 @@ -import 'package:mangayomi/eval/dart/service.dart'; -import 'package:mangayomi/eval/javascript/service.dart'; -import 'package:mangayomi/eval/dart/model/source_preference.dart'; +import 'package:mangayomi/eval/lib.dart'; +import 'package:mangayomi/eval/model/source_preference.dart'; import 'package:mangayomi/models/source.dart'; List getSourcePreference({required Source source}) { - List sourcePreference = []; - - if (source.sourceCodeLanguage == SourceCodeLanguage.dart) { - sourcePreference = DartExtensionService(source).getSourcePreferences(); - } else { - sourcePreference = JsExtensionService(source).getSourcePreferences(); - } - - return sourcePreference; + return getExtensionService(source).getSourcePreferences(); } diff --git a/lib/services/get_video_list.dart b/lib/services/get_video_list.dart index 623fce2..6538bc1 100644 --- a/lib/services/get_video_list.dart +++ b/lib/services/get_video_list.dart @@ -1,9 +1,7 @@ import 'dart:async'; import 'dart:io'; -import 'package:mangayomi/eval/dart/service.dart'; -import 'package:mangayomi/eval/javascript/service.dart'; +import 'package:mangayomi/eval/lib.dart'; import 'package:mangayomi/models/chapter.dart'; -import 'package:mangayomi/models/source.dart'; import 'package:mangayomi/models/video.dart'; import 'package:mangayomi/providers/storage_provider.dart'; import 'package:mangayomi/services/torrent_server.dart'; @@ -34,11 +32,9 @@ Future<(List