From c390e71c91f78540aa97e223b18aa4774792d2be Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 9 Sep 2024 19:15:10 -0700 Subject: [PATCH] Simplify entry API --- lib/web/eval/plugin.dart | 2 -- lib/web/eval/types.dart | 2 ++ lib/web/model/model.dart | 10 +++++++--- lib/web/model/model.g.dart | 2 +- lib/web/model/types.dart | 2 ++ lib/web/model/types.freezed.dart | 23 ++++++++++++++++++++++- lib/web/model/types.g.dart | 22 ++++++++++++++++++++++ pubspec.lock | 4 ++-- 8 files changed, 58 insertions(+), 9 deletions(-) diff --git a/lib/web/eval/plugin.dart b/lib/web/eval/plugin.dart index 7f21394..13c8ba2 100644 --- a/lib/web/eval/plugin.dart +++ b/lib/web/eval/plugin.dart @@ -16,7 +16,6 @@ class WebSourcePlugin implements EvalPlugin { $WebChapter.configureForCompile(registry); $WebManga.configureForCompile(registry); $HistoryLink.configureForCompile(registry); - $WebSourceInfo.configureForCompile(registry); // html $Document.configureForCompile(registry); $Element.configureForCompile(registry); @@ -49,7 +48,6 @@ class WebSourcePlugin implements EvalPlugin { $WebChapter.configureForRuntime(runtime); $WebManga.configureForRuntime(runtime); $HistoryLink.configureForRuntime(runtime); - $WebSourceInfo.configureForRuntime(runtime); //html $Document.configureForRuntime(runtime); $Element.configureForRuntime(runtime); diff --git a/lib/web/eval/types.dart b/lib/web/eval/types.dart index 6298e02..9454c02 100644 --- a/lib/web/eval/types.dart +++ b/lib/web/eval/types.dart @@ -6,6 +6,7 @@ import 'package:dart_eval/src/eval/utils/wap_helper.dart'; import 'package:gagaku/web/eval/util.dart'; import 'package:gagaku/web/model/types.dart'; +/* class $WebSourceInfo implements $Instance { static void configureForCompile(BridgeDeclarationRegistry registry) { registry.defineBridgeClass($declaration); @@ -112,6 +113,7 @@ class $WebSourceInfo implements $Instance { @override int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!); } +*/ class $HistoryLink implements $Instance { static void configureForCompile(BridgeDeclarationRegistry registry) { diff --git a/lib/web/model/model.dart b/lib/web/model/model.dart index 8451ce9..e38bae6 100644 --- a/lib/web/model/model.dart +++ b/lib/web/model/model.dart @@ -4,6 +4,7 @@ import 'dart:io'; import 'package:dart_eval/dart_eval.dart'; import 'package:dart_eval/dart_eval_security.dart'; +import 'package:dart_eval/stdlib/core.dart'; import 'package:flutter/material.dart'; import 'package:gagaku/cache.dart'; import 'package:gagaku/http.dart'; @@ -11,7 +12,6 @@ import 'package:gagaku/log.dart'; import 'package:gagaku/model.dart'; import 'package:gagaku/util.dart'; import 'package:gagaku/web/eval/plugin.dart'; -import 'package:gagaku/web/eval/types.dart'; import 'package:gagaku/web/eval/util.dart'; import 'package:gagaku/web/model/config.dart'; import 'package:gagaku/web/model/types.dart'; @@ -600,8 +600,12 @@ class WebSourceManager extends _$WebSourceManager { final source = WebSource(runtime: runtime); for (final key in sourcefiles.keys) { - final info = - (runtime.executeLib('${GagakuWebSources.getPackagePath}/$key', 'getSourceInfo') as $WebSourceInfo).$value; + final result = + (runtime.executeLib('${GagakuWebSources.getPackagePath}/$key', 'getSourceInfo') as $String).$value; + + final Map dat = json.decode(result); + final info = WebSourceInfo.fromJson(dat); + source.sources.putIfAbsent(key, () => info); runtime.grant(NetworkPermission.url(info.baseUrl)); } diff --git a/lib/web/model/model.g.dart b/lib/web/model/model.g.dart index 42a68bb..99b5a1c 100644 --- a/lib/web/model/model.g.dart +++ b/lib/web/model/model.g.dart @@ -308,7 +308,7 @@ final class WebSourceManagerProvider $AsyncNotifierProviderElement(this, pointer); } -String _$webSourceManagerHash() => r'0d2fdd2a7b52200a3791f75948f30a367e62c8f1'; +String _$webSourceManagerHash() => r'e323b9fdc5ff416f2c734bd52a39d1bc512fa80d'; abstract class _$WebSourceManager extends $AsyncNotifier { FutureOr build(); diff --git a/lib/web/model/types.dart b/lib/web/model/types.dart index dfb463c..f5f08d0 100644 --- a/lib/web/model/types.dart +++ b/lib/web/model/types.dart @@ -285,6 +285,8 @@ class WebSourceInfo with _$WebSourceInfo { required String manga, required String pages, }) = _WebSourceInfo; + + factory WebSourceInfo.fromJson(Map json) => _$WebSourceInfoFromJson(json); } @freezed diff --git a/lib/web/model/types.freezed.dart b/lib/web/model/types.freezed.dart index a9a78d6..fab27cf 100644 --- a/lib/web/model/types.freezed.dart +++ b/lib/web/model/types.freezed.dart @@ -1118,6 +1118,10 @@ abstract class _ImgurPage implements ImgurPage { throw _privateConstructorUsedError; } +WebSourceInfo _$WebSourceInfoFromJson(Map json) { + return _WebSourceInfo.fromJson(json); +} + /// @nodoc mixin _$WebSourceInfo { String get name => throw _privateConstructorUsedError; @@ -1128,6 +1132,9 @@ mixin _$WebSourceInfo { String get manga => throw _privateConstructorUsedError; String get pages => throw _privateConstructorUsedError; + /// Serializes this WebSourceInfo to a JSON map. + Map toJson() => throw _privateConstructorUsedError; + /// Create a copy of WebSourceInfo /// with the given fields replaced by the non-null parameter values. @JsonKey(includeFromJson: false, includeToJson: false) @@ -1280,7 +1287,7 @@ class __$$WebSourceInfoImplCopyWithImpl<$Res> } /// @nodoc - +@JsonSerializable() class _$WebSourceInfoImpl implements _WebSourceInfo { const _$WebSourceInfoImpl( {required this.name, @@ -1291,6 +1298,9 @@ class _$WebSourceInfoImpl implements _WebSourceInfo { required this.manga, required this.pages}); + factory _$WebSourceInfoImpl.fromJson(Map json) => + _$$WebSourceInfoImplFromJson(json); + @override final String name; @override @@ -1326,6 +1336,7 @@ class _$WebSourceInfoImpl implements _WebSourceInfo { (identical(other.pages, pages) || other.pages == pages)); } + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, name, version, baseUrl, mangaPath, search, manga, pages); @@ -1337,6 +1348,13 @@ class _$WebSourceInfoImpl implements _WebSourceInfo { @pragma('vm:prefer-inline') _$$WebSourceInfoImplCopyWith<_$WebSourceInfoImpl> get copyWith => __$$WebSourceInfoImplCopyWithImpl<_$WebSourceInfoImpl>(this, _$identity); + + @override + Map toJson() { + return _$$WebSourceInfoImplToJson( + this, + ); + } } abstract class _WebSourceInfo implements WebSourceInfo { @@ -1349,6 +1367,9 @@ abstract class _WebSourceInfo implements WebSourceInfo { required final String manga, required final String pages}) = _$WebSourceInfoImpl; + factory _WebSourceInfo.fromJson(Map json) = + _$WebSourceInfoImpl.fromJson; + @override String get name; @override diff --git a/lib/web/model/types.g.dart b/lib/web/model/types.g.dart index e53282a..76c34c0 100644 --- a/lib/web/model/types.g.dart +++ b/lib/web/model/types.g.dart @@ -80,6 +80,28 @@ Map _$$ImgurPageImplToJson(_$ImgurPageImpl instance) => 'src': instance.src, }; +_$WebSourceInfoImpl _$$WebSourceInfoImplFromJson(Map json) => + _$WebSourceInfoImpl( + name: json['name'] as String, + version: json['version'] as String, + baseUrl: json['baseUrl'] as String, + mangaPath: json['mangaPath'] as String, + search: json['search'] as String, + manga: json['manga'] as String, + pages: json['pages'] as String, + ); + +Map _$$WebSourceInfoImplToJson(_$WebSourceInfoImpl instance) => + { + 'name': instance.name, + 'version': instance.version, + 'baseUrl': instance.baseUrl, + 'mangaPath': instance.mangaPath, + 'search': instance.search, + 'manga': instance.manga, + 'pages': instance.pages, + }; + _$RepoInfoImpl _$$RepoInfoImplFromJson(Map json) => _$RepoInfoImpl( name: json['name'] as String, diff --git a/pubspec.lock b/pubspec.lock index 9991d02..40a4de3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -338,10 +338,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab" url: "https://pub.dev" source: hosted - version: "2.3.6" + version: "2.3.7" device_info_plus: dependency: "direct main" description: