mirror of
https://github.com/kodjodevf/mangayomi.git
synced 2026-03-11 17:25:32 +00:00
migrate to d4rt package
This commit is contained in:
parent
b54aa3e2df
commit
c558c08376
22 changed files with 1966 additions and 7327 deletions
|
|
@ -1,470 +1,58 @@
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:d4rt/d4rt.dart';
|
||||
import 'package:html/dom.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/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);
|
||||
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'MDocument'),
|
||||
);
|
||||
|
||||
static const $declaration = BridgeClassDef(
|
||||
BridgeClassType($type),
|
||||
class MDocumentBridge {
|
||||
final documentBridgedClass = BridgedClassDefinition(
|
||||
nativeType: MDocument,
|
||||
name: 'MDocument',
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'document',
|
||||
BridgeTypeAnnotation($Element.$type, nullable: true),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'': (visitor, positionalArgs, namedArgs) {
|
||||
return MDocument(positionalArgs[0] as Document);
|
||||
},
|
||||
},
|
||||
fields: {'document': BridgeFieldDef(BridgeTypeAnnotation($Element.$type))},
|
||||
getters: {
|
||||
'body': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($MElement.$type, nullable: true),
|
||||
),
|
||||
),
|
||||
'documentElement': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($MElement.$type, nullable: true),
|
||||
),
|
||||
),
|
||||
'head': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($MElement.$type, nullable: true),
|
||||
),
|
||||
),
|
||||
'parent': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($MElement.$type, nullable: true),
|
||||
),
|
||||
),
|
||||
'outerHtml': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'text': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'children': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [$MElement.$type]),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'body': (visitor, target) => (target as MDocument).body,
|
||||
'documentElement':
|
||||
(visitor, target) => (target as MDocument).documentElement,
|
||||
'head': (visitor, target) => (target as MDocument).head,
|
||||
'parent': (visitor, target) => (target as MDocument).parent,
|
||||
'outerHtml': (visitor, target) => (target as MDocument).outerHtml,
|
||||
'text': (visitor, target) => (target as MDocument).text,
|
||||
'children': (visitor, target) => (target as MDocument).children,
|
||||
},
|
||||
methods: {
|
||||
'select': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [$MElement.$type]),
|
||||
nullable: true,
|
||||
),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'selector',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'selectFirst': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($MElement.$type, nullable: true),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'selector',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'getElementsByClassName': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [$type]),
|
||||
nullable: true,
|
||||
),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'classNames',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'getElementsByTagName': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [$type]),
|
||||
nullable: true,
|
||||
),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'localNames',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'getElementById': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($MElement.$type, nullable: true),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'id',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'xpath': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [BridgeTypeRef(CoreTypes.string)]),
|
||||
),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'xpath',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'xpathFirst': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'xpath',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'attr': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'attr',
|
||||
BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'hasAttr': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.bool)),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'attr',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'select':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MDocument).select(positionalArgs[0] as String),
|
||||
'selectFirst':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MDocument).selectFirst(positionalArgs[0] as String),
|
||||
'getElementsByClassName':
|
||||
(visitor, target, positionalArgs, namedArgs) => (target as MDocument)
|
||||
.getElementsByClassName(positionalArgs[0] as String),
|
||||
'getElementsByTagName':
|
||||
(visitor, target, positionalArgs, namedArgs) => (target as MDocument)
|
||||
.getElementsByTagName(positionalArgs[0] as String),
|
||||
'getElementById':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MDocument).getElementById(positionalArgs[0] as String),
|
||||
'attr':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MDocument).attr(positionalArgs[0] as String),
|
||||
'hasAttr':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MDocument).hasAttr(positionalArgs[0] as String),
|
||||
'xpath':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MDocument).xpath(positionalArgs[0] as String),
|
||||
'xpathFirst':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MDocument).xpathFirst(positionalArgs[0] as String),
|
||||
},
|
||||
wrap: true,
|
||||
);
|
||||
|
||||
@override
|
||||
get $reified => $value;
|
||||
|
||||
@override
|
||||
final MDocument $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'body':
|
||||
final res = $value.body;
|
||||
return res == null ? const $null() : $MElement.wrap(res);
|
||||
case 'documentElement':
|
||||
final res = $value.documentElement;
|
||||
return res == null ? const $null() : $MElement.wrap(res);
|
||||
case 'head':
|
||||
final res = $value.head;
|
||||
return res == null ? const $null() : $MElement.wrap(res);
|
||||
case 'parent':
|
||||
final res = $value.parent;
|
||||
return res == null ? const $null() : $MElement.wrap(res);
|
||||
case 'outerHtml':
|
||||
final res = $value.outerHtml;
|
||||
return res == null ? const $null() : $String(res);
|
||||
case 'text':
|
||||
final res = $value.text;
|
||||
return res == null ? const $null() : $String(res);
|
||||
case 'children':
|
||||
final res = $value.children;
|
||||
return res == null
|
||||
? const $null()
|
||||
: $List.wrap(res.map((e) => $MElement.wrap(e)).toList());
|
||||
case 'select':
|
||||
return __select;
|
||||
case 'selectFirst':
|
||||
return __selectFirst;
|
||||
case 'getElementsByClassName':
|
||||
return __getElementsByClassName;
|
||||
case 'getElementsByTagName':
|
||||
return __getElementsByTagName;
|
||||
case 'getElementById':
|
||||
return __getElementById;
|
||||
case 'xpath':
|
||||
return __xpath;
|
||||
case 'xpathFirst':
|
||||
return __xpathFirst;
|
||||
case 'attr':
|
||||
return __attr;
|
||||
case 'hasAttr':
|
||||
return __hasAttr;
|
||||
default:
|
||||
return _superclass.$getProperty(runtime, identifier);
|
||||
}
|
||||
void registerBridgedClasses(D4rt interpreter) {
|
||||
interpreter.registerBridgedClass(documentBridgedClass);
|
||||
}
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {}
|
||||
|
||||
static const $Function __select = $Function(_select);
|
||||
static $Value? _select(
|
||||
final Runtime runtime,
|
||||
final $Value? target,
|
||||
final List<$Value?> args,
|
||||
) {
|
||||
final res = (target!.$value as MDocument).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 MDocument).selectFirst(args[0]?.$value);
|
||||
return res == null ? const $null() : $MElement.wrap(res);
|
||||
}
|
||||
|
||||
static $Value? $new(
|
||||
final Runtime runtime,
|
||||
final $Value? target,
|
||||
final List<$Value?> args,
|
||||
) {
|
||||
return $MDocument.wrap(MDocument(args[0]?.$value));
|
||||
}
|
||||
|
||||
static const $Function __getElementsByClassName = $Function(
|
||||
_getElementsByClassName,
|
||||
);
|
||||
static $Value? _getElementsByClassName(
|
||||
final Runtime runtime,
|
||||
final $Value? target,
|
||||
final List<$Value?> args,
|
||||
) {
|
||||
final res = (target!.$value as MDocument).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 MDocument).getElementsByTagName(
|
||||
args[0]?.$value,
|
||||
);
|
||||
return res == null
|
||||
? const $null()
|
||||
: $List.wrap(res.map((e) => $MElement.wrap(e)).toList());
|
||||
}
|
||||
|
||||
static const $Function __getElementById = $Function(_getElementById);
|
||||
static $Value? _getElementById(
|
||||
final Runtime runtime,
|
||||
final $Value? target,
|
||||
final List<$Value?> args,
|
||||
) {
|
||||
final res = (target!.$value as MDocument).getElementById(args[0]?.$value);
|
||||
return res == null ? const $null() : $MElement.wrap(res);
|
||||
}
|
||||
|
||||
static const $Function __xpath = $Function(_xpath);
|
||||
static $Value? _xpath(
|
||||
final Runtime runtime,
|
||||
final $Value? target,
|
||||
final List<$Value?> args,
|
||||
) {
|
||||
final res = (target!.$value as MDocument).xpath(args[0]?.$value);
|
||||
return $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 MDocument).xpathFirst(args[0]?.$value);
|
||||
return res == null ? const $null() : $String(res);
|
||||
}
|
||||
|
||||
static const $Function __attr = $Function(_attr);
|
||||
static $Value? _attr(
|
||||
final Runtime runtime,
|
||||
final $Value? target,
|
||||
final List<$Value?> args,
|
||||
) {
|
||||
final res = (target!.$value as MDocument).attr(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 MDocument).attr(args[0]?.$value ?? "");
|
||||
return res == null ? const $null() : $String(res);
|
||||
}
|
||||
|
||||
@override
|
||||
List<MElement>? select(String selector) => $value.select(selector);
|
||||
|
||||
@override
|
||||
MElement? selectFirst(String selector) => $value.selectFirst(selector);
|
||||
|
||||
@override
|
||||
List<String> xpath(String xpath) => $value.xpath(xpath);
|
||||
|
||||
@override
|
||||
String? xpathFirst(String xpath) => $value.xpathFirst(xpath);
|
||||
|
||||
@override
|
||||
List<MElement>? getElementsByClassName(String classNames) =>
|
||||
$value.getElementsByClassName(classNames);
|
||||
|
||||
@override
|
||||
List<MElement>? getElementsByTagName(String localNames) =>
|
||||
$value.getElementsByTagName(localNames);
|
||||
|
||||
@override
|
||||
String? attr(String attr) => $value.attr(attr);
|
||||
|
||||
@override
|
||||
bool hasAttr(String attr) => $value.hasAttr(attr);
|
||||
|
||||
@override
|
||||
MElement? getElementById(String id) => $value.getElementById(id);
|
||||
|
||||
@override
|
||||
MElement? get body => $value.body;
|
||||
|
||||
@override
|
||||
List<MElement>? get children => $value.children;
|
||||
|
||||
@override
|
||||
MElement? get documentElement => $value.documentElement;
|
||||
|
||||
@override
|
||||
MElement? get head => $value.head;
|
||||
|
||||
@override
|
||||
String? get outerHtml => $value.outerHtml;
|
||||
|
||||
@override
|
||||
MElement? get parent => $value.parent;
|
||||
|
||||
@override
|
||||
String? get text => $value.text;
|
||||
}
|
||||
|
||||
class $Document implements $Instance {
|
||||
$Document.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'Document'),
|
||||
);
|
||||
|
||||
static const $declaration = BridgeClassDef(
|
||||
BridgeClassType($type),
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(
|
||||
BridgeFunctionDef(returns: BridgeTypeAnnotation($type, nullable: true)),
|
||||
),
|
||||
},
|
||||
wrap: true,
|
||||
);
|
||||
|
||||
@override
|
||||
get $reified => $value;
|
||||
|
||||
@override
|
||||
final Document $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
return _superclass.$getProperty(runtime, identifier);
|
||||
}
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,564 +1,66 @@
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:d4rt/d4rt.dart';
|
||||
import 'package:html/dom.dart';
|
||||
import 'package:mangayomi/eval/model/element.dart';
|
||||
|
||||
class $MElement implements MElement, $Instance {
|
||||
$MElement.wrap(this.$value) : _superclass = $Object($value);
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'MElement'),
|
||||
);
|
||||
|
||||
static const $declaration = BridgeClassDef(
|
||||
BridgeClassType($type),
|
||||
class MElementBridge {
|
||||
final elementBridgedClass = BridgedClassDefinition(
|
||||
nativeType: MElement,
|
||||
name: 'MElement',
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'element',
|
||||
BridgeTypeAnnotation($Element.$type, nullable: true),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'': (visitor, positionalArgs, namedArgs) {
|
||||
return MElement(positionalArgs[0] as Element);
|
||||
},
|
||||
},
|
||||
fields: {'element': BridgeFieldDef(BridgeTypeAnnotation($Element.$type))},
|
||||
getters: {
|
||||
'outerHtml': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'innerHtml': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'text': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'className': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'localName': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'namespaceUri': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'getSrc': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'getImg': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'getHref': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'getDataSrc': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'children': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [$type]),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'parent': BridgeMethodDef(
|
||||
BridgeFunctionDef(returns: BridgeTypeAnnotation($type, nullable: true)),
|
||||
),
|
||||
'nextElementSibling': BridgeMethodDef(
|
||||
BridgeFunctionDef(returns: BridgeTypeAnnotation($type, nullable: true)),
|
||||
),
|
||||
'previousElementSibling': BridgeMethodDef(
|
||||
BridgeFunctionDef(returns: BridgeTypeAnnotation($type, nullable: true)),
|
||||
),
|
||||
'outerHtml': (visitor, target) => (target as MElement).outerHtml,
|
||||
'innerHtml': (visitor, target) => (target as MElement).innerHtml,
|
||||
'text': (visitor, target) => (target as MElement).text,
|
||||
'className': (visitor, target) => (target as MElement).className,
|
||||
'localName': (visitor, target) => (target as MElement).localName,
|
||||
'namespaceUri': (visitor, target) => (target as MElement).namespaceUri,
|
||||
'getSrc': (visitor, target) => (target as MElement).getSrc,
|
||||
'getImg': (visitor, target) => (target as MElement).getImg,
|
||||
'getHref': (visitor, target) => (target as MElement).getHref,
|
||||
'getDataSrc': (visitor, target) => (target as MElement).getDataSrc,
|
||||
'children': (visitor, target) => (target as MElement).children,
|
||||
'parent': (visitor, target) => (target as MElement).parent,
|
||||
'nextElementSibling':
|
||||
(visitor, target) => (target as MElement).nextElementSibling,
|
||||
'previousElementSibling':
|
||||
(visitor, target) => (target as MElement).previousElementSibling,
|
||||
},
|
||||
methods: {
|
||||
'attr': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'attr',
|
||||
BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'text': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
),
|
||||
'select': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [$type]),
|
||||
nullable: true,
|
||||
),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'selector',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'selectFirst': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type, nullable: true),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'selector',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'getElementsByClassName': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [$type]),
|
||||
nullable: true,
|
||||
),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'classNames',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'getElementsByTagName': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [$type]),
|
||||
nullable: true,
|
||||
),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'localNames',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'xpath': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [BridgeTypeRef(CoreTypes.string)]),
|
||||
nullable: true,
|
||||
),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'xpath',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'xpathFirst': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
nullable: true,
|
||||
),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'xpath',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'hasAttr': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.bool)),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'attr',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'attr':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MElement).attr(positionalArgs[0] as String),
|
||||
'text':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MElement).text,
|
||||
'select':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MElement).select(positionalArgs[0] as String),
|
||||
'selectFirst':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MElement).selectFirst(positionalArgs[0] as String),
|
||||
'getElementsByClassName':
|
||||
(visitor, target, positionalArgs, namedArgs) => (target as MElement)
|
||||
.getElementsByClassName(positionalArgs[0] as String),
|
||||
'getElementsByTagName':
|
||||
(visitor, target, positionalArgs, namedArgs) => (target as MElement)
|
||||
.getElementsByTagName(positionalArgs[0] as String),
|
||||
'xpath':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MElement).xpath(positionalArgs[0] as String),
|
||||
'xpathFirst':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MElement).xpathFirst(positionalArgs[0] as String),
|
||||
'hasAttr':
|
||||
(visitor, target, positionalArgs, namedArgs) =>
|
||||
(target as MElement).hasAttr(positionalArgs[0] as String),
|
||||
},
|
||||
wrap: true,
|
||||
);
|
||||
|
||||
@override
|
||||
get $reified => $value;
|
||||
|
||||
@override
|
||||
final MElement $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'outerHtml':
|
||||
final res = $value.outerHtml;
|
||||
return res == null ? const $null() : $String(res);
|
||||
case 'innerHtml':
|
||||
final res = $value.innerHtml;
|
||||
return res == null ? const $null() : $String(res);
|
||||
case 'text':
|
||||
final res = $value.text;
|
||||
return res == null
|
||||
? const $null()
|
||||
: $String(res.trim().trimLeft().trimRight());
|
||||
case 'className':
|
||||
final res = $value.className;
|
||||
return res == null
|
||||
? const $null()
|
||||
: $String(res.trim().trimLeft().trimRight());
|
||||
case 'localName':
|
||||
final res = $value.localName;
|
||||
return res == null
|
||||
? const $null()
|
||||
: $String(res.trim().trimLeft().trimRight());
|
||||
case 'namespaceUri':
|
||||
final res = $value.namespaceUri;
|
||||
return res == null
|
||||
? const $null()
|
||||
: $String(res.trim().trimLeft().trimRight());
|
||||
case 'getSrc':
|
||||
final res = $value.getSrc;
|
||||
return res == null
|
||||
? const $null()
|
||||
: $String(res.trim().trimLeft().trimRight());
|
||||
case 'getImg':
|
||||
final res = $value.getImg;
|
||||
return res == null
|
||||
? const $null()
|
||||
: $String(res.trim().trimLeft().trimRight());
|
||||
case 'getHref':
|
||||
final res = $value.getHref;
|
||||
return res == null
|
||||
? const $null()
|
||||
: $String(res.trim().trimLeft().trimRight());
|
||||
case 'getDataSrc':
|
||||
final res = $value.getDataSrc;
|
||||
return res == null
|
||||
? const $null()
|
||||
: $String(res.trim().trimLeft().trimRight());
|
||||
case 'parent':
|
||||
final res = $value.parent;
|
||||
return res == null ? const $null() : $MElement.wrap(res);
|
||||
case 'nextElementSibling':
|
||||
final res = $value.nextElementSibling;
|
||||
return res == null ? const $null() : $MElement.wrap(res);
|
||||
case 'previousElementSibling':
|
||||
final res = $value.previousElementSibling;
|
||||
return res == null ? const $null() : $MElement.wrap(res);
|
||||
case 'attr':
|
||||
return __attr;
|
||||
case 'select':
|
||||
return __select;
|
||||
case 'selectFirst':
|
||||
return __selectFirst;
|
||||
case 'getElementsByClassName':
|
||||
return __getElementsByClassName;
|
||||
case 'getElementsByTagName':
|
||||
return __getElementsByTagName;
|
||||
case 'xpath':
|
||||
return __xpath;
|
||||
case 'xpathFirst':
|
||||
return __xpathFirst;
|
||||
case 'hasAttr':
|
||||
return __hasAttr;
|
||||
default:
|
||||
return _superclass.$getProperty(runtime, identifier);
|
||||
}
|
||||
void registerBridgedClasses(D4rt interpreter) {
|
||||
interpreter.registerBridgedClass(elementBridgedClass);
|
||||
}
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {}
|
||||
|
||||
static $Value? $new(
|
||||
final Runtime runtime,
|
||||
final $Value? target,
|
||||
final List<$Value?> args,
|
||||
) {
|
||||
return $MElement.wrap(MElement(args[0]?.$value));
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@override
|
||||
List<String>? xpath(String xpath) => $value.xpath(xpath);
|
||||
|
||||
@override
|
||||
String? xpathFirst(String xpath) => $value.xpathFirst(xpath);
|
||||
|
||||
@override
|
||||
String? attr(String attr) => $value.attr(attr);
|
||||
|
||||
@override
|
||||
List<MElement>? select(String selector) => $value.select(selector);
|
||||
|
||||
@override
|
||||
MElement? selectFirst(String selector) => $value.selectFirst(selector);
|
||||
|
||||
@override
|
||||
List<MElement>? get children => $value.children;
|
||||
|
||||
@override
|
||||
List<MElement>? getElementsByClassName(String classNames) =>
|
||||
$value.getElementsByClassName(classNames);
|
||||
|
||||
@override
|
||||
List<MElement>? getElementsByTagName(String localNames) =>
|
||||
$value.getElementsByTagName(localNames);
|
||||
|
||||
@override
|
||||
bool hasAttr(String attr) => $value.hasAttr(attr);
|
||||
|
||||
@override
|
||||
String? get className => $value.className;
|
||||
|
||||
@override
|
||||
String? get getDataSrc => $value.getDataSrc;
|
||||
|
||||
@override
|
||||
String? get getHref => $value.getHref;
|
||||
|
||||
@override
|
||||
String? get getImg => $value.getImg;
|
||||
|
||||
@override
|
||||
String? get getSrc => $value.getSrc;
|
||||
|
||||
@override
|
||||
String? get innerHtml => $value.innerHtml;
|
||||
|
||||
@override
|
||||
String? get localName => $value.localName;
|
||||
|
||||
@override
|
||||
String? get namespaceUri => $value.namespaceUri;
|
||||
|
||||
@override
|
||||
MElement? get nextElementSibling => $value.nextElementSibling;
|
||||
|
||||
@override
|
||||
String? get outerHtml => $value.outerHtml;
|
||||
|
||||
@override
|
||||
MElement? get parent => $value.parent;
|
||||
|
||||
@override
|
||||
MElement? get previousElementSibling => $value.previousElementSibling;
|
||||
|
||||
@override
|
||||
String? get text => $value.text;
|
||||
}
|
||||
|
||||
class $Element implements $Instance {
|
||||
$Element.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'Element'),
|
||||
);
|
||||
|
||||
static const $declaration = BridgeClassDef(
|
||||
BridgeClassType($type),
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(
|
||||
BridgeFunctionDef(returns: BridgeTypeAnnotation($type, nullable: true)),
|
||||
),
|
||||
},
|
||||
wrap: true,
|
||||
);
|
||||
|
||||
@override
|
||||
get $reified => $value;
|
||||
|
||||
@override
|
||||
final Element $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
return _superclass.$getProperty(runtime, identifier);
|
||||
}
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,147 +1,42 @@
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:d4rt/d4rt.dart';
|
||||
import 'package:mangayomi/eval/model/m_chapter.dart';
|
||||
|
||||
class $MChapter implements MChapter, $Instance {
|
||||
$MChapter.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'MChapter'),
|
||||
);
|
||||
|
||||
static const $declaration = BridgeClassDef(
|
||||
BridgeClassType($type),
|
||||
class MChapterBridge {
|
||||
final mChapterBridgedClass = BridgedClassDefinition(
|
||||
nativeType: MChapter,
|
||||
name: 'MChapter',
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type),
|
||||
params: [],
|
||||
namedParams: [
|
||||
BridgeParameter(
|
||||
'name',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
BridgeParameter(
|
||||
'url',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
BridgeParameter(
|
||||
'dateUpload',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
BridgeParameter(
|
||||
'scanlator',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
true,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'': (visitor, positionalArgs, namedArgs) {
|
||||
return MChapter(
|
||||
name: namedArgs.get<String?>('name'),
|
||||
url: namedArgs.get<String?>('url'),
|
||||
dateUpload: namedArgs.get<String?>('dateUpload'),
|
||||
scanlator: namedArgs.get<String?>('scanlator'),
|
||||
);
|
||||
},
|
||||
},
|
||||
// Specify class fields
|
||||
fields: {
|
||||
'name': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'url': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'dateUpload': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'scanlator': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
getters: {
|
||||
'name': (visitor, target) => (target as MChapter).name,
|
||||
'url': (visitor, target) => (target as MChapter).url,
|
||||
'dateUpload': (visitor, target) => (target as MChapter).dateUpload,
|
||||
'scanlator': (visitor, target) => (target as MChapter).scanlator,
|
||||
},
|
||||
setters: {
|
||||
'name':
|
||||
(visitor, target, value) =>
|
||||
(target as MChapter).name = value as String?,
|
||||
'url':
|
||||
(visitor, target, value) =>
|
||||
(target as MChapter).url = value as String?,
|
||||
'dateUpload':
|
||||
(visitor, target, value) =>
|
||||
(target as MChapter).dateUpload = value as String?,
|
||||
'scanlator':
|
||||
(visitor, target, value) =>
|
||||
(target as MChapter).scanlator = value as String?,
|
||||
},
|
||||
wrap: true,
|
||||
);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $MChapter.wrap(
|
||||
MChapter(
|
||||
name: args[0]?.$reified,
|
||||
url: args[1]?.$reified,
|
||||
dateUpload: args[2]?.$reified,
|
||||
scanlator: args[3]?.$reified,
|
||||
),
|
||||
);
|
||||
void registerBridgedClasses(D4rt interpreter) {
|
||||
interpreter.registerBridgedClass(mChapterBridgedClass);
|
||||
}
|
||||
|
||||
@override
|
||||
final MChapter $value;
|
||||
|
||||
@override
|
||||
MChapter get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'name':
|
||||
return $String($value.name!);
|
||||
case 'url':
|
||||
return $String($value.url!);
|
||||
case 'dateUpload':
|
||||
return $String($value.dateUpload!);
|
||||
case 'scanlator':
|
||||
return $String($value.scanlator!);
|
||||
|
||||
default:
|
||||
return _superclass.$getProperty(runtime, identifier);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {
|
||||
switch (identifier) {
|
||||
case 'name':
|
||||
$value.name = value.$reified;
|
||||
case 'url':
|
||||
$value.url = value.$reified;
|
||||
case 'dateUpload':
|
||||
$value.dateUpload = value.$reified;
|
||||
case 'scanlator':
|
||||
$value.scanlator = value.$reified;
|
||||
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
String? get name => $value.name;
|
||||
|
||||
@override
|
||||
String? get url => $value.url;
|
||||
|
||||
@override
|
||||
String? get dateUpload => $value.dateUpload;
|
||||
|
||||
@override
|
||||
String? get scanlator => $value.scanlator;
|
||||
@override
|
||||
set name(String? name) {}
|
||||
|
||||
@override
|
||||
set url(String? url) {}
|
||||
@override
|
||||
set dateUpload(String? dateUpload) {}
|
||||
|
||||
@override
|
||||
set scanlator(String? scanlator) {}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() => {
|
||||
'name': name,
|
||||
'url': url,
|
||||
'dateUpload': dateUpload,
|
||||
'scanlator': scanlator,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,222 +1,67 @@
|
|||
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/model/m_chapter.dart';
|
||||
import 'package:d4rt/d4rt.dart';
|
||||
import 'package:mangayomi/eval/model/m_manga.dart';
|
||||
import 'package:mangayomi/models/manga.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
|
||||
class $MManga implements MManga, $Instance {
|
||||
$MManga.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'MManga'),
|
||||
);
|
||||
|
||||
static const $declaration = BridgeClassDef(
|
||||
BridgeClassType($type),
|
||||
class MMangaBridge {
|
||||
final mMangaBridgedClass = BridgedClassDefinition(
|
||||
nativeType: MManga,
|
||||
name: 'MManga',
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(
|
||||
BridgeFunctionDef(returns: BridgeTypeAnnotation($type), params: []),
|
||||
),
|
||||
},
|
||||
// Specify class fields
|
||||
fields: {
|
||||
'author': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'artist': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'status': BridgeFieldDef(BridgeTypeAnnotation($MStatus.$type)),
|
||||
'genre': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [BridgeTypeRef(CoreTypes.string)]),
|
||||
),
|
||||
),
|
||||
'imageUrl': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'name': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'link': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'description': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'chapters': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.list, [$MChapter.$type])),
|
||||
),
|
||||
},
|
||||
wrap: true,
|
||||
);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $MManga.wrap(MManga());
|
||||
}
|
||||
|
||||
@override
|
||||
final MManga $value;
|
||||
|
||||
@override
|
||||
MManga get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'author':
|
||||
return $String($value.author!);
|
||||
case 'artist':
|
||||
return $String($value.artist!);
|
||||
case 'status':
|
||||
return $MStatus.wrap($value.status!);
|
||||
case 'genre':
|
||||
return $List.wrap($value.genre!);
|
||||
case 'imageUrl':
|
||||
return $String($value.imageUrl!);
|
||||
|
||||
case 'name':
|
||||
return $String($value.name!);
|
||||
case 'link':
|
||||
return $String($value.link!);
|
||||
case 'description':
|
||||
return $String($value.description!);
|
||||
case 'chapters':
|
||||
return $List.wrap(
|
||||
$value.chapters!.map((e) => $MChapter.wrap(e)).toList(),
|
||||
'': (visitor, positionalArgs, namedArgs) {
|
||||
return MManga(
|
||||
artist: namedArgs.get<String?>('artist'),
|
||||
author: namedArgs.get<String?>('author'),
|
||||
description: namedArgs.get<String?>('description'),
|
||||
genre: namedArgs.get<List?>('genre')?.cast(),
|
||||
status: namedArgs.get<Status?>('status'),
|
||||
imageUrl: namedArgs.get<String?>('imageUrl'),
|
||||
link: namedArgs.get<String?>('link'),
|
||||
chapters: namedArgs.get<List?>('chapters')?.cast(),
|
||||
name: namedArgs.get<String?>('name'),
|
||||
);
|
||||
|
||||
default:
|
||||
return _superclass.$getProperty(runtime, identifier);
|
||||
}
|
||||
},
|
||||
},
|
||||
getters: {
|
||||
'name': (visitor, target) => (target as MManga).name,
|
||||
'artist': (visitor, target) => (target as MManga).artist,
|
||||
'author': (visitor, target) => (target as MManga).author,
|
||||
'description': (visitor, target) => (target as MManga).description,
|
||||
'genre': (visitor, target) => (target as MManga).genre,
|
||||
'status': (visitor, target) => (target as MManga).status,
|
||||
'imageUrl': (visitor, target) => (target as MManga).imageUrl,
|
||||
'link': (visitor, target) => (target as MManga).link,
|
||||
'chapters': (visitor, target) => (target as MManga).chapters,
|
||||
},
|
||||
setters: {
|
||||
'name':
|
||||
(visitor, target, value) =>
|
||||
(target as MManga).name = value as String?,
|
||||
'artist':
|
||||
(visitor, target, value) =>
|
||||
(target as MManga).artist = value as String?,
|
||||
'author':
|
||||
(visitor, target, value) =>
|
||||
(target as MManga).author = value as String?,
|
||||
'description':
|
||||
(visitor, target, value) =>
|
||||
(target as MManga).description = value as String?,
|
||||
'genre':
|
||||
(visitor, target, value) =>
|
||||
(target as MManga).genre = (value as List?)?.cast(),
|
||||
'status':
|
||||
(visitor, target, value) =>
|
||||
(target as MManga).status = value as Status?,
|
||||
'imageUrl':
|
||||
(visitor, target, value) =>
|
||||
(target as MManga).imageUrl = value as String?,
|
||||
'link':
|
||||
(visitor, target, value) => (target as MManga).link = value as String,
|
||||
'chapters':
|
||||
(visitor, target, value) =>
|
||||
(target as MManga).chapters = (value as List?)?.cast(),
|
||||
},
|
||||
);
|
||||
void registerBridgedClasses(D4rt interpreter) {
|
||||
interpreter.registerBridgedClass(mMangaBridgedClass);
|
||||
}
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {
|
||||
switch (identifier) {
|
||||
case 'author':
|
||||
$value.author = value.$reified;
|
||||
case 'artist':
|
||||
$value.artist = value.$reified;
|
||||
case 'status':
|
||||
$value.status = value.$reified;
|
||||
case 'genre':
|
||||
$value.genre =
|
||||
(value.$reified as List).map((e) => e.toString()).toList();
|
||||
case 'imageUrl':
|
||||
$value.imageUrl = value.$reified;
|
||||
case 'name':
|
||||
$value.name = value.$reified;
|
||||
case 'link':
|
||||
$value.link = value.$reified;
|
||||
case 'description':
|
||||
$value.description = value.$reified;
|
||||
case 'chapters':
|
||||
$value.chapters =
|
||||
(value.$reified as List)
|
||||
.map(
|
||||
(e) => MChapter(
|
||||
dateUpload: e.dateUpload,
|
||||
url: e.url,
|
||||
name: e.name,
|
||||
scanlator: e.scanlator,
|
||||
),
|
||||
)
|
||||
.toList();
|
||||
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
String? get author => $value.author;
|
||||
|
||||
@override
|
||||
String? get artist => $value.artist;
|
||||
|
||||
@override
|
||||
String? get description => $value.description;
|
||||
|
||||
@override
|
||||
String? get imageUrl => $value.imageUrl;
|
||||
|
||||
@override
|
||||
String? get name => $value.name;
|
||||
|
||||
@override
|
||||
String? get link => $value.link;
|
||||
|
||||
@override
|
||||
Status? get status => $value.status;
|
||||
|
||||
@override
|
||||
List<MChapter>? get chapters => $value.chapters;
|
||||
|
||||
@override
|
||||
List<String>? get genre => $value.genre;
|
||||
|
||||
@override
|
||||
set author(String? author) {
|
||||
// implement author
|
||||
}
|
||||
|
||||
@override
|
||||
set artist(String? artist) {
|
||||
// implement artist
|
||||
}
|
||||
|
||||
@override
|
||||
set description(String? description) {
|
||||
// implement description
|
||||
}
|
||||
|
||||
@override
|
||||
set imageUrl(String? imageUrl) {
|
||||
// implement imageUrl
|
||||
}
|
||||
|
||||
@override
|
||||
set link(String? link) {
|
||||
// implement link
|
||||
}
|
||||
|
||||
@override
|
||||
set name(String? name) {
|
||||
// implement name
|
||||
}
|
||||
|
||||
@override
|
||||
set genre(List<String>? genre) {
|
||||
// implement genre
|
||||
}
|
||||
|
||||
@override
|
||||
set status(Status? status) {
|
||||
// implement status
|
||||
}
|
||||
|
||||
@override
|
||||
set chapters(List<MChapter>? chapters) {}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() => {
|
||||
'name': name,
|
||||
'link': link,
|
||||
'imageUrl': imageUrl,
|
||||
'description': description,
|
||||
'author': author,
|
||||
'artist': artist,
|
||||
'status': status.toString().substringAfter("."),
|
||||
'genre': genre,
|
||||
'chapters': chapters?.map((e) => e.toJson()).toList(),
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,107 +1,33 @@
|
|||
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:d4rt/d4rt.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);
|
||||
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'MPages'),
|
||||
);
|
||||
|
||||
static const $declaration = BridgeClassDef(
|
||||
BridgeClassType($type),
|
||||
class MPagesBridge {
|
||||
final mPageBridgedClass = BridgedClassDefinition(
|
||||
nativeType: MPages,
|
||||
name: 'MPages',
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'list',
|
||||
BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [$MManga.$type]),
|
||||
),
|
||||
false,
|
||||
),
|
||||
BridgeParameter(
|
||||
'hasNextPage',
|
||||
BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.bool),
|
||||
nullable: true,
|
||||
),
|
||||
true,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
'': (visitor, positionalArgs, namedArgs) {
|
||||
return MPages(
|
||||
list: (positionalArgs[0] as List).map((e) => e as MManga).toList(),
|
||||
hasNextPage: positionalArgs[1] as bool,
|
||||
);
|
||||
},
|
||||
},
|
||||
fields: {
|
||||
'list': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.list, [$MManga.$type])),
|
||||
),
|
||||
'hasNextPage': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.bool), nullable: true),
|
||||
),
|
||||
getters: {
|
||||
'list': (visitor, target) => (target as MPages).list,
|
||||
'hasNextPage': (visitor, target) => (target as MPages).hasNextPage,
|
||||
},
|
||||
setters: {
|
||||
'list':
|
||||
(visitor, target, value) =>
|
||||
(target as MPages).list = (value as List).cast<MManga>(),
|
||||
'hasNextPage':
|
||||
(visitor, target, value) =>
|
||||
(target as MPages).hasNextPage = value as bool,
|
||||
},
|
||||
wrap: true,
|
||||
);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
List<$Value> list = args[0]!.$value;
|
||||
return $MPages.wrap(
|
||||
MPages(
|
||||
list: list.map((e) => e as MManga).toList(),
|
||||
hasNextPage: args[1]?.$value ?? false,
|
||||
),
|
||||
);
|
||||
void registerBridgedClasses(D4rt interpreter) {
|
||||
interpreter.registerBridgedClass(mPageBridgedClass);
|
||||
}
|
||||
|
||||
@override
|
||||
final MPages $value;
|
||||
|
||||
@override
|
||||
MPages get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'list':
|
||||
return $List.wrap($value.list);
|
||||
case 'hasNextPage':
|
||||
return $bool($value.hasNextPage);
|
||||
|
||||
default:
|
||||
return _superclass.$getProperty(runtime, identifier);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {
|
||||
return _superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
|
||||
@override
|
||||
List<MManga> get list => $value.list;
|
||||
|
||||
@override
|
||||
bool get hasNextPage => $value.hasNextPage;
|
||||
|
||||
@override
|
||||
set hasNextPage(bool hasNextPage) {}
|
||||
|
||||
@override
|
||||
set list(List<MManga> list) {}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() => {
|
||||
'list': list.map((v) => v.toJson()).toList(),
|
||||
'hasNextPage': hasNextPage,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,211 +1,44 @@
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:d4rt/d4rt.dart';
|
||||
import 'package:mangayomi/eval/model/m_source.dart';
|
||||
|
||||
class $MSource implements MSource, $Instance {
|
||||
$MSource.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'MSource'),
|
||||
);
|
||||
|
||||
static const $declaration = BridgeClassDef(
|
||||
BridgeClassType($type),
|
||||
class MSourceBridge {
|
||||
final mSourceBridgedClass = BridgedClassDefinition(
|
||||
nativeType: MSource,
|
||||
name: 'MSource',
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(
|
||||
BridgeFunctionDef(returns: BridgeTypeAnnotation($type), params: []),
|
||||
),
|
||||
'': (visitor, positionalArgs, namedArgs) {
|
||||
return MSource(
|
||||
id: namedArgs.get<int?>('id'),
|
||||
name: namedArgs.get<String?>('name'),
|
||||
baseUrl: namedArgs.get<String?>('baseUrl'),
|
||||
lang: namedArgs.get<String?>('lang'),
|
||||
isFullData: namedArgs.get<bool?>('isFullData'),
|
||||
hasCloudflare: namedArgs.get<bool?>('hasCloudflare'),
|
||||
dateFormat: namedArgs.get<String?>('dateFormat'),
|
||||
dateFormatLocale: namedArgs.get<String?>('dateFormatLocale'),
|
||||
apiUrl: namedArgs.get<String?>('apiUrl'),
|
||||
additionalParams: namedArgs.get<String?>('additionalParams'),
|
||||
notes: namedArgs.get<String?>('notes'),
|
||||
);
|
||||
},
|
||||
},
|
||||
fields: {
|
||||
'id': BridgeFieldDef(BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int))),
|
||||
'name': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'baseUrl': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'lang': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'isFullData': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.bool)),
|
||||
),
|
||||
'hasCloudflare': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.bool)),
|
||||
),
|
||||
'dateFormat': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'dateFormatLocale': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'apiUrl': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'additionalParams': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'notes': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
getters: {
|
||||
'id': (visitor, target) => (target as MSource).id,
|
||||
'name': (visitor, target) => (target as MSource).name,
|
||||
'baseUrl': (visitor, target) => (target as MSource).baseUrl,
|
||||
'lang': (visitor, target) => (target as MSource).lang,
|
||||
'isFullData': (visitor, target) => (target as MSource).isFullData,
|
||||
'hasCloudflare': (visitor, target) => (target as MSource).hasCloudflare,
|
||||
'dateFormat': (visitor, target) => (target as MSource).dateFormat,
|
||||
'dateFormatLocale':
|
||||
(visitor, target) => (target as MSource).dateFormatLocale,
|
||||
'apiUrl': (visitor, target) => (target as MSource).apiUrl,
|
||||
'additionalParams':
|
||||
(visitor, target) => (target as MSource).additionalParams,
|
||||
'notes': (visitor, target) => (target as MSource).notes,
|
||||
},
|
||||
wrap: true,
|
||||
);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $MSource.wrap(MSource());
|
||||
void registerBridgedClasses(D4rt interpreter) {
|
||||
interpreter.registerBridgedClass(mSourceBridgedClass);
|
||||
}
|
||||
|
||||
@override
|
||||
final MSource $value;
|
||||
|
||||
@override
|
||||
MSource get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'id':
|
||||
return $int($value.id!);
|
||||
case 'name':
|
||||
return $String($value.name!);
|
||||
case 'baseUrl':
|
||||
return $String($value.baseUrl!);
|
||||
case 'lang':
|
||||
return $String($value.lang!);
|
||||
case 'isFullData':
|
||||
return $bool($value.isFullData!);
|
||||
case 'hasCloudflare':
|
||||
return $bool($value.hasCloudflare!);
|
||||
case 'dateFormat':
|
||||
return $String($value.dateFormat!);
|
||||
case 'dateFormatLocale':
|
||||
return $String($value.dateFormatLocale!);
|
||||
case 'apiUrl':
|
||||
return $String($value.apiUrl!);
|
||||
case 'additionalParams':
|
||||
return $String($value.additionalParams!);
|
||||
case 'notes':
|
||||
return $String($value.notes!);
|
||||
|
||||
default:
|
||||
return _superclass.$getProperty(runtime, identifier);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {
|
||||
switch (identifier) {
|
||||
case 'id':
|
||||
$value.id = value.$reified;
|
||||
case 'name':
|
||||
$value.name = value.$reified;
|
||||
case 'baseUrl':
|
||||
$value.baseUrl = value.$reified;
|
||||
case 'lang':
|
||||
$value.lang = value.$reified;
|
||||
case 'isFullData':
|
||||
$value.isFullData = value.$reified;
|
||||
case 'hasCloudflare':
|
||||
$value.hasCloudflare = value.$reified;
|
||||
case 'dateFormat':
|
||||
$value.dateFormat = value.$reified;
|
||||
case 'dateFormatLocale':
|
||||
$value.dateFormatLocale = value.$reified;
|
||||
case 'apiUrl':
|
||||
$value.apiUrl = value.$reified;
|
||||
case 'additionalParams':
|
||||
$value.additionalParams = value.$reified;
|
||||
case 'notes':
|
||||
$value.notes = value.$reified;
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
String? get apiUrl => $value.apiUrl;
|
||||
|
||||
@override
|
||||
String? get baseUrl => $value.baseUrl;
|
||||
|
||||
@override
|
||||
String? get dateFormat => $value.dateFormat;
|
||||
|
||||
@override
|
||||
String? get dateFormatLocale => $value.dateFormatLocale;
|
||||
|
||||
@override
|
||||
bool? get hasCloudflare => $value.hasCloudflare;
|
||||
|
||||
@override
|
||||
int? get id => $value.id;
|
||||
|
||||
@override
|
||||
bool? get isFullData => $value.isFullData;
|
||||
|
||||
@override
|
||||
String? get lang => $value.lang;
|
||||
|
||||
@override
|
||||
String? get name => $value.name;
|
||||
|
||||
@override
|
||||
String? get additionalParams => $value.additionalParams;
|
||||
|
||||
@override
|
||||
String? get notes => $value.notes;
|
||||
|
||||
@override
|
||||
set apiUrl(String? apiUrl) {}
|
||||
|
||||
@override
|
||||
set baseUrl(String? baseUrl) {}
|
||||
|
||||
@override
|
||||
set dateFormat(String? dateFormat) {}
|
||||
|
||||
@override
|
||||
set dateFormatLocale(String? dateFormatLocale) {}
|
||||
|
||||
@override
|
||||
set hasCloudflare(bool? hasCloudflare) {}
|
||||
|
||||
@override
|
||||
set id(int? id) {}
|
||||
|
||||
@override
|
||||
set isFullData(bool? isFullData) {}
|
||||
|
||||
@override
|
||||
set lang(String? lang) {}
|
||||
|
||||
@override
|
||||
set name(String? name) {}
|
||||
|
||||
@override
|
||||
set additionalParams(String? additionalParams) {}
|
||||
|
||||
@override
|
||||
set notes(String? notes) {}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() => {
|
||||
'apiUrl': apiUrl,
|
||||
'baseUrl': baseUrl,
|
||||
'dateFormat': dateFormat,
|
||||
'dateFormatLocale': dateFormatLocale,
|
||||
'hasCloudflare': hasCloudflare,
|
||||
'id': id,
|
||||
'isFullData': isFullData,
|
||||
'lang': lang,
|
||||
'name': name,
|
||||
'additionalParams': additionalParams,
|
||||
'notes': notes,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,57 +1,12 @@
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:d4rt/d4rt.dart';
|
||||
import 'package:mangayomi/models/manga.dart';
|
||||
|
||||
class $MStatus implements $Instance {
|
||||
static $MStatus $wrap(Runtime runtime, $Value? target, List<$Value?> args) =>
|
||||
$MStatus.wrap(args[0]!.$value);
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'MStatus'),
|
||||
class MStatusBridge {
|
||||
final statusDefinition = BridgedEnumDefinition<Status>(
|
||||
name: 'MStatus',
|
||||
values: Status.values,
|
||||
);
|
||||
static const $declaration = BridgeEnumDef(
|
||||
$type,
|
||||
values: [
|
||||
'ongoing',
|
||||
'completed',
|
||||
'canceled',
|
||||
'unknown',
|
||||
'onHiatus',
|
||||
'publishingFinished',
|
||||
],
|
||||
methods: {},
|
||||
getters: {},
|
||||
setters: {},
|
||||
fields: {},
|
||||
);
|
||||
static final $values = Status.values.asNameMap().map(
|
||||
(key, value) => MapEntry(key, $MStatus.wrap(value)),
|
||||
);
|
||||
const $MStatus.wrap(this.$value);
|
||||
|
||||
@override
|
||||
final Status $value;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'index':
|
||||
return $int($value.index);
|
||||
case 'name':
|
||||
return $String($value.name);
|
||||
case 'hashCode':
|
||||
return $int($value.hashCode);
|
||||
}
|
||||
throw UnimplementedError();
|
||||
void registerBridgedEnum(D4rt interpreter) {
|
||||
interpreter.registerBridgedEnum(statusDefinition);
|
||||
}
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {
|
||||
throw UnimplementedError('Cannot set property on an enum');
|
||||
}
|
||||
|
||||
@override
|
||||
get $reified => $value;
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,88 +1,31 @@
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:d4rt/d4rt.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
|
||||
class $MTrack implements Track, $Instance {
|
||||
$MTrack.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'MTrack'),
|
||||
);
|
||||
|
||||
static const $declaration = BridgeClassDef(
|
||||
BridgeClassType($type),
|
||||
class MTrackBridge {
|
||||
final mTrackBridgedClass = BridgedClassDefinition(
|
||||
nativeType: Track,
|
||||
name: 'MTrack',
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(
|
||||
BridgeFunctionDef(returns: BridgeTypeAnnotation($type)),
|
||||
),
|
||||
'': (visitor, positionalArgs, namedArgs) {
|
||||
return Track(
|
||||
file: namedArgs.get<String?>('file'),
|
||||
label: namedArgs.get<String?>('label'),
|
||||
);
|
||||
},
|
||||
},
|
||||
// Specify class fields
|
||||
fields: {
|
||||
'file': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'label': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
getters: {
|
||||
'file': (visitor, target) => (target as Track).file,
|
||||
'label': (visitor, target) => (target as Track).label,
|
||||
},
|
||||
setters: {
|
||||
'file':
|
||||
(visitor, target, value) => (target as Track).file = value as String?,
|
||||
'label':
|
||||
(visitor, target, value) =>
|
||||
(target as Track).label = value as String?,
|
||||
},
|
||||
wrap: true,
|
||||
);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $MTrack.wrap(Track());
|
||||
}
|
||||
|
||||
@override
|
||||
final Track $value;
|
||||
|
||||
@override
|
||||
Track get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'file':
|
||||
return $String($value.file!);
|
||||
case 'label':
|
||||
return $String($value.label!);
|
||||
|
||||
default:
|
||||
return _superclass.$getProperty(runtime, identifier);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {
|
||||
switch (identifier) {
|
||||
case 'file':
|
||||
$value.file = value.$reified;
|
||||
case 'label':
|
||||
$value.label = value.$reified;
|
||||
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
String? get file => $value.file;
|
||||
|
||||
@override
|
||||
String? get label => $value.label;
|
||||
|
||||
@override
|
||||
set file(String? file) {}
|
||||
|
||||
@override
|
||||
set label(String? label) {}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
throw UnimplementedError();
|
||||
void registerBridgedClasses(D4rt interpreter) {
|
||||
interpreter.registerBridgedClass(mTrackBridgedClass);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,164 +1,51 @@
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/m_track.dart';
|
||||
import 'package:d4rt/d4rt.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
|
||||
class $MVideo implements Video, $Instance {
|
||||
$MVideo.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'MVideo'),
|
||||
);
|
||||
|
||||
static const $declaration = BridgeClassDef(
|
||||
BridgeClassType($type),
|
||||
class MVideoBridge {
|
||||
final mVideoBridgedClass = BridgedClassDefinition(
|
||||
nativeType: Video,
|
||||
name: 'MVideo',
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(
|
||||
BridgeFunctionDef(returns: BridgeTypeAnnotation($type)),
|
||||
),
|
||||
'': (visitor, positionalArgs, namedArgs) {
|
||||
return Video(
|
||||
positionalArgs.get<String?>(0) ?? '',
|
||||
positionalArgs.get<String?>(1) ?? '',
|
||||
positionalArgs.get<String?>(2) ?? '',
|
||||
headers: namedArgs.get<Map?>('headers')?.cast(),
|
||||
subtitles: namedArgs.get<List<Track>?>('subtitles'),
|
||||
audios: namedArgs.get<List<Track>?>('audios'),
|
||||
);
|
||||
},
|
||||
},
|
||||
// Specify class fields
|
||||
fields: {
|
||||
'url': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'quality': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'originalUrl': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
),
|
||||
'headers': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.map, [
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
BridgeTypeRef(CoreTypes.string),
|
||||
]),
|
||||
nullable: true,
|
||||
),
|
||||
),
|
||||
'subtitles': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.list, [$MTrack.$type])),
|
||||
),
|
||||
'audios': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.list, [$MTrack.$type])),
|
||||
),
|
||||
getters: {
|
||||
'url': (visitor, target) => (target as Video).url,
|
||||
'quality': (visitor, target) => (target as Video).quality,
|
||||
'originalUrl': (visitor, target) => (target as Video).originalUrl,
|
||||
'headers': (visitor, target) => (target as Video).headers,
|
||||
'subtitles': (visitor, target) => (target as Video).subtitles,
|
||||
'audios': (visitor, target) => (target as Video).audios,
|
||||
},
|
||||
setters: {
|
||||
'url':
|
||||
(visitor, target, value) => (target as Video).url = value as String,
|
||||
'quality':
|
||||
(visitor, target, value) =>
|
||||
(target as Video).quality = value as String,
|
||||
'originalUrl':
|
||||
(visitor, target, value) =>
|
||||
(target as Video).originalUrl = value as String,
|
||||
'headers':
|
||||
(visitor, target, value) =>
|
||||
(target as Video).headers = (value as Map?)?.cast(),
|
||||
'subtitles':
|
||||
(visitor, target, value) =>
|
||||
(target as Video).subtitles = (value as List?)?.cast(),
|
||||
'audios':
|
||||
(visitor, target, value) =>
|
||||
(target as Video).audios = (value as List?)?.cast(),
|
||||
},
|
||||
wrap: true,
|
||||
);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $MVideo.wrap(Video("", "", ""));
|
||||
}
|
||||
|
||||
@override
|
||||
final Video $value;
|
||||
|
||||
@override
|
||||
Video get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'url':
|
||||
return $String($value.url);
|
||||
case 'quality':
|
||||
return $String($value.quality);
|
||||
case 'originalUrl':
|
||||
return $String($value.originalUrl);
|
||||
case 'headers':
|
||||
return $Map.wrap($value.headers ?? {});
|
||||
case 'subtitles':
|
||||
return $List.wrap(
|
||||
$value.subtitles!
|
||||
.map((e) => $MTrack.wrap(Track(file: e.file, label: e.label)))
|
||||
.toList(),
|
||||
);
|
||||
case 'audios':
|
||||
return $List.wrap(
|
||||
$value.audios!
|
||||
.map((e) => $MTrack.wrap(Track(file: e.file, label: e.label)))
|
||||
.toList(),
|
||||
);
|
||||
|
||||
default:
|
||||
return _superclass.$getProperty(runtime, identifier);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
int $getRuntimeType(Runtime runtime) => runtime.lookupType($type.spec!);
|
||||
|
||||
@override
|
||||
void $setProperty(Runtime runtime, String identifier, $Value value) {
|
||||
switch (identifier) {
|
||||
case 'url':
|
||||
$value.url = value.$reified;
|
||||
case 'quality':
|
||||
$value.quality = value.$reified;
|
||||
case 'originalUrl':
|
||||
$value.originalUrl = value.$reified;
|
||||
case 'headers':
|
||||
$value.headers = (value.$reified as Map).map(
|
||||
(key, value) => MapEntry(key.toString(), value.toString()),
|
||||
);
|
||||
case 'subtitles':
|
||||
$value.subtitles =
|
||||
(value.$reified as List)
|
||||
.map((e) => Track(file: e.file, label: e.label))
|
||||
.toList();
|
||||
|
||||
case 'audios':
|
||||
$value.audios =
|
||||
(value.$reified as List)
|
||||
.map((e) => Track(file: e.file, label: e.label))
|
||||
.toList();
|
||||
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
String get url => $value.url;
|
||||
|
||||
@override
|
||||
List<Track>? get subtitles => $value.subtitles;
|
||||
|
||||
@override
|
||||
List<Track>? get audios => $value.audios;
|
||||
|
||||
@override
|
||||
String get quality => $value.quality;
|
||||
|
||||
@override
|
||||
Map<String, String>? get headers => $value.headers;
|
||||
|
||||
@override
|
||||
String get originalUrl => $value.originalUrl;
|
||||
|
||||
@override
|
||||
set url(String? url) {}
|
||||
|
||||
@override
|
||||
set quality(String? quality) {}
|
||||
|
||||
@override
|
||||
set headers(Map? headers) {}
|
||||
|
||||
@override
|
||||
set originalUrl(String? originalUrl) {}
|
||||
|
||||
@override
|
||||
set subtitles(List? subtitles) {}
|
||||
|
||||
@override
|
||||
set audios(List? audios) {}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
throw UnimplementedError();
|
||||
void registerBridgedClasses(D4rt interpreter) {
|
||||
interpreter.registerBridgedClass(mVideoBridgedClass);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
32
lib/eval/dart/bridge/registrer.dart
Normal file
32
lib/eval/dart/bridge/registrer.dart
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
import 'package:d4rt/d4rt.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/document.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/element.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/filter.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/http.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/m_chapter.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/m_manga.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/m_pages.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/m_provider.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/m_source.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/bridge/source_preference.dart';
|
||||
|
||||
class RegistrerBridge {
|
||||
static void registerBridge(D4rt interpreter) {
|
||||
MDocumentBridge().registerBridgedClasses(interpreter);
|
||||
MElementBridge().registerBridgedClasses(interpreter);
|
||||
FilterBridge().registerBridgedClasses(interpreter);
|
||||
HttpBridge().registerBridgedClasses(interpreter);
|
||||
MMangaBridge().registerBridgedClasses(interpreter);
|
||||
MChapterBridge().registerBridgedClasses(interpreter);
|
||||
MPagesBridge().registerBridgedClasses(interpreter);
|
||||
MProviderBridged().registerBridgedClasses(interpreter);
|
||||
MSourceBridge().registerBridgedClasses(interpreter);
|
||||
MStatusBridge().registerBridgedEnum(interpreter);
|
||||
MTrackBridge().registerBridgedClasses(interpreter);
|
||||
MVideoBridge().registerBridgedClasses(interpreter);
|
||||
SourcePreferenceBridge().registerBridgedClasses(interpreter);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,15 +0,0 @@
|
|||
import 'dart:typed_data';
|
||||
import 'package:dart_eval/dart_eval.dart';
|
||||
import 'package:mangayomi/eval/dart/plugin.dart';
|
||||
|
||||
Uint8List compilerEval(String code) {
|
||||
late Compiler compiler = Compiler();
|
||||
final plugin = MEvalPlugin();
|
||||
compiler.addPlugin(plugin);
|
||||
final program = compiler.compile({
|
||||
'mangayomi': {'main.dart': code},
|
||||
});
|
||||
|
||||
final bytecode = program.write();
|
||||
return bytecode;
|
||||
}
|
||||
|
|
@ -1,205 +0,0 @@
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/document.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/element.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/http.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/m_chapter.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/filter.dart';
|
||||
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_provider.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/m_manga.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/m_track.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/m_video.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/source_preference.dart';
|
||||
|
||||
class MEvalPlugin extends EvalPlugin {
|
||||
@override
|
||||
String get identifier => 'package:mangayomi';
|
||||
|
||||
@override
|
||||
void configureForCompile(BridgeDeclarationRegistry registry) {
|
||||
registry.defineBridgeClass($MProvider.$declaration);
|
||||
registry.defineBridgeClass($MPages.$declaration);
|
||||
registry.defineBridgeClass($MSource.$declaration);
|
||||
registry.defineBridgeClass($MVideo.$declaration);
|
||||
registry.defineBridgeClass($MTrack.$declaration);
|
||||
registry.defineBridgeClass($MChapter.$declaration);
|
||||
registry.defineBridgeClass($MManga.$declaration);
|
||||
registry.defineBridgeEnum($MStatus.$declaration);
|
||||
//Filter
|
||||
registry.defineBridgeClass($FilterList.$declaration);
|
||||
registry.defineBridgeClass($SelectFilter.$declaration);
|
||||
registry.defineBridgeClass($SeparatorFilter.$declaration);
|
||||
registry.defineBridgeClass($HeaderFilter.$declaration);
|
||||
registry.defineBridgeClass($TextFilter.$declaration);
|
||||
registry.defineBridgeClass($SortFilter.$declaration);
|
||||
registry.defineBridgeClass($TriStateFilter.$declaration);
|
||||
registry.defineBridgeClass($GroupFilter.$declaration);
|
||||
registry.defineBridgeClass($CheckBoxFilter.$declaration);
|
||||
registry.defineBridgeClass($SortState.$declaration);
|
||||
registry.defineBridgeClass($SelectFilterOption.$declaration);
|
||||
//SourcePreferences
|
||||
registry.defineBridgeClass($CheckBoxPreference.$declaration);
|
||||
registry.defineBridgeClass($SwitchPreferenceCompat.$declaration);
|
||||
registry.defineBridgeClass($ListPreference.$declaration);
|
||||
registry.defineBridgeClass($MultiSelectListPreference.$declaration);
|
||||
registry.defineBridgeClass($CheckBoxPreference.$declaration);
|
||||
registry.defineBridgeClass($EditTextPreference.$declaration);
|
||||
//DOM HTML
|
||||
registry.defineBridgeClass($MElement.$declaration);
|
||||
registry.defineBridgeClass($Element.$declaration);
|
||||
registry.defineBridgeClass($MDocument.$declaration);
|
||||
registry.defineBridgeClass($Document.$declaration);
|
||||
//HTTP CLIENT
|
||||
registry.defineBridgeClass($Client.$declaration);
|
||||
registry.defineBridgeClass($Response.$declaration);
|
||||
registry.defineBridgeClass($BaseRequest.$declaration);
|
||||
registry.defineBridgeClass($StreamedResponse.$declaration);
|
||||
registry.defineBridgeClass($ByteStream.$declaration);
|
||||
}
|
||||
|
||||
@override
|
||||
void configureForRuntime(Runtime runtime) {
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'MProvider.',
|
||||
$MProvider.$construct,
|
||||
isBridge: true,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'MChapter.',
|
||||
$MChapter.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'MManga.',
|
||||
$MManga.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'MPages.',
|
||||
$MPages.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'MSource.',
|
||||
$MSource.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'MVideo.',
|
||||
$MVideo.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'MTrack.',
|
||||
$MTrack.$new,
|
||||
);
|
||||
runtime.registerBridgeEnumValues(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'MStatus',
|
||||
$MStatus.$values,
|
||||
);
|
||||
//Filter
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'FilterList.',
|
||||
$FilterList.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'SelectFilter.',
|
||||
$SelectFilter.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'SeparatorFilter.',
|
||||
$SeparatorFilter.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'HeaderFilter.',
|
||||
$HeaderFilter.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'TextFilter.',
|
||||
$TextFilter.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'SortFilter.',
|
||||
$SortFilter.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'TriStateFilter.',
|
||||
$TriStateFilter.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'GroupFilter.',
|
||||
$GroupFilter.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'CheckBoxFilter.',
|
||||
$CheckBoxFilter.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'SortState.',
|
||||
$SortState.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'SelectFilterOption.',
|
||||
$SelectFilterOption.$new,
|
||||
);
|
||||
//Sources preferences
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'CheckBoxPreference.',
|
||||
$CheckBoxPreference.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'SwitchPreferenceCompat.',
|
||||
$SwitchPreferenceCompat.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'ListPreference.',
|
||||
$ListPreference.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'MultiSelectListPreference.',
|
||||
$MultiSelectListPreference.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'EditTextPreference.',
|
||||
$EditTextPreference.$new,
|
||||
);
|
||||
//DOM HTML
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'MElement.',
|
||||
$MElement.$new,
|
||||
);
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'MDocument.',
|
||||
$MDocument.$new,
|
||||
);
|
||||
//HTTP CLIENT
|
||||
runtime.registerBridgeFunc(
|
||||
'package:mangayomi/bridge_lib.dart',
|
||||
'Client.',
|
||||
$Client.$new,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
import 'dart:typed_data';
|
||||
import 'package:dart_eval/dart_eval.dart';
|
||||
import 'package:mangayomi/eval/dart/plugin.dart';
|
||||
|
||||
Runtime runtimeEval(Uint8List bytecode) {
|
||||
final runtime = Runtime(bytecode.buffer.asByteData());
|
||||
final plugin = MEvalPlugin();
|
||||
runtime.addPlugin(plugin);
|
||||
return runtime;
|
||||
}
|
||||
|
|
@ -1,13 +1,9 @@
|
|||
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/runtime/runtime.dart';
|
||||
import 'package:d4rt/d4rt.dart';
|
||||
import 'package:mangayomi/eval/dart/bridge/registrer.dart';
|
||||
import 'package:mangayomi/eval/model/filter.dart';
|
||||
import 'package:mangayomi/eval/javascript/http.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';
|
||||
|
|
@ -21,38 +17,31 @@ class DartExtensionService implements ExtensionService {
|
|||
|
||||
DartExtensionService(this.source);
|
||||
|
||||
MProvider _executeLib() {
|
||||
final bytecode = compilerEval(source.sourceCode!);
|
||||
D4rt _executeLib() {
|
||||
final interpreter = D4rt();
|
||||
RegistrerBridge.registerBridge(interpreter);
|
||||
|
||||
final runtime = runtimeEval(bytecode);
|
||||
|
||||
return runtime.executeLib('package:mangayomi/main.dart', 'main', [
|
||||
$MSource.wrap(source.toMSource()),
|
||||
])
|
||||
as MProvider;
|
||||
interpreter.execute(
|
||||
source.sourceCode!.replaceAll(
|
||||
"final Client client = Client(source)",
|
||||
"final Client client = Client()",
|
||||
),
|
||||
mainArgs: source.toMSource(),
|
||||
);
|
||||
return interpreter;
|
||||
}
|
||||
|
||||
@override
|
||||
Map<String, String> getHeaders() {
|
||||
Map<String, String> headers = {};
|
||||
try {
|
||||
final bytecode = compilerEval(source.sourceCode!);
|
||||
final runtime = runtimeEval(bytecode);
|
||||
runtime.args = [$String(source.baseUrl!)];
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'getHeader');
|
||||
if (res is $Map) {
|
||||
headers = (res.$reified).toMapStringString!;
|
||||
} else if (res is Map) {
|
||||
headers = res.toMapStringString!;
|
||||
} else {
|
||||
throw "";
|
||||
}
|
||||
headers = _executeLib().invoke('headers', []) as Map<String, String>;
|
||||
} catch (_) {
|
||||
try {
|
||||
headers = _executeLib().headers;
|
||||
} catch (_) {
|
||||
return {};
|
||||
}
|
||||
headers =
|
||||
_executeLib().invoke('getHeader', [source.baseUrl!])
|
||||
as Map<String, String>;
|
||||
} catch (_) {}
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
|
@ -61,10 +50,9 @@ class DartExtensionService implements ExtensionService {
|
|||
String get sourceBaseUrl {
|
||||
String? baseUrl;
|
||||
try {
|
||||
baseUrl = _executeLib().baseUrl;
|
||||
} catch (_) {
|
||||
//
|
||||
}
|
||||
final interpreter = _executeLib();
|
||||
baseUrl = interpreter.invoke('baseUrl', []) as String?;
|
||||
} catch (_) {}
|
||||
|
||||
return baseUrl == null || baseUrl.isEmpty ? source.baseUrl! : baseUrl;
|
||||
}
|
||||
|
|
@ -73,36 +61,55 @@ class DartExtensionService implements ExtensionService {
|
|||
bool get supportsLatest {
|
||||
bool? supportsLatest;
|
||||
try {
|
||||
supportsLatest = _executeLib().supportsLatest;
|
||||
final interpreter = _executeLib();
|
||||
supportsLatest = interpreter.invoke('supportsLatest', []) as bool?;
|
||||
} catch (e) {
|
||||
supportsLatest = true;
|
||||
}
|
||||
return supportsLatest;
|
||||
return supportsLatest ?? true;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MPages> getPopular(int page) async {
|
||||
return await _executeLib().getPopular(page);
|
||||
try {
|
||||
final interpreter = _executeLib();
|
||||
final result = await interpreter.invoke('getPopular', [page]);
|
||||
return result as MPages;
|
||||
} catch (e) {
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MPages> getLatestUpdates(int page) async {
|
||||
return await _executeLib().getLatestUpdates(page);
|
||||
final interpreter = _executeLib();
|
||||
final result = await interpreter.invoke('getLatestUpdates', [page]);
|
||||
return result as MPages;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MPages> search(String query, int page, List<dynamic> filters) async {
|
||||
return await _executeLib().search(query, page, FilterList(filters));
|
||||
final interpreter = _executeLib();
|
||||
final result = await interpreter.invoke('search', [
|
||||
query,
|
||||
page,
|
||||
FilterList(filters),
|
||||
]);
|
||||
return result as MPages;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MManga> getDetail(String url) async {
|
||||
return await _executeLib().getDetail(url);
|
||||
final interpreter = _executeLib();
|
||||
final result = await interpreter.invoke('getDetail', [url]);
|
||||
return result as MManga;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<PageUrl>> getPageList(String url) async {
|
||||
return (await _executeLib().getPageList(url))
|
||||
final interpreter = _executeLib();
|
||||
final result = await interpreter.invoke('getPageList', [url]);
|
||||
return (result as List)
|
||||
.map(
|
||||
(e) =>
|
||||
e is String
|
||||
|
|
@ -114,45 +121,593 @@ class DartExtensionService implements ExtensionService {
|
|||
|
||||
@override
|
||||
Future<List<Video>> getVideoList(String url) async {
|
||||
return await _executeLib().getVideoList(url);
|
||||
final interpreter = _executeLib();
|
||||
final result = await interpreter.invoke('getVideoList', [url]);
|
||||
return (result as List).cast<Video>();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String> getHtmlContent(String name, String url) async {
|
||||
return await _executeLib().getHtmlContent(name, url);
|
||||
Future<String> getHtmlContent(String url, String? referer) async {
|
||||
final interpreter = _executeLib();
|
||||
final result = await interpreter.invoke('getHtmlContent', [url, referer]);
|
||||
return result as String;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String> cleanHtmlContent(String html) async {
|
||||
return await _executeLib().cleanHtmlContent(html);
|
||||
final interpreter = _executeLib();
|
||||
final result = await interpreter.invoke('cleanHtmlContent', [html]);
|
||||
return result as String;
|
||||
}
|
||||
|
||||
@override
|
||||
FilterList getFilterList() {
|
||||
List<dynamic> list;
|
||||
|
||||
try {
|
||||
list =
|
||||
_executeLib()
|
||||
.getFilterList()
|
||||
.map((e) => e is $Value ? e.$reified : e)
|
||||
.toList();
|
||||
final interpreter = _executeLib();
|
||||
list = interpreter.invoke('getFilterList', []) as List;
|
||||
} catch (_) {
|
||||
list = [];
|
||||
}
|
||||
|
||||
return FilterList(list);
|
||||
return FilterList(_toValueList(list));
|
||||
}
|
||||
|
||||
List _toValueList(List filters) {
|
||||
return (filters).map((e) {
|
||||
if (e is BridgedInstance) {
|
||||
e = e.nativeObject;
|
||||
}
|
||||
if (e is SelectFilter) {
|
||||
return SelectFilter(
|
||||
e.type,
|
||||
e.name,
|
||||
e.state,
|
||||
_toValueList(e.values),
|
||||
e.typeName,
|
||||
);
|
||||
} else if (e is SortFilter) {
|
||||
return SortFilter(
|
||||
e.type,
|
||||
e.name,
|
||||
e.state,
|
||||
_toValueList(e.values),
|
||||
e.typeName,
|
||||
);
|
||||
} else if (e is GroupFilter) {
|
||||
return GroupFilter(e.type, e.name, _toValueList(e.state), e.typeName);
|
||||
}
|
||||
return e;
|
||||
}).toList();
|
||||
}
|
||||
|
||||
@override
|
||||
List<SourcePreference> getSourcePreferences() {
|
||||
final interpreter = _executeLib();
|
||||
try {
|
||||
return _executeLib()
|
||||
.getSourcePreferences()
|
||||
.map((e) => (e is $Value ? e.$reified : e) as SourcePreference)
|
||||
.toList();
|
||||
final result = interpreter.invoke('getSourcePreferences', []);
|
||||
return (result as List).cast();
|
||||
} catch (_) {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final aaaaaa = r'''
|
||||
|
||||
import 'package:mangayomi/bridge_lib.dart';
|
||||
import 'dart:convert';
|
||||
|
||||
class AniZone extends MProvider {
|
||||
AniZone({required this.source});
|
||||
|
||||
final MSource source;
|
||||
final Client client = Client(source);
|
||||
|
||||
// Constants for the xpath
|
||||
static const String urlXpath =
|
||||
'//*[contains(@class,"flw-item item-qtip")]/div[@class="film-poster"]/a/@href';
|
||||
static const String nameXpath =
|
||||
'//*[contains(@class,"flw-item item-qtip")]/div[@class="film-detail"]/h3/text()';
|
||||
static const String imageXpath =
|
||||
'//*[contains(@class,"flw-item item-qtip")]/div[@class="film-poster"]/img/@data-src';
|
||||
|
||||
// Methods for fetching the manga list (popular, latest & search)
|
||||
Future<MPages> _getMangaList(String url) async {
|
||||
final doc = (await client.get(Uri.parse(url))).body;
|
||||
List<MManga> animeList = [];
|
||||
|
||||
final urls = xpath(doc, urlXpath);
|
||||
final names = xpath(doc, nameXpath);
|
||||
final images = xpath(doc, imageXpath);
|
||||
|
||||
if (urls.isEmpty || names.isEmpty || images.isEmpty) {
|
||||
return MPages([], false);
|
||||
}
|
||||
|
||||
for (var i = 0; i < names.length; i++) {
|
||||
print(names[i]);
|
||||
MManga anime = MManga();
|
||||
anime.name = names[i];
|
||||
anime.imageUrl = images[i];
|
||||
anime.link = urls[i];
|
||||
animeList.add(anime);
|
||||
}
|
||||
|
||||
return MPages(animeList, urls.isNotEmpty);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MPages> getPopular(int page) async {
|
||||
return _getMangaList("${source.baseUrl}/most-popular/?page=$page");
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MPages> getLatestUpdates(int page) async {
|
||||
return _getMangaList("${source.baseUrl}/recently-added/?page=$page");
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MPages> search(String query, int page, FilterList filterList) async {
|
||||
String baseUrl = "${source.baseUrl}/filter?keyword=$query";
|
||||
|
||||
final filterHandlers = {
|
||||
"TypeFilter": "type",
|
||||
"LanguageFilter": "lang",
|
||||
"SaisonFilter": "season",
|
||||
"StatusFilter": "status",
|
||||
"GenreFilter": "genre",
|
||||
};
|
||||
|
||||
final activeFilterParams = <String, String>{};
|
||||
|
||||
for (var filter in filterList.filters) {
|
||||
final paramKey = filterHandlers[filter.type];
|
||||
if (paramKey != null && filter.state is List) {
|
||||
final selectedValues =
|
||||
(filter.state as List)
|
||||
.where((item) {
|
||||
return item.state == true && item.value != null;
|
||||
})
|
||||
.map((item) => item.value as String)
|
||||
.toList();
|
||||
|
||||
if (selectedValues.isNotEmpty) {
|
||||
activeFilterParams[paramKey] = selectedValues.join("%2C");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (activeFilterParams.isNotEmpty) {
|
||||
final queryString = activeFilterParams.entries
|
||||
.map((entry) => '${Uri.encodeComponent(entry.key)}=${entry.value}')
|
||||
.join('&');
|
||||
baseUrl += '&$queryString';
|
||||
}
|
||||
|
||||
return _getMangaList("$baseUrl&page=$page");
|
||||
}
|
||||
|
||||
Future<MManga> getDetail(String url) async {
|
||||
MManga anime = MManga();
|
||||
try {
|
||||
final doc = (await client.get(Uri.parse(url))).body;
|
||||
final description = xpath(doc, '//p[contains(@class,"short")]/text()');
|
||||
anime.description = description.isNotEmpty ? description.first : "";
|
||||
|
||||
final statusList = xpath(
|
||||
doc,
|
||||
'//div[contains(@class,"col2")]//div[contains(@class,"item")]//div[contains(@class,"item-content")]/text()',
|
||||
);
|
||||
if (statusList.isNotEmpty) {
|
||||
if (statusList[0] == "Terminer") {
|
||||
anime.status = MStatus.completed;
|
||||
} else if (statusList[0] == "En cours") {
|
||||
anime.status = MStatus.ongoing;
|
||||
} else {
|
||||
anime.status = MStatus.unknown;
|
||||
}
|
||||
} else {
|
||||
anime.status = MStatus.unknown;
|
||||
}
|
||||
|
||||
anime.genre = xpath(
|
||||
doc,
|
||||
'//div[contains(@class,"item")]//div[contains(@class,"item-content")]//a[contains(@href,"genre")]/text()',
|
||||
);
|
||||
|
||||
final regex = RegExp(r'(\d+)$');
|
||||
final match = regex.firstMatch(url);
|
||||
|
||||
if (match == null) {
|
||||
throw Exception('Numéro de l\'épisode non trouvé dans l\'URL.');
|
||||
}
|
||||
|
||||
final res =
|
||||
(await client.get(
|
||||
Uri.parse("${source.baseUrl}/ajax/episode/list/${match.group(1)}"),
|
||||
)).body;
|
||||
|
||||
List<MChapter> episodesList = [];
|
||||
|
||||
final episodeElements = parseHtml(
|
||||
json.decode(res)["html"],
|
||||
).select(".ep-item");
|
||||
|
||||
// Associer chaque titre à son URL et récupérer les vidéos
|
||||
for (var element in episodeElements) {
|
||||
MChapter episode = MChapter();
|
||||
episode.name = element.attr("title");
|
||||
|
||||
String id = substringAfterLast(element.attr("href"), "=");
|
||||
episode.url = "${source.baseUrl}/ajax/episode/servers?episodeId=$id";
|
||||
episodesList.add(episode);
|
||||
}
|
||||
|
||||
anime.chapters = episodesList.reversed.toList();
|
||||
|
||||
return anime;
|
||||
} catch (e) {
|
||||
throw Exception('Erreur lors de la récupération des détails: $e');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<MVideo>> getVideoList(String url) async {
|
||||
final videoRes =
|
||||
(await client.get(
|
||||
Uri.parse(url),
|
||||
headers: {"Referer": "${source.baseUrl}/"},
|
||||
)).body;
|
||||
|
||||
final lang = xpath(
|
||||
videoRes.replaceAll(r'\', ''),
|
||||
'//div[contains(@class,"item server-item")]/@data-type',
|
||||
);
|
||||
final links = xpath(
|
||||
videoRes.replaceAll(r'\', ''),
|
||||
'//div[contains(@class,"item server-item")]/@data-id',
|
||||
);
|
||||
final playersNames = xpath(
|
||||
videoRes.replaceAll(r'\', ''),
|
||||
'//div[contains(@class,"item server-item")]/text()',
|
||||
);
|
||||
List<Map<String, String>> players = [];
|
||||
for (int j = 0; j < links.length; j++) {
|
||||
// schema of players https://v1.animesz.xyz/ajax/episode/servers?episodeId=(id_episode)
|
||||
// schema or url https://v1.animesz.xyz/ajax/episode/sources?id=(player_id)&epid=(id_episode)
|
||||
if (playersNames.isNotEmpty && playersNames[j] == "sibnet") {
|
||||
final playerUrl =
|
||||
"https://video.sibnet.ru/shell.php?videoid=${links[j]}";
|
||||
players.add({"lang": lang[j], "player": playerUrl});
|
||||
} else if (playersNames.isNotEmpty && playersNames[j] == "sendvid") {
|
||||
final playerUrl = "https://sendvid.com/embed/${links[j]}";
|
||||
players.add({"lang": lang[j], "player": playerUrl});
|
||||
} else if (playersNames.isNotEmpty && playersNames[j] == "VidCDN") {
|
||||
final playerUrl =
|
||||
"https://r.vidcdn.xyz/v1/api/get_sources/${links[j].replaceFirst(RegExp(r'vidcdn$'), '')}";
|
||||
players.add({"lang": lang[j], "player": playerUrl});
|
||||
} else if (playersNames.isNotEmpty && playersNames[j] == "Voe") {
|
||||
final playerUrl = "https://voe.sx/e/${links[j]}";
|
||||
players.add({"lang": lang[j], "player": playerUrl});
|
||||
} else if (playersNames.isNotEmpty && playersNames[j] == "Fmoon") {
|
||||
final playerUrl =
|
||||
"https://filemoon.sx/e/${links[j]}&data-realid=${links[j]}&epid=${substringAfter(url, "episodeId=")}";
|
||||
players.add({"lang": lang[j], "player": playerUrl});
|
||||
}
|
||||
}
|
||||
|
||||
List<MVideo> videos = [];
|
||||
for (var player in players) {
|
||||
String lang = (player["lang"] as String).toUpperCase();
|
||||
String playerUrl = player["player"];
|
||||
List<MVideo> a = [];
|
||||
if (playerUrl.contains("sendvid")) {
|
||||
a = await sendVidExtractorr(playerUrl, "$lang ");
|
||||
} else if (playerUrl.contains("sibnet.ru")) {
|
||||
a = await sibnetExtractor(playerUrl, lang);
|
||||
} else if (playerUrl.contains("voe.sx")) {
|
||||
a = await voeExtractor(playerUrl, "$lang ");
|
||||
} else if (playerUrl.contains("vidcdn")) {
|
||||
a = await vidcdnExtractor(playerUrl, lang);
|
||||
} else if (playerUrl.contains("filemoon")) {
|
||||
a = await filemoonExtractor(playerUrl, "$lang Filemoon - ", "");
|
||||
} else if (playerUrl.contains("vidhide")) {
|
||||
a = await streamHideExtractor(playerUrl, lang);
|
||||
}
|
||||
videos.addAll(a);
|
||||
}
|
||||
|
||||
return sortVideos(videos, source.id);
|
||||
}
|
||||
|
||||
Future<List<MVideo>> streamHideExtractor(String url, String prefix) async {
|
||||
final res = (await client.get(Uri.parse(url))).body;
|
||||
final masterUrl = substringBefore(
|
||||
substringAfter(
|
||||
substringAfter(substringAfter(unpackJs(res), "sources:"), "file:\""),
|
||||
"src:\"",
|
||||
),
|
||||
'"',
|
||||
);
|
||||
final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body;
|
||||
List<MVideo> videos = [];
|
||||
for (var it in substringAfter(
|
||||
masterPlaylistRes,
|
||||
"#EXT-X-STREAM-INF:",
|
||||
).split("#EXT-X-STREAM-INF:")) {
|
||||
final quality =
|
||||
"${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p";
|
||||
|
||||
String videoUrl = substringBefore(substringAfter(it, "\n"), "\n");
|
||||
|
||||
if (!videoUrl.startsWith("http")) {
|
||||
videoUrl =
|
||||
"${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl";
|
||||
}
|
||||
|
||||
MVideo video = MVideo();
|
||||
video
|
||||
..url = videoUrl
|
||||
..originalUrl = videoUrl
|
||||
..quality = "$prefix StreamHideVid - $quality";
|
||||
videos.add(video);
|
||||
}
|
||||
return videos;
|
||||
}
|
||||
|
||||
@override
|
||||
List<dynamic> getFilterList() {
|
||||
return [
|
||||
GroupFilter("TypeFilter", "Type", [
|
||||
CheckBoxFilter("Film", "1"),
|
||||
CheckBoxFilter("Anime", "2"),
|
||||
CheckBoxFilter("OVA", "3"),
|
||||
CheckBoxFilter("ONA", "4"),
|
||||
CheckBoxFilter("Special", "5"),
|
||||
CheckBoxFilter("Music", "6"),
|
||||
]),
|
||||
GroupFilter("LanguageFilter", "Langue", [
|
||||
CheckBoxFilter("VF", "3"),
|
||||
CheckBoxFilter("VOSTFR", "4"),
|
||||
CheckBoxFilter("Multicc", "2"),
|
||||
CheckBoxFilter("EN", "1"),
|
||||
]),
|
||||
GroupFilter("SaisonFilter", "Saison", [
|
||||
CheckBoxFilter("Printemps", "1"),
|
||||
CheckBoxFilter("Été", "2"),
|
||||
CheckBoxFilter("Automne", "3"),
|
||||
CheckBoxFilter("Hiver", "4"),
|
||||
]),
|
||||
GroupFilter("StatusFilter", "Statut", [
|
||||
CheckBoxFilter("Terminés", "1"),
|
||||
CheckBoxFilter("En cours", "2"),
|
||||
CheckBoxFilter("Pas encore diffusés", "3"),
|
||||
]),
|
||||
GroupFilter("GenreFilter", "Genre", [
|
||||
CheckBoxFilter("Action", "1"),
|
||||
CheckBoxFilter("Aventure", "2"),
|
||||
CheckBoxFilter("Voitures", "3"),
|
||||
CheckBoxFilter("Comédie", "4"),
|
||||
CheckBoxFilter("Démence", "5"),
|
||||
CheckBoxFilter("Démons", "6"),
|
||||
CheckBoxFilter("Drame", "8"),
|
||||
CheckBoxFilter("Ecchi", "9"),
|
||||
CheckBoxFilter("Fantastique", "10"),
|
||||
CheckBoxFilter("Jeu", "11"),
|
||||
CheckBoxFilter("Harem", "35"),
|
||||
CheckBoxFilter("Historique", "13"),
|
||||
CheckBoxFilter("Horreur", "14"),
|
||||
CheckBoxFilter("Isekai", "44"),
|
||||
CheckBoxFilter("Josei", "43"),
|
||||
CheckBoxFilter("Enfants", "25"),
|
||||
CheckBoxFilter("Magie", "16"),
|
||||
CheckBoxFilter("Arts martiaux", "17"),
|
||||
CheckBoxFilter("Mecha", "18"),
|
||||
CheckBoxFilter("Militaire", "38"),
|
||||
CheckBoxFilter("Musique", "19"),
|
||||
CheckBoxFilter("Mystère", "7"),
|
||||
CheckBoxFilter("Parodie", "20"),
|
||||
CheckBoxFilter("Police", "39"),
|
||||
CheckBoxFilter("Psychologique", "40"),
|
||||
CheckBoxFilter("Romance", "22"),
|
||||
CheckBoxFilter("Samouraï", "21"),
|
||||
CheckBoxFilter("École", "23"),
|
||||
CheckBoxFilter("Science-Fiction", "24"),
|
||||
CheckBoxFilter("Seinen", "42"),
|
||||
CheckBoxFilter("Shoujo Ai", "26"),
|
||||
CheckBoxFilter("Shoujo", "25"),
|
||||
CheckBoxFilter("Shounen Ai", "28"),
|
||||
CheckBoxFilter("Tranche de vie", "36"),
|
||||
CheckBoxFilter("Shounen", "27"),
|
||||
CheckBoxFilter("Espace", "29"),
|
||||
CheckBoxFilter("Sports", "30"),
|
||||
CheckBoxFilter("Super Pouvoir", "31"),
|
||||
CheckBoxFilter("Surnaturel", "37"),
|
||||
CheckBoxFilter("Vampire", "32"),
|
||||
CheckBoxFilter("Yaoi", "33"),
|
||||
CheckBoxFilter("Yuri", "34"),
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
@override
|
||||
List<dynamic> getSourcePreferences() {
|
||||
return [
|
||||
ListPreference(
|
||||
key: "preferred_quality",
|
||||
title: "Qualité préférée",
|
||||
summary: "",
|
||||
valueIndex: 0,
|
||||
entries: ["1080p", "720p", "480p", "360p"],
|
||||
entryValues: ["1080", "720", "480", "360"],
|
||||
),
|
||||
ListPreference(
|
||||
key: "voices_preference",
|
||||
title: "Préférence des voix",
|
||||
summary: "",
|
||||
valueIndex: 0,
|
||||
entries: ["Préférer VOSTFR", "Préférer VF"],
|
||||
entryValues: ["vostfr", "vf"],
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
List<MVideo> sortVideos(List<MVideo> videos, int sourceId) {
|
||||
String quality = getPreferenceValue(sourceId, "preferred_quality");
|
||||
String voice = getPreferenceValue(sourceId, "voices_preference");
|
||||
|
||||
videos.sort((MVideo a, MVideo b) {
|
||||
int qualityMatchA = 0;
|
||||
if (a.quality.contains(quality) &&
|
||||
a.quality.toLowerCase().contains(voice)) {
|
||||
qualityMatchA = 1;
|
||||
}
|
||||
int qualityMatchB = 0;
|
||||
if (b.quality.contains(quality) &&
|
||||
b.quality.toLowerCase().contains(voice)) {
|
||||
qualityMatchB = 1;
|
||||
}
|
||||
if (qualityMatchA != qualityMatchB) {
|
||||
return qualityMatchB - qualityMatchA;
|
||||
}
|
||||
|
||||
final regex = RegExp(r'(\d+)p');
|
||||
final matchA = regex.firstMatch(a.quality);
|
||||
final matchB = regex.firstMatch(b.quality);
|
||||
final int qualityNumA = int.tryParse(matchA?.group(1) ?? '0') ?? 0;
|
||||
final int qualityNumB = int.tryParse(matchB?.group(1) ?? '0') ?? 0;
|
||||
return qualityNumB - qualityNumA;
|
||||
});
|
||||
return videos;
|
||||
}
|
||||
|
||||
Future<List<MVideo>> sendVidExtractorr(String url, String prefix) async {
|
||||
final res = (await client.get(Uri.parse(url))).body;
|
||||
final document = parseHtml(res);
|
||||
final masterUrl = document.selectFirst("source#video_source")?.attr("src");
|
||||
print(masterUrl);
|
||||
if (masterUrl == null) return [];
|
||||
final masterHeaders = {
|
||||
"Accept": "*/*",
|
||||
"Host": Uri.parse(masterUrl).host,
|
||||
"Origin": "https://${Uri.parse(url).host}",
|
||||
"Referer": "https://${Uri.parse(url).host}/",
|
||||
};
|
||||
List<MVideo> videos = [];
|
||||
if (masterUrl.contains(".m3u8")) {
|
||||
final masterPlaylistRes = (await client.get(Uri.parse(masterUrl))).body;
|
||||
|
||||
for (var it in substringAfter(
|
||||
masterPlaylistRes,
|
||||
"#EXT-X-STREAM-INF:",
|
||||
).split("#EXT-X-STREAM-INF:")) {
|
||||
final quality =
|
||||
"${substringBefore(substringBefore(substringAfter(substringAfter(it, "RESOLUTION="), "x"), ","), "\n")}p";
|
||||
|
||||
String videoUrl = substringBefore(substringAfter(it, "\n"), "\n");
|
||||
|
||||
if (!videoUrl.startsWith("http")) {
|
||||
videoUrl =
|
||||
"${masterUrl.split("/").sublist(0, masterUrl.split("/").length - 1).join("/")}/$videoUrl";
|
||||
}
|
||||
final videoHeaders = {
|
||||
"Accept": "*/*",
|
||||
"Host": Uri.parse(videoUrl).host,
|
||||
"Origin": "https://${Uri.parse(url).host}",
|
||||
"Referer": "https://${Uri.parse(url).host}/",
|
||||
};
|
||||
var video = MVideo();
|
||||
video
|
||||
..url = videoUrl
|
||||
..originalUrl = videoUrl
|
||||
..quality = prefix + "Sendvid:$quality"
|
||||
..headers = videoHeaders;
|
||||
videos.add(video);
|
||||
}
|
||||
} else {
|
||||
var video = MVideo();
|
||||
video
|
||||
..url = masterUrl
|
||||
..originalUrl = masterUrl
|
||||
..quality = prefix + "Sendvid:default"
|
||||
..headers = masterHeaders;
|
||||
videos.add(video);
|
||||
}
|
||||
|
||||
return videos;
|
||||
}
|
||||
|
||||
Future<List<MVideo>> vidcdnExtractor(String url, String prefix) async {
|
||||
final res = await client.get(Uri.parse(url));
|
||||
if (res.statusCode != 200) {
|
||||
print("Erreur lors de la récupération de la page : ${res.statusCode}");
|
||||
return [];
|
||||
}
|
||||
final jsonResponse = jsonDecode(res.body);
|
||||
|
||||
String masterUrl = jsonResponse['sources'][0]['file'] ?? '';
|
||||
final quality = jsonResponse['quality'] ?? '';
|
||||
|
||||
List<MVideo> videos = [];
|
||||
|
||||
final masterPlaylistRes = await client.get(Uri.parse(masterUrl));
|
||||
if (masterPlaylistRes.statusCode != 200) {
|
||||
print(
|
||||
"Error lors de la récupération de la playlist M3U8 : ${masterPlaylistRes.statusCode}",
|
||||
);
|
||||
return [];
|
||||
}
|
||||
|
||||
final masterPlaylistBody = masterPlaylistRes.body;
|
||||
|
||||
final playlistLines = masterPlaylistBody.split("\n");
|
||||
|
||||
for (int i = 0; i < playlistLines.length; i++) {
|
||||
final line = playlistLines[i];
|
||||
if (line.startsWith("#EXT-X-STREAM-INF")) {
|
||||
final resolutionLine = line.split("RESOLUTION=").last;
|
||||
final resolution = resolutionLine.split(",").first;
|
||||
final width = int.parse(resolution.split("x").first);
|
||||
final height = int.parse(resolution.split("x").last);
|
||||
|
||||
String videoQuality;
|
||||
if (height >= 1080) {
|
||||
videoQuality = "1080p";
|
||||
} else if (height >= 720) {
|
||||
videoQuality = "720p";
|
||||
} else if (height >= 480) {
|
||||
videoQuality = "480p";
|
||||
} else if (height >= 360) {
|
||||
videoQuality = "360p";
|
||||
} else {
|
||||
videoQuality = "${height}p";
|
||||
}
|
||||
|
||||
String videoUrl = playlistLines[i + 1].trim();
|
||||
|
||||
if (!videoUrl.startsWith("http")) {
|
||||
videoUrl =
|
||||
"${masterUrl.substring(0, masterUrl.lastIndexOf('/'))}/$videoUrl";
|
||||
}
|
||||
|
||||
var video = MVideo();
|
||||
video
|
||||
..url = masterUrl
|
||||
..originalUrl = masterUrl
|
||||
..quality = "$prefix VidCDN:$videoQuality";
|
||||
videos.add(video);
|
||||
}
|
||||
}
|
||||
return videos;
|
||||
}
|
||||
}
|
||||
|
||||
AniZone main(MSource source) {
|
||||
return AniZone(source: source);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
''';
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
import 'dart:convert';
|
||||
import 'package:bot_toast/bot_toast.dart';
|
||||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
|
@ -9,7 +7,6 @@ import 'package:html/dom.dart' hide Text;
|
|||
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/model/document.dart';
|
||||
import 'package:mangayomi/eval/javascript/http.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
|
|
@ -70,11 +67,8 @@ class MBridge {
|
|||
}
|
||||
|
||||
///Create query by html string
|
||||
static const $Function xpath = $Function(_xpath);
|
||||
|
||||
static $Value? _xpath(_, __, List<$Value?> args) {
|
||||
String html = args[0]!.$reified;
|
||||
String xpath = args[1]!.$reified;
|
||||
static List<String>? xpath(String html, String xpath) {
|
||||
List<String> attrs = [];
|
||||
try {
|
||||
var htmlXPath = HtmlXPath.html(html);
|
||||
|
|
@ -92,9 +86,9 @@ class MBridge {
|
|||
attrs = [attr];
|
||||
}
|
||||
}
|
||||
return $List.wrap(attrs.map((e) => $String(e)).toList());
|
||||
return attrs;
|
||||
} catch (_) {
|
||||
return $List.wrap([]);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -104,11 +98,7 @@ class MBridge {
|
|||
static Status parseStatus(String status, List statusList) {
|
||||
for (var element in statusList) {
|
||||
Map statusMap = {};
|
||||
if (element is $Map<$Value, $Value>) {
|
||||
statusMap = element.$reified;
|
||||
} else {
|
||||
statusMap = element;
|
||||
}
|
||||
statusMap = element;
|
||||
for (var element in statusMap.entries) {
|
||||
if (element.key.toString().toLowerCase().contains(
|
||||
status.toLowerCase().trim().trimLeft().trimRight(),
|
||||
|
|
@ -128,103 +118,25 @@ class MBridge {
|
|||
}
|
||||
|
||||
///Unpack a JS code
|
||||
static const $Function unpackJs = $Function(_unpackJs);
|
||||
|
||||
static $Value? _unpackJs(_, __, List<$Value?> args) {
|
||||
String code = args[0]!.$reified;
|
||||
static String? unpackJs(String code) {
|
||||
try {
|
||||
final jsPacker = JSPacker(code);
|
||||
return $String(jsPacker.unpack() ?? "");
|
||||
return jsPacker.unpack() ?? "";
|
||||
} catch (_) {
|
||||
return $String("");
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
///Unpack a JS code
|
||||
static const $Function unpackJsAndCombine = $Function(_unpackJsAndCombine);
|
||||
|
||||
static $Value? _unpackJsAndCombine(_, __, List<$Value?> args) {
|
||||
String code = args[0]!.$reified;
|
||||
static String? unpackJsAndCombine(String code) {
|
||||
try {
|
||||
return $String(JsUnpacker.unpackAndCombine(code) ?? "");
|
||||
return JsUnpacker.unpackAndCombine(code) ?? "";
|
||||
} catch (_) {
|
||||
return $String("");
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
///Read values in parsed JSON object and return resut to List<String>
|
||||
static final $Function jsonPathToList = $Function(
|
||||
(runtime, thisObj, List<$Value?> args) =>
|
||||
_jsonPathToStringOrList(runtime, thisObj, true, args),
|
||||
);
|
||||
|
||||
static $Value? _jsonPathToStringOrList(
|
||||
Object? runtime, // unused by bridge
|
||||
Object? thisObj, // unused by bridge
|
||||
bool toList, // new flag: list vs. single-string
|
||||
List<$Value?> args, // [ sourceJson, jsonPathExpr ]
|
||||
) {
|
||||
final source = args[0]!.$reified;
|
||||
final expression = args[1]!.$reified;
|
||||
|
||||
dynamic decoded;
|
||||
try {
|
||||
decoded = jsonDecode(source);
|
||||
} catch (_) {
|
||||
return toList ? $List.wrap(<$Value>[]) : $String('');
|
||||
}
|
||||
|
||||
// Normalize a JSON element (either Map or List) into a Map<String, dynamic>
|
||||
Map<String, dynamic> normalize(dynamic elt) {
|
||||
if (elt is Map) {
|
||||
return elt.map((k, v) => MapEntry(k.toString(), v));
|
||||
}
|
||||
return <String, dynamic>{};
|
||||
}
|
||||
|
||||
/// Common JSONPath read logic
|
||||
List<dynamic> extractList(Map<String, dynamic> dataMap) {
|
||||
// readValues returns all matches; .read returns Match objects
|
||||
final matches = JsonPath(expression).read(dataMap);
|
||||
return matches.map((m) => m.value).toList();
|
||||
}
|
||||
|
||||
if (decoded is List) {
|
||||
// Branch: JSON root is a list → always return a List<$String>
|
||||
final out = <$Value>[];
|
||||
for (var elt in decoded) {
|
||||
final map = normalize(elt);
|
||||
final extracted = extractList(map);
|
||||
if (toList) {
|
||||
// join into JSON strings per element
|
||||
out.addAll(extracted.map((e) => $String(jsonEncode(e))));
|
||||
} else if (extracted.isNotEmpty) {
|
||||
// only first match as string
|
||||
out.add($String(extracted.first.toString()));
|
||||
} else {
|
||||
out.add($String(''));
|
||||
}
|
||||
}
|
||||
return $List.wrap(out);
|
||||
} else if (decoded is Map) {
|
||||
// Branch: JSON root is object
|
||||
final map = normalize(decoded);
|
||||
final extracted = extractList(map);
|
||||
if (toList) {
|
||||
return $List.wrap(
|
||||
extracted
|
||||
.map((e) => $String(e == null ? '{}' : jsonEncode(e)))
|
||||
.toList(),
|
||||
);
|
||||
} else {
|
||||
return $String(extracted.isNotEmpty ? extracted.first.toString() : '');
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback: neither List nor Map
|
||||
return toList ? $List.wrap(<$Value>[]) : $String('');
|
||||
}
|
||||
|
||||
///GetMapValue
|
||||
static String getMapValue(String source, String attr, bool encode) {
|
||||
try {
|
||||
|
|
@ -238,12 +150,6 @@ class MBridge {
|
|||
}
|
||||
}
|
||||
|
||||
///Read values in parsed JSON object and return resut to String
|
||||
static final $Function jsonPathToString = $Function(
|
||||
(runtime, thisObj, List<$Value?> args) =>
|
||||
_jsonPathToStringOrList(runtime, thisObj, false, args),
|
||||
);
|
||||
|
||||
//Parse a list of dates to millisecondsSinceEpoch
|
||||
static List parseDates(
|
||||
List value,
|
||||
|
|
@ -252,11 +158,7 @@ class MBridge {
|
|||
) {
|
||||
List<dynamic> val = [];
|
||||
for (var element in value) {
|
||||
if (element is $Value) {
|
||||
val.add(element.$reified.toString());
|
||||
} else {
|
||||
val.add(element);
|
||||
}
|
||||
val.add(element);
|
||||
}
|
||||
bool error = false;
|
||||
List<dynamic> valD = [];
|
||||
|
|
|
|||
|
|
@ -121,10 +121,9 @@ class _MangaHomeScreenState extends ConsumerState<MangaHomeScreen> {
|
|||
AsyncValue<MPages?>? _getManga;
|
||||
int _length = 0;
|
||||
bool _isFiltering = false;
|
||||
|
||||
late final supportsLatest = ref.watch(supportsLatestProvider(source: source));
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final supportsLatest = ref.watch(supportsLatestProvider(source: source));
|
||||
final filterList = getFilterList(source: source);
|
||||
if (_selectedIndex == 2 && (_isSearch && _query.isNotEmpty) ||
|
||||
_isFiltering) {
|
||||
|
|
|
|||
48
pubspec.lock
48
pubspec.lock
|
|
@ -222,14 +222,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.1"
|
||||
change_case:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: change_case
|
||||
sha256: e41ef3df58521194ef8d7649928954805aeb08061917cf658322305e61568003
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.0"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -358,14 +350,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.0+7.3.0"
|
||||
dart_eval:
|
||||
d4rt:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: dart_eval
|
||||
sha256: bbad8246a99a3c61925e19b3d2c2bd6311f8186fb4642a16bf3d22153b3ade55
|
||||
name: d4rt
|
||||
sha256: c59d4546fe58a76250dda4cd7db9ec5bb2eb633f47f5104a1f60de72b111639e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.10"
|
||||
version: "0.0.1"
|
||||
dart_style:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -415,14 +407,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.0.2"
|
||||
directed_graph:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: directed_graph
|
||||
sha256: "6582283519fc08a6a14172d8a3798238f09275a1147e7599baf09c6245e3104a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.5"
|
||||
draggable_menu:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -446,14 +430,6 @@ packages:
|
|||
relative: true
|
||||
source: path
|
||||
version: "4.0.3"
|
||||
exception_templates:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: exception_templates
|
||||
sha256: "517f7c770da690073663f867ee2057ae2f4ffb28edae9da9faa624aa29ac76eb"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.1"
|
||||
expandable_text:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
@ -1076,14 +1052,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.15"
|
||||
lazy_memo:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: lazy_memo
|
||||
sha256: dcb30b4184a6d767e1d779d74ce784d752d38313b8fb4bad6b659ae7af4bb34d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.3"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -1525,14 +1493,6 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.2.2"
|
||||
quote_buffer:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: quote_buffer
|
||||
sha256: c4cd07e55ed1b1645a1cc74278a03b2a642c9f6ea3c0528d51827fdd320acf87
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.6"
|
||||
re_editor:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ dependencies:
|
|||
file_picker: ^10.0.0
|
||||
path_provider: ^2.1.5
|
||||
scrollable_positioned_list: ^0.3.8
|
||||
dart_eval: ^0.7.10
|
||||
json_path: ^0.7.4
|
||||
bot_toast: ^4.1.3
|
||||
flutter_web_auth_2: ^3.1.2
|
||||
|
|
@ -88,6 +87,7 @@ dependencies:
|
|||
marquee: ^2.2.3
|
||||
epubx:
|
||||
path: ./epubx
|
||||
d4rt: ^0.0.1
|
||||
|
||||
dependency_overrides:
|
||||
ffi: ^2.1.3
|
||||
|
|
|
|||
Loading…
Reference in a new issue