feat/source-preference
This commit is contained in:
parent
8aac66ca29
commit
21b6dc437c
22 changed files with 6813 additions and 410 deletions
|
|
@ -16,6 +16,7 @@ import 'package:mangayomi/eval/model/m_source.dart';
|
|||
import 'package:mangayomi/eval/model/m_manga.dart';
|
||||
import 'package:mangayomi/eval/model/m_provider.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/modules/browse/extension/providers/extension_preferences_providers.dart';
|
||||
|
||||
class $MProvider extends MProvider with $Bridge<MProvider> {
|
||||
static $MProvider $construct(
|
||||
|
|
@ -37,45 +38,27 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
BridgeTypeRef(CoreTypes.future, [$MPages.$type])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source',
|
||||
BridgeTypeAnnotation($MSource.$type),
|
||||
false,
|
||||
),
|
||||
BridgeParameter(
|
||||
'page',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)),
|
||||
false,
|
||||
),
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false),
|
||||
BridgeParameter('page',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)), false),
|
||||
])),
|
||||
'getPopular': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.future, [$MPages.$type])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source',
|
||||
BridgeTypeAnnotation($MSource.$type),
|
||||
false,
|
||||
),
|
||||
BridgeParameter(
|
||||
'page',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)),
|
||||
false,
|
||||
),
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false),
|
||||
BridgeParameter('page',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)), false),
|
||||
])),
|
||||
'search': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.future, [$MPages.$type])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source',
|
||||
BridgeTypeAnnotation($MSource.$type),
|
||||
false,
|
||||
),
|
||||
BridgeParameter(
|
||||
'query',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false),
|
||||
BridgeParameter('query',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter(
|
||||
'page',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)),
|
||||
|
|
@ -87,15 +70,9 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
BridgeTypeRef(CoreTypes.future, [$MManga.$type])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source',
|
||||
BridgeTypeAnnotation($MManga.$type),
|
||||
false,
|
||||
),
|
||||
BridgeParameter(
|
||||
'url',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
'source', BridgeTypeAnnotation($MManga.$type), false),
|
||||
BridgeParameter('url',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
])),
|
||||
'getPageList': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.future, [
|
||||
|
|
@ -103,15 +80,9 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source',
|
||||
BridgeTypeAnnotation($MManga.$type),
|
||||
false,
|
||||
),
|
||||
BridgeParameter(
|
||||
'url',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
'source', BridgeTypeAnnotation($MManga.$type), false),
|
||||
BridgeParameter('url',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
])),
|
||||
'getVideoList': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.future, [
|
||||
|
|
@ -119,19 +90,24 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source',
|
||||
BridgeTypeAnnotation($MManga.$type),
|
||||
false,
|
||||
),
|
||||
BridgeParameter(
|
||||
'url',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
false,
|
||||
),
|
||||
'source', BridgeTypeAnnotation($MManga.$type), false),
|
||||
BridgeParameter('url',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
])),
|
||||
'getFilterList': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(
|
||||
CoreTypes.future, [BridgeTypeRef(CoreTypes.dynamic)])))),
|
||||
CoreTypes.list, [BridgeTypeRef(CoreTypes.dynamic)])))),
|
||||
'getSourcePreferences': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(
|
||||
CoreTypes.list, [BridgeTypeRef(CoreTypes.dynamic)])))),
|
||||
'getPreferenceValue': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.dynamic)),
|
||||
params: [
|
||||
BridgeParameter('sourceId',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)), false),
|
||||
BridgeParameter('key',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
])),
|
||||
'cryptoHandler': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
|
|
@ -785,6 +761,16 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
return $Future.wrap(MBridge.http(args[0]!.$reified, args[1]!.$reified)
|
||||
.then((value) => $String(value)));
|
||||
}),
|
||||
'getPreferenceValue' => $Function((_, __, List<$Value?> args) {
|
||||
final value = getPreferenceValue(
|
||||
args[1]!.$reified, args[0]!.$reified);
|
||||
if (value is String) {
|
||||
return $String(value);
|
||||
} else if (value is bool) {
|
||||
return $bool(value);
|
||||
}
|
||||
return $List.wrap(value.map((e) => $String(e)).toList());
|
||||
}),
|
||||
"cryptoHandler" => $Function((_, __, List<$Value?> args) {
|
||||
return $String(MBridge.cryptoHandler(args[0]!.$value, args[1]!.$value,
|
||||
args[2]!.$value, args[3]!.$value));
|
||||
|
|
@ -996,6 +982,15 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
List getSourcePreferences() {
|
||||
final res = $_invoke('getSourcePreferences', []);
|
||||
if (res is $List) {
|
||||
return res.$reified;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<Video>> getVideoList(MSource source, String url) async {
|
||||
final res =
|
||||
|
|
@ -1022,8 +1017,8 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
_toValueList(List filters) {
|
||||
return (filters).map((e) {
|
||||
if (e is SelectFilter) {
|
||||
return $SelectFilter
|
||||
.wrap(SelectFilter(e.type, e.name, e.state, _toValueList(e.values)));
|
||||
return $SelectFilter.wrap(
|
||||
SelectFilter(e.type, e.name, e.state, _toValueList(e.values)));
|
||||
} else if (e is TextFilter) {
|
||||
return $TextFilter.wrap(e);
|
||||
} else if (e is HeaderFilter) {
|
||||
|
|
|
|||
759
lib/eval/bridge/source_preference.dart
Normal file
759
lib/eval/bridge/source_preference.dart
Normal file
|
|
@ -0,0 +1,759 @@
|
|||
import 'package:dart_eval/dart_eval.dart';
|
||||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:mangayomi/eval/model/source_preference.dart';
|
||||
|
||||
class $CheckBoxPreference implements SourcePreference, $Instance {
|
||||
$CheckBoxPreference.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(BridgeTypeSpec(
|
||||
'package:mangayomi/bridge_lib.dart', 'CheckBoxPreference'));
|
||||
|
||||
static const $declaration = BridgeClassDef(BridgeClassType($type),
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type),
|
||||
params: [],
|
||||
namedParams: [
|
||||
BridgeParameter('key',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('title',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('summary',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('value',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.bool)), false),
|
||||
]))
|
||||
},
|
||||
fields: {
|
||||
'key': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'title': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'summary': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'value':
|
||||
BridgeFieldDef(BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.bool))),
|
||||
},
|
||||
wrap: true);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $CheckBoxPreference.wrap(SourcePreference(
|
||||
key: args[0]!.$value,
|
||||
checkBoxPreference: CheckBoxPreference(
|
||||
title: args[1]!.$value,
|
||||
summary: args[2]!.$value,
|
||||
value: args[3]!.$value)));
|
||||
}
|
||||
|
||||
@override
|
||||
final SourcePreference $value;
|
||||
|
||||
@override
|
||||
SourcePreference get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'key':
|
||||
return $String($value.key!);
|
||||
case 'title':
|
||||
return $String($value.checkBoxPreference!.title!);
|
||||
case 'summary':
|
||||
return $String($value.checkBoxPreference!.summary!);
|
||||
case 'value':
|
||||
return $bool($value.checkBoxPreference!.value!);
|
||||
|
||||
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) {
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
CheckBoxPreference? get checkBoxPreference => $value.checkBoxPreference;
|
||||
|
||||
@override
|
||||
EditTextPreference? get editTextPreference => $value.editTextPreference;
|
||||
|
||||
@override
|
||||
ListPreference? get listPreference => $value.listPreference;
|
||||
|
||||
@override
|
||||
MultiSelectListPreference? get multiSelectListPreference =>
|
||||
$value.multiSelectListPreference;
|
||||
|
||||
@override
|
||||
SwitchPreferenceCompat? get switchPreferenceCompat =>
|
||||
$value.switchPreferenceCompat;
|
||||
|
||||
@override
|
||||
Id? get id => $value.id;
|
||||
|
||||
@override
|
||||
String? get key => $value.key;
|
||||
|
||||
@override
|
||||
int? get sourceId => $value.sourceId;
|
||||
|
||||
@override
|
||||
set checkBoxPreference(CheckBoxPreference? checkBoxPreference) {}
|
||||
|
||||
@override
|
||||
set editTextPreference(EditTextPreference? editTextPreference) {}
|
||||
|
||||
@override
|
||||
set id(Id? id) {}
|
||||
|
||||
@override
|
||||
set key(String? key) {}
|
||||
|
||||
@override
|
||||
set listPreference(ListPreference? listPreference) {}
|
||||
|
||||
@override
|
||||
set multiSelectListPreference(
|
||||
MultiSelectListPreference? multiSelectListPreference) {}
|
||||
|
||||
@override
|
||||
set sourceId(int? sourceId) {}
|
||||
|
||||
@override
|
||||
set switchPreferenceCompat(SwitchPreferenceCompat? switchPreferenceCompat) {}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
|
||||
class $SwitchPreferenceCompat implements SourcePreference, $Instance {
|
||||
$SwitchPreferenceCompat.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(BridgeTypeSpec(
|
||||
'package:mangayomi/bridge_lib.dart', 'SwitchPreferenceCompat'));
|
||||
|
||||
static const $declaration = BridgeClassDef(BridgeClassType($type),
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type),
|
||||
params: [],
|
||||
namedParams: [
|
||||
BridgeParameter('key',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('title',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('summary',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('value',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.bool)), false),
|
||||
]))
|
||||
},
|
||||
fields: {
|
||||
'key': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'title': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'summary': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'value':
|
||||
BridgeFieldDef(BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.bool))),
|
||||
},
|
||||
wrap: true);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $SwitchPreferenceCompat.wrap(SourcePreference(
|
||||
key: args[0]!.$value,
|
||||
switchPreferenceCompat: SwitchPreferenceCompat(
|
||||
title: args[1]!.$value,
|
||||
summary: args[2]!.$value,
|
||||
value: args[3]!.$value)));
|
||||
}
|
||||
|
||||
@override
|
||||
final SourcePreference $value;
|
||||
|
||||
@override
|
||||
SourcePreference get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'key':
|
||||
return $String($value.key!);
|
||||
case 'title':
|
||||
return $String($value.checkBoxPreference!.title!);
|
||||
case 'summary':
|
||||
return $String($value.checkBoxPreference!.summary!);
|
||||
case 'value':
|
||||
return $bool($value.checkBoxPreference!.value!);
|
||||
|
||||
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) {
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
CheckBoxPreference? get checkBoxPreference => $value.checkBoxPreference;
|
||||
|
||||
@override
|
||||
EditTextPreference? get editTextPreference => $value.editTextPreference;
|
||||
|
||||
@override
|
||||
ListPreference? get listPreference => $value.listPreference;
|
||||
|
||||
@override
|
||||
MultiSelectListPreference? get multiSelectListPreference =>
|
||||
$value.multiSelectListPreference;
|
||||
|
||||
@override
|
||||
SwitchPreferenceCompat? get switchPreferenceCompat =>
|
||||
$value.switchPreferenceCompat;
|
||||
|
||||
@override
|
||||
Id? get id => $value.id;
|
||||
|
||||
@override
|
||||
String? get key => $value.key;
|
||||
|
||||
@override
|
||||
int? get sourceId => $value.sourceId;
|
||||
|
||||
@override
|
||||
set checkBoxPreference(CheckBoxPreference? checkBoxPreference) {}
|
||||
|
||||
@override
|
||||
set editTextPreference(EditTextPreference? editTextPreference) {}
|
||||
|
||||
@override
|
||||
set id(Id? id) {}
|
||||
|
||||
@override
|
||||
set key(String? key) {}
|
||||
|
||||
@override
|
||||
set listPreference(ListPreference? listPreference) {}
|
||||
|
||||
@override
|
||||
set multiSelectListPreference(
|
||||
MultiSelectListPreference? multiSelectListPreference) {}
|
||||
|
||||
@override
|
||||
set sourceId(int? sourceId) {}
|
||||
|
||||
@override
|
||||
set switchPreferenceCompat(SwitchPreferenceCompat? switchPreferenceCompat) {}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
|
||||
class $ListPreference implements SourcePreference, $Instance {
|
||||
$ListPreference.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'ListPreference'));
|
||||
|
||||
static const $declaration = BridgeClassDef(BridgeClassType($type),
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type),
|
||||
params: [],
|
||||
namedParams: [
|
||||
BridgeParameter('key',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('title',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('summary',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('valueIndex',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)), false),
|
||||
BridgeParameter(
|
||||
'entries',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(
|
||||
CoreTypes.list, [BridgeTypeRef(CoreTypes.string)])),
|
||||
false),
|
||||
BridgeParameter(
|
||||
'entryValues',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(
|
||||
CoreTypes.list, [BridgeTypeRef(CoreTypes.string)])),
|
||||
false),
|
||||
]))
|
||||
},
|
||||
fields: {
|
||||
'key': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'title': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'summary': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'valueIndex':
|
||||
BridgeFieldDef(BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int))),
|
||||
'entries': BridgeFieldDef(BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [BridgeTypeRef(CoreTypes.string)]))),
|
||||
'entryValues': BridgeFieldDef(BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [BridgeTypeRef(CoreTypes.string)]))),
|
||||
},
|
||||
wrap: true);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $ListPreference.wrap(SourcePreference(
|
||||
key: args[0]!.$value,
|
||||
listPreference: ListPreference(
|
||||
title: args[1]!.$value,
|
||||
summary: args[2]!.$value,
|
||||
valueIndex: args[3]!.$value,
|
||||
entries: (args[4]!.$value as List)
|
||||
.map((e) => (e is $Value ? e.$reified : e).toString())
|
||||
.toList(),
|
||||
entryValues: (args[5]!.$value as List)
|
||||
.map((e) => (e is $Value ? e.$reified : e).toString())
|
||||
.toList())));
|
||||
}
|
||||
|
||||
@override
|
||||
final SourcePreference $value;
|
||||
|
||||
@override
|
||||
SourcePreference get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'key':
|
||||
return $String($value.key!);
|
||||
case 'title':
|
||||
return $String($value.listPreference!.title!);
|
||||
case 'summary':
|
||||
return $String($value.listPreference!.summary!);
|
||||
case 'valueIndex':
|
||||
return $int($value.listPreference!.valueIndex!);
|
||||
case 'entries':
|
||||
return $List.wrap($value.listPreference!.entries!);
|
||||
case 'entryValues':
|
||||
return $List.wrap($value.listPreference!.entryValues!);
|
||||
|
||||
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) {
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
CheckBoxPreference? get checkBoxPreference => $value.checkBoxPreference;
|
||||
|
||||
@override
|
||||
EditTextPreference? get editTextPreference => $value.editTextPreference;
|
||||
|
||||
@override
|
||||
ListPreference? get listPreference => $value.listPreference;
|
||||
|
||||
@override
|
||||
MultiSelectListPreference? get multiSelectListPreference =>
|
||||
$value.multiSelectListPreference;
|
||||
|
||||
@override
|
||||
SwitchPreferenceCompat? get switchPreferenceCompat =>
|
||||
$value.switchPreferenceCompat;
|
||||
|
||||
@override
|
||||
Id? get id => $value.id;
|
||||
|
||||
@override
|
||||
String? get key => $value.key;
|
||||
|
||||
@override
|
||||
int? get sourceId => $value.sourceId;
|
||||
|
||||
@override
|
||||
set checkBoxPreference(CheckBoxPreference? checkBoxPreference) {}
|
||||
|
||||
@override
|
||||
set editTextPreference(EditTextPreference? editTextPreference) {}
|
||||
|
||||
@override
|
||||
set id(Id? id) {}
|
||||
|
||||
@override
|
||||
set key(String? key) {}
|
||||
|
||||
@override
|
||||
set listPreference(ListPreference? listPreference) {}
|
||||
|
||||
@override
|
||||
set multiSelectListPreference(
|
||||
MultiSelectListPreference? multiSelectListPreference) {}
|
||||
|
||||
@override
|
||||
set sourceId(int? sourceId) {}
|
||||
|
||||
@override
|
||||
set switchPreferenceCompat(SwitchPreferenceCompat? switchPreferenceCompat) {}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
|
||||
class $MultiSelectListPreference implements SourcePreference, $Instance {
|
||||
$MultiSelectListPreference.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(BridgeTypeSpec(
|
||||
'package:mangayomi/bridge_lib.dart', 'MultiSelectListPreference'));
|
||||
|
||||
static const $declaration = BridgeClassDef(BridgeClassType($type),
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type),
|
||||
params: [],
|
||||
namedParams: [
|
||||
BridgeParameter('key',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('title',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('summary',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter(
|
||||
'entries',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(
|
||||
CoreTypes.list, [BridgeTypeRef(CoreTypes.string)])),
|
||||
false),
|
||||
BridgeParameter(
|
||||
'entryValues',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(
|
||||
CoreTypes.list, [BridgeTypeRef(CoreTypes.string)])),
|
||||
false),
|
||||
BridgeParameter(
|
||||
'values',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(
|
||||
CoreTypes.list, [BridgeTypeRef(CoreTypes.string)])),
|
||||
false),
|
||||
]))
|
||||
},
|
||||
fields: {
|
||||
'key': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'title': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'summary': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'entries': BridgeFieldDef(BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [BridgeTypeRef(CoreTypes.string)]))),
|
||||
'entryValues': BridgeFieldDef(BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [BridgeTypeRef(CoreTypes.string)]))),
|
||||
'values': BridgeFieldDef(BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.list, [BridgeTypeRef(CoreTypes.string)]))),
|
||||
},
|
||||
wrap: true);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $MultiSelectListPreference.wrap(SourcePreference(
|
||||
key: args[0]!.$value,
|
||||
multiSelectListPreference: MultiSelectListPreference(
|
||||
title: args[1]!.$value,
|
||||
summary: args[2]!.$value,
|
||||
entries: (args[3]!.$value as List)
|
||||
.map((e) => (e is $Value ? e.$reified : e).toString())
|
||||
.toList(),
|
||||
entryValues: (args[4]!.$value as List)
|
||||
.map((e) => (e is $Value ? e.$reified : e).toString())
|
||||
.toList(),
|
||||
values: (args[5]!.$value as List)
|
||||
.map((e) => (e is $Value ? e.$reified : e).toString())
|
||||
.toList())));
|
||||
}
|
||||
|
||||
@override
|
||||
final SourcePreference $value;
|
||||
|
||||
@override
|
||||
SourcePreference get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'key':
|
||||
return $String($value.key!);
|
||||
case 'title':
|
||||
return $String($value.multiSelectListPreference!.title!);
|
||||
case 'summary':
|
||||
return $String($value.multiSelectListPreference!.summary!);
|
||||
case 'entries':
|
||||
return $List.wrap($value.multiSelectListPreference!.entries!);
|
||||
case 'entryValues':
|
||||
return $List.wrap($value.multiSelectListPreference!.entryValues!);
|
||||
case 'values':
|
||||
return $List.wrap($value.multiSelectListPreference!.values!);
|
||||
|
||||
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) {
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
CheckBoxPreference? get checkBoxPreference => $value.checkBoxPreference;
|
||||
|
||||
@override
|
||||
EditTextPreference? get editTextPreference => $value.editTextPreference;
|
||||
|
||||
@override
|
||||
ListPreference? get listPreference => $value.listPreference;
|
||||
|
||||
@override
|
||||
MultiSelectListPreference? get multiSelectListPreference =>
|
||||
$value.multiSelectListPreference;
|
||||
|
||||
@override
|
||||
SwitchPreferenceCompat? get switchPreferenceCompat =>
|
||||
$value.switchPreferenceCompat;
|
||||
|
||||
@override
|
||||
Id? get id => $value.id;
|
||||
|
||||
@override
|
||||
String? get key => $value.key;
|
||||
|
||||
@override
|
||||
int? get sourceId => $value.sourceId;
|
||||
|
||||
@override
|
||||
set checkBoxPreference(CheckBoxPreference? checkBoxPreference) {}
|
||||
|
||||
@override
|
||||
set editTextPreference(EditTextPreference? editTextPreference) {}
|
||||
|
||||
@override
|
||||
set id(Id? id) {}
|
||||
|
||||
@override
|
||||
set key(String? key) {}
|
||||
|
||||
@override
|
||||
set listPreference(ListPreference? listPreference) {}
|
||||
|
||||
@override
|
||||
set multiSelectListPreference(
|
||||
MultiSelectListPreference? multiSelectListPreference) {}
|
||||
|
||||
@override
|
||||
set sourceId(int? sourceId) {}
|
||||
|
||||
@override
|
||||
set switchPreferenceCompat(SwitchPreferenceCompat? switchPreferenceCompat) {}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
|
||||
class $EditTextPreference implements SourcePreference, $Instance {
|
||||
$EditTextPreference.wrap(this.$value) : _superclass = $Object($value);
|
||||
|
||||
static const $type = BridgeTypeRef(BridgeTypeSpec(
|
||||
'package:mangayomi/bridge_lib.dart', 'EditTextPreference'));
|
||||
|
||||
static const $declaration = BridgeClassDef(BridgeClassType($type),
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type),
|
||||
params: [],
|
||||
namedParams: [
|
||||
BridgeParameter('key',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('title',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('summary',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('value',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('dialogTitle',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('dialogMessage',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('text',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
]))
|
||||
},
|
||||
fields: {
|
||||
'key': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'title': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'summary': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'value': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'dialogTitle': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'dialogMessage': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
'text': BridgeFieldDef(
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string))),
|
||||
},
|
||||
wrap: true);
|
||||
|
||||
static $Value? $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $EditTextPreference.wrap(SourcePreference(
|
||||
key: args[0]!.$value,
|
||||
editTextPreference: EditTextPreference(
|
||||
title: args[1]!.$value,
|
||||
summary: args[2]!.$value,
|
||||
value: args[3]!.$value,
|
||||
dialogTitle: args[4]!.$value,
|
||||
dialogMessage: args[5]!.$value,
|
||||
text: args[6]!.$value)));
|
||||
}
|
||||
|
||||
@override
|
||||
final SourcePreference $value;
|
||||
|
||||
@override
|
||||
SourcePreference get $reified => $value;
|
||||
|
||||
final $Instance _superclass;
|
||||
|
||||
@override
|
||||
$Value? $getProperty(Runtime runtime, String identifier) {
|
||||
switch (identifier) {
|
||||
case 'key':
|
||||
return $String($value.key!);
|
||||
case 'title':
|
||||
return $String($value.editTextPreference!.title!);
|
||||
case 'summary':
|
||||
return $String($value.editTextPreference!.summary!);
|
||||
case 'value':
|
||||
return $String($value.editTextPreference!.value!);
|
||||
case 'dialogTitle':
|
||||
return $String($value.editTextPreference!.dialogTitle!);
|
||||
case 'dialogMessage':
|
||||
return $String($value.editTextPreference!.dialogMessage!);
|
||||
case 'text':
|
||||
return $String($value.editTextPreference!.text!);
|
||||
|
||||
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) {
|
||||
default:
|
||||
_superclass.$setProperty(runtime, identifier, value);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
CheckBoxPreference? get checkBoxPreference => $value.checkBoxPreference;
|
||||
|
||||
@override
|
||||
EditTextPreference? get editTextPreference => $value.editTextPreference;
|
||||
|
||||
@override
|
||||
ListPreference? get listPreference => $value.listPreference;
|
||||
|
||||
@override
|
||||
MultiSelectListPreference? get multiSelectListPreference =>
|
||||
$value.multiSelectListPreference;
|
||||
|
||||
@override
|
||||
SwitchPreferenceCompat? get switchPreferenceCompat =>
|
||||
$value.switchPreferenceCompat;
|
||||
|
||||
@override
|
||||
Id? get id => $value.id;
|
||||
|
||||
@override
|
||||
String? get key => $value.key;
|
||||
|
||||
@override
|
||||
int? get sourceId => $value.sourceId;
|
||||
|
||||
@override
|
||||
set checkBoxPreference(CheckBoxPreference? checkBoxPreference) {}
|
||||
|
||||
@override
|
||||
set editTextPreference(EditTextPreference? editTextPreference) {}
|
||||
|
||||
@override
|
||||
set id(Id? id) {}
|
||||
|
||||
@override
|
||||
set key(String? key) {}
|
||||
|
||||
@override
|
||||
set listPreference(ListPreference? listPreference) {}
|
||||
|
||||
@override
|
||||
set multiSelectListPreference(
|
||||
MultiSelectListPreference? multiSelectListPreference) {}
|
||||
|
||||
@override
|
||||
set sourceId(int? sourceId) {}
|
||||
|
||||
@override
|
||||
set switchPreferenceCompat(SwitchPreferenceCompat? switchPreferenceCompat) {}
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
throw UnimplementedError();
|
||||
}
|
||||
}
|
||||
|
|
@ -21,4 +21,6 @@ abstract class MProvider {
|
|||
Future<List<Video>> getVideoList(MSource source, String url);
|
||||
|
||||
List<dynamic> getFilterList();
|
||||
|
||||
List<dynamic> getSourcePreferences();
|
||||
}
|
||||
|
|
|
|||
196
lib/eval/model/source_preference.dart
Normal file
196
lib/eval/model/source_preference.dart
Normal file
|
|
@ -0,0 +1,196 @@
|
|||
import 'package:isar/isar.dart';
|
||||
part 'source_preference.g.dart';
|
||||
|
||||
@collection
|
||||
@Name("SourcePreferences")
|
||||
class SourcePreference {
|
||||
Id? id;
|
||||
int? sourceId;
|
||||
String? key;
|
||||
CheckBoxPreference? checkBoxPreference;
|
||||
SwitchPreferenceCompat? switchPreferenceCompat;
|
||||
ListPreference? listPreference;
|
||||
MultiSelectListPreference? multiSelectListPreference;
|
||||
EditTextPreference? editTextPreference;
|
||||
|
||||
SourcePreference(
|
||||
{this.id = Isar.autoIncrement,
|
||||
this.sourceId,
|
||||
this.key,
|
||||
this.checkBoxPreference,
|
||||
this.switchPreferenceCompat,
|
||||
this.listPreference,
|
||||
this.multiSelectListPreference,
|
||||
this.editTextPreference});
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'id': id,
|
||||
'sourceId': sourceId,
|
||||
'key': key,
|
||||
if (checkBoxPreference != null)
|
||||
'checkBoxPreference': checkBoxPreference!.toJson(),
|
||||
if (switchPreferenceCompat != null)
|
||||
'switchPreferenceCompat': switchPreferenceCompat!.toJson(),
|
||||
if (listPreference != null) 'listPreference': listPreference!.toJson(),
|
||||
if (multiSelectListPreference != null)
|
||||
'multiSelectListPreference': multiSelectListPreference!.toJson(),
|
||||
if (editTextPreference != null)
|
||||
'editTextPreference': editTextPreference!.toJson()
|
||||
};
|
||||
|
||||
factory SourcePreference.fromJson(Map<String, dynamic> json) {
|
||||
return SourcePreference(
|
||||
id: json['id'],
|
||||
sourceId: json['sourceId'],
|
||||
key: json['key'],
|
||||
checkBoxPreference: json['checkBoxPreference'] != null
|
||||
? CheckBoxPreference.fromJson(json['checkBoxPreference'])
|
||||
: null,
|
||||
switchPreferenceCompat: json['switchPreferenceCompat'] != null
|
||||
? SwitchPreferenceCompat.fromJson(json['switchPreferenceCompat'])
|
||||
: null,
|
||||
listPreference: json['listPreference'] != null
|
||||
? ListPreference.fromJson(json['listPreference'])
|
||||
: null,
|
||||
multiSelectListPreference: json['multiSelectListPreference'] != null
|
||||
? MultiSelectListPreference.fromJson(
|
||||
json['multiSelectListPreference'])
|
||||
: null,
|
||||
editTextPreference: json['editTextPreference'] != null
|
||||
? EditTextPreference.fromJson(json['editTextPreference'])
|
||||
: null);
|
||||
}
|
||||
}
|
||||
|
||||
@embedded
|
||||
class CheckBoxPreference {
|
||||
String? title;
|
||||
String? summary;
|
||||
bool? value;
|
||||
|
||||
CheckBoxPreference({this.title, this.summary, this.value});
|
||||
|
||||
Map<String, dynamic> toJson() =>
|
||||
{'title': title, 'summary': summary, 'value': value};
|
||||
|
||||
factory CheckBoxPreference.fromJson(Map<String, dynamic> json) {
|
||||
return CheckBoxPreference(
|
||||
title: json['title'], summary: json['summary'], value: json['value']);
|
||||
}
|
||||
}
|
||||
|
||||
@embedded
|
||||
class SwitchPreferenceCompat {
|
||||
String? title;
|
||||
String? summary;
|
||||
bool? value;
|
||||
|
||||
SwitchPreferenceCompat({this.title, this.summary, this.value});
|
||||
|
||||
Map<String, dynamic> toJson() =>
|
||||
{'title': title, 'summary': summary, 'value': value};
|
||||
|
||||
factory SwitchPreferenceCompat.fromJson(Map<String, dynamic> json) {
|
||||
return SwitchPreferenceCompat(
|
||||
title: json['title'], summary: json['summary'], value: json['value']);
|
||||
}
|
||||
}
|
||||
|
||||
@embedded
|
||||
class ListPreference {
|
||||
String? title;
|
||||
String? summary;
|
||||
int? valueIndex;
|
||||
List<String>? entries;
|
||||
List<String>? entryValues;
|
||||
|
||||
ListPreference(
|
||||
{this.title,
|
||||
this.summary,
|
||||
this.valueIndex,
|
||||
this.entries,
|
||||
this.entryValues});
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'title': title,
|
||||
'summary': summary,
|
||||
'valueIndex': valueIndex,
|
||||
'entries': entries,
|
||||
'entryValues': entryValues
|
||||
};
|
||||
|
||||
factory ListPreference.fromJson(Map<String, dynamic> json) {
|
||||
return ListPreference(
|
||||
title: json['title'],
|
||||
summary: json['summary'],
|
||||
valueIndex: json['valueIndex'],
|
||||
entries: json['entries']?.cast<String>(),
|
||||
entryValues: json['entryValues']?.cast<String>());
|
||||
}
|
||||
}
|
||||
|
||||
@embedded
|
||||
class MultiSelectListPreference {
|
||||
String? title;
|
||||
String? summary;
|
||||
List<String>? entries;
|
||||
List<String>? entryValues;
|
||||
List<String>? values;
|
||||
|
||||
MultiSelectListPreference(
|
||||
{this.title, this.summary, this.entries, this.entryValues, this.values});
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'title': title,
|
||||
'summary': summary,
|
||||
'entries': entries?.cast<String>(),
|
||||
'entryValues': entryValues?.cast<String>(),
|
||||
'values': values?.cast<String>()
|
||||
};
|
||||
|
||||
factory MultiSelectListPreference.fromJson(Map<String, dynamic> json) {
|
||||
return MultiSelectListPreference(
|
||||
title: json['title'],
|
||||
summary: json['summary'],
|
||||
entries: json['entries'],
|
||||
entryValues: json['entryValues'],
|
||||
values: json['values']);
|
||||
}
|
||||
}
|
||||
|
||||
@embedded
|
||||
class EditTextPreference {
|
||||
String? title;
|
||||
String? summary;
|
||||
String? value;
|
||||
String? dialogTitle;
|
||||
String? dialogMessage;
|
||||
String? text;
|
||||
|
||||
EditTextPreference(
|
||||
{this.title,
|
||||
this.summary,
|
||||
this.value,
|
||||
this.dialogTitle,
|
||||
this.dialogMessage,
|
||||
this.text});
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
'title': title,
|
||||
'summary': summary,
|
||||
'value': value,
|
||||
'dialogTitle': dialogTitle,
|
||||
'dialogMessage': dialogMessage,
|
||||
'text': text
|
||||
};
|
||||
|
||||
factory EditTextPreference.fromJson(Map<String, dynamic> json) {
|
||||
return EditTextPreference(
|
||||
title: json['title'],
|
||||
summary: json['summary'],
|
||||
value: json['value'],
|
||||
dialogTitle: json['dialogTitle'],
|
||||
dialogMessage: json['dialogMessage'],
|
||||
text: json['text']);
|
||||
}
|
||||
}
|
||||
5095
lib/eval/model/source_preference.g.dart
Normal file
5095
lib/eval/model/source_preference.g.dart
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -9,6 +9,7 @@ import 'package:mangayomi/eval/bridge/m_manga.dart';
|
|||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_track.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_video.dart';
|
||||
import 'package:mangayomi/eval/bridge/source_preference.dart';
|
||||
|
||||
class MEvalPlugin extends EvalPlugin {
|
||||
@override
|
||||
|
|
@ -36,6 +37,13 @@ class MEvalPlugin extends EvalPlugin {
|
|||
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);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -80,5 +88,16 @@ class MEvalPlugin extends EvalPlugin {
|
|||
'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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -535,7 +535,7 @@ class ChapterPageurls {
|
|||
ChapterPageurls({this.chapterId, this.urls});
|
||||
ChapterPageurls.fromJson(Map<String, dynamic> json) {
|
||||
chapterId = json['chapterId'];
|
||||
urls = json['urls'].cast<String>();
|
||||
urls = json['urls']?.cast<String>();
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
|
|
@ -638,7 +638,7 @@ class FilterScanlator {
|
|||
FilterScanlator({this.mangaId, this.scanlators});
|
||||
FilterScanlator.fromJson(Map<String, dynamic> json) {
|
||||
mangaId = json['mangaId'];
|
||||
scanlators = json['scanlators'].cast<String>();
|
||||
scanlators = json['scanlators']?.cast<String>();
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
|
|
|
|||
|
|
@ -17,113 +17,118 @@ const SourceSchema = CollectionSchema(
|
|||
name: r'Sources',
|
||||
id: 897746782445124704,
|
||||
properties: {
|
||||
r'apiUrl': PropertySchema(
|
||||
r'additionalParams': PropertySchema(
|
||||
id: 0,
|
||||
name: r'additionalParams',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'apiUrl': PropertySchema(
|
||||
id: 1,
|
||||
name: r'apiUrl',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'appMinVerReq': PropertySchema(
|
||||
id: 1,
|
||||
id: 2,
|
||||
name: r'appMinVerReq',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'baseUrl': PropertySchema(
|
||||
id: 2,
|
||||
id: 3,
|
||||
name: r'baseUrl',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'dateFormat': PropertySchema(
|
||||
id: 3,
|
||||
id: 4,
|
||||
name: r'dateFormat',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'dateFormatLocale': PropertySchema(
|
||||
id: 4,
|
||||
id: 5,
|
||||
name: r'dateFormatLocale',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'hasCloudflare': PropertySchema(
|
||||
id: 5,
|
||||
id: 6,
|
||||
name: r'hasCloudflare',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'headers': PropertySchema(
|
||||
id: 6,
|
||||
id: 7,
|
||||
name: r'headers',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'iconUrl': PropertySchema(
|
||||
id: 7,
|
||||
id: 8,
|
||||
name: r'iconUrl',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'isActive': PropertySchema(
|
||||
id: 8,
|
||||
id: 9,
|
||||
name: r'isActive',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'isAdded': PropertySchema(
|
||||
id: 9,
|
||||
id: 10,
|
||||
name: r'isAdded',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'isFullData': PropertySchema(
|
||||
id: 10,
|
||||
id: 11,
|
||||
name: r'isFullData',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'isManga': PropertySchema(
|
||||
id: 11,
|
||||
id: 12,
|
||||
name: r'isManga',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'isNsfw': PropertySchema(
|
||||
id: 12,
|
||||
id: 13,
|
||||
name: r'isNsfw',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'isPinned': PropertySchema(
|
||||
id: 13,
|
||||
id: 14,
|
||||
name: r'isPinned',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'lang': PropertySchema(
|
||||
id: 14,
|
||||
id: 15,
|
||||
name: r'lang',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'lastUsed': PropertySchema(
|
||||
id: 15,
|
||||
id: 16,
|
||||
name: r'lastUsed',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'name': PropertySchema(
|
||||
id: 16,
|
||||
id: 17,
|
||||
name: r'name',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'sourceCode': PropertySchema(
|
||||
id: 17,
|
||||
id: 18,
|
||||
name: r'sourceCode',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'sourceCodeUrl': PropertySchema(
|
||||
id: 18,
|
||||
id: 19,
|
||||
name: r'sourceCodeUrl',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'typeSource': PropertySchema(
|
||||
id: 19,
|
||||
id: 20,
|
||||
name: r'typeSource',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'version': PropertySchema(
|
||||
id: 20,
|
||||
id: 21,
|
||||
name: r'version',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'versionLast': PropertySchema(
|
||||
id: 21,
|
||||
id: 22,
|
||||
name: r'versionLast',
|
||||
type: IsarType.string,
|
||||
)
|
||||
|
|
@ -148,6 +153,12 @@ int _sourceEstimateSize(
|
|||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
var bytesCount = offsets.last;
|
||||
{
|
||||
final value = object.additionalParams;
|
||||
if (value != null) {
|
||||
bytesCount += 3 + value.length * 3;
|
||||
}
|
||||
}
|
||||
{
|
||||
final value = object.apiUrl;
|
||||
if (value != null) {
|
||||
|
|
@ -241,28 +252,29 @@ void _sourceSerialize(
|
|||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
writer.writeString(offsets[0], object.apiUrl);
|
||||
writer.writeString(offsets[1], object.appMinVerReq);
|
||||
writer.writeString(offsets[2], object.baseUrl);
|
||||
writer.writeString(offsets[3], object.dateFormat);
|
||||
writer.writeString(offsets[4], object.dateFormatLocale);
|
||||
writer.writeBool(offsets[5], object.hasCloudflare);
|
||||
writer.writeString(offsets[6], object.headers);
|
||||
writer.writeString(offsets[7], object.iconUrl);
|
||||
writer.writeBool(offsets[8], object.isActive);
|
||||
writer.writeBool(offsets[9], object.isAdded);
|
||||
writer.writeBool(offsets[10], object.isFullData);
|
||||
writer.writeBool(offsets[11], object.isManga);
|
||||
writer.writeBool(offsets[12], object.isNsfw);
|
||||
writer.writeBool(offsets[13], object.isPinned);
|
||||
writer.writeString(offsets[14], object.lang);
|
||||
writer.writeBool(offsets[15], object.lastUsed);
|
||||
writer.writeString(offsets[16], object.name);
|
||||
writer.writeString(offsets[17], object.sourceCode);
|
||||
writer.writeString(offsets[18], object.sourceCodeUrl);
|
||||
writer.writeString(offsets[19], object.typeSource);
|
||||
writer.writeString(offsets[20], object.version);
|
||||
writer.writeString(offsets[21], object.versionLast);
|
||||
writer.writeString(offsets[0], object.additionalParams);
|
||||
writer.writeString(offsets[1], object.apiUrl);
|
||||
writer.writeString(offsets[2], object.appMinVerReq);
|
||||
writer.writeString(offsets[3], object.baseUrl);
|
||||
writer.writeString(offsets[4], object.dateFormat);
|
||||
writer.writeString(offsets[5], object.dateFormatLocale);
|
||||
writer.writeBool(offsets[6], object.hasCloudflare);
|
||||
writer.writeString(offsets[7], object.headers);
|
||||
writer.writeString(offsets[8], object.iconUrl);
|
||||
writer.writeBool(offsets[9], object.isActive);
|
||||
writer.writeBool(offsets[10], object.isAdded);
|
||||
writer.writeBool(offsets[11], object.isFullData);
|
||||
writer.writeBool(offsets[12], object.isManga);
|
||||
writer.writeBool(offsets[13], object.isNsfw);
|
||||
writer.writeBool(offsets[14], object.isPinned);
|
||||
writer.writeString(offsets[15], object.lang);
|
||||
writer.writeBool(offsets[16], object.lastUsed);
|
||||
writer.writeString(offsets[17], object.name);
|
||||
writer.writeString(offsets[18], object.sourceCode);
|
||||
writer.writeString(offsets[19], object.sourceCodeUrl);
|
||||
writer.writeString(offsets[20], object.typeSource);
|
||||
writer.writeString(offsets[21], object.version);
|
||||
writer.writeString(offsets[22], object.versionLast);
|
||||
}
|
||||
|
||||
Source _sourceDeserialize(
|
||||
|
|
@ -272,29 +284,30 @@ Source _sourceDeserialize(
|
|||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
final object = Source(
|
||||
apiUrl: reader.readStringOrNull(offsets[0]),
|
||||
appMinVerReq: reader.readStringOrNull(offsets[1]),
|
||||
baseUrl: reader.readStringOrNull(offsets[2]),
|
||||
dateFormat: reader.readStringOrNull(offsets[3]),
|
||||
dateFormatLocale: reader.readStringOrNull(offsets[4]),
|
||||
hasCloudflare: reader.readBoolOrNull(offsets[5]),
|
||||
headers: reader.readStringOrNull(offsets[6]),
|
||||
iconUrl: reader.readStringOrNull(offsets[7]),
|
||||
additionalParams: reader.readStringOrNull(offsets[0]),
|
||||
apiUrl: reader.readStringOrNull(offsets[1]),
|
||||
appMinVerReq: reader.readStringOrNull(offsets[2]),
|
||||
baseUrl: reader.readStringOrNull(offsets[3]),
|
||||
dateFormat: reader.readStringOrNull(offsets[4]),
|
||||
dateFormatLocale: reader.readStringOrNull(offsets[5]),
|
||||
hasCloudflare: reader.readBoolOrNull(offsets[6]),
|
||||
headers: reader.readStringOrNull(offsets[7]),
|
||||
iconUrl: reader.readStringOrNull(offsets[8]),
|
||||
id: id,
|
||||
isActive: reader.readBoolOrNull(offsets[8]),
|
||||
isAdded: reader.readBoolOrNull(offsets[9]),
|
||||
isFullData: reader.readBoolOrNull(offsets[10]),
|
||||
isManga: reader.readBoolOrNull(offsets[11]),
|
||||
isNsfw: reader.readBoolOrNull(offsets[12]),
|
||||
isPinned: reader.readBoolOrNull(offsets[13]),
|
||||
lang: reader.readStringOrNull(offsets[14]),
|
||||
lastUsed: reader.readBoolOrNull(offsets[15]),
|
||||
name: reader.readStringOrNull(offsets[16]),
|
||||
sourceCode: reader.readStringOrNull(offsets[17]),
|
||||
sourceCodeUrl: reader.readStringOrNull(offsets[18]),
|
||||
typeSource: reader.readStringOrNull(offsets[19]),
|
||||
version: reader.readStringOrNull(offsets[20]),
|
||||
versionLast: reader.readStringOrNull(offsets[21]),
|
||||
isActive: reader.readBoolOrNull(offsets[9]),
|
||||
isAdded: reader.readBoolOrNull(offsets[10]),
|
||||
isFullData: reader.readBoolOrNull(offsets[11]),
|
||||
isManga: reader.readBoolOrNull(offsets[12]),
|
||||
isNsfw: reader.readBoolOrNull(offsets[13]),
|
||||
isPinned: reader.readBoolOrNull(offsets[14]),
|
||||
lang: reader.readStringOrNull(offsets[15]),
|
||||
lastUsed: reader.readBoolOrNull(offsets[16]),
|
||||
name: reader.readStringOrNull(offsets[17]),
|
||||
sourceCode: reader.readStringOrNull(offsets[18]),
|
||||
sourceCodeUrl: reader.readStringOrNull(offsets[19]),
|
||||
typeSource: reader.readStringOrNull(offsets[20]),
|
||||
version: reader.readStringOrNull(offsets[21]),
|
||||
versionLast: reader.readStringOrNull(offsets[22]),
|
||||
);
|
||||
return object;
|
||||
}
|
||||
|
|
@ -317,13 +330,13 @@ P _sourceDeserializeProp<P>(
|
|||
case 4:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 5:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 6:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 6:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 7:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 8:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 9:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 10:
|
||||
|
|
@ -335,11 +348,11 @@ P _sourceDeserializeProp<P>(
|
|||
case 13:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 14:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 15:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 16:
|
||||
case 15:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 16:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 17:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 18:
|
||||
|
|
@ -350,6 +363,8 @@ P _sourceDeserializeProp<P>(
|
|||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 21:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 22:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
default:
|
||||
throw IsarError('Unknown property with id $propertyId');
|
||||
}
|
||||
|
|
@ -443,6 +458,157 @@ extension SourceQueryWhere on QueryBuilder<Source, Source, QWhereClause> {
|
|||
}
|
||||
|
||||
extension SourceQueryFilter on QueryBuilder<Source, Source, QFilterCondition> {
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition> additionalParamsIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
property: r'additionalParams',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition>
|
||||
additionalParamsIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||
property: r'additionalParams',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition> additionalParamsEqualTo(
|
||||
String? value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'additionalParams',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition>
|
||||
additionalParamsGreaterThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'additionalParams',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition> additionalParamsLessThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'additionalParams',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition> additionalParamsBetween(
|
||||
String? lower,
|
||||
String? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.between(
|
||||
property: r'additionalParams',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition>
|
||||
additionalParamsStartsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.startsWith(
|
||||
property: r'additionalParams',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition> additionalParamsEndsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.endsWith(
|
||||
property: r'additionalParams',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition> additionalParamsContains(
|
||||
String value,
|
||||
{bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.contains(
|
||||
property: r'additionalParams',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition> additionalParamsMatches(
|
||||
String pattern,
|
||||
{bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.matches(
|
||||
property: r'additionalParams',
|
||||
wildcard: pattern,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition>
|
||||
additionalParamsIsEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'additionalParams',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition>
|
||||
additionalParamsIsNotEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
property: r'additionalParams',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterFilterCondition> apiUrlIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
|
|
@ -2773,6 +2939,18 @@ extension SourceQueryObject on QueryBuilder<Source, Source, QFilterCondition> {}
|
|||
extension SourceQueryLinks on QueryBuilder<Source, Source, QFilterCondition> {}
|
||||
|
||||
extension SourceQuerySortBy on QueryBuilder<Source, Source, QSortBy> {
|
||||
QueryBuilder<Source, Source, QAfterSortBy> sortByAdditionalParams() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'additionalParams', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterSortBy> sortByAdditionalParamsDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'additionalParams', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterSortBy> sortByApiUrl() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'apiUrl', Sort.asc);
|
||||
|
|
@ -3039,6 +3217,18 @@ extension SourceQuerySortBy on QueryBuilder<Source, Source, QSortBy> {
|
|||
}
|
||||
|
||||
extension SourceQuerySortThenBy on QueryBuilder<Source, Source, QSortThenBy> {
|
||||
QueryBuilder<Source, Source, QAfterSortBy> thenByAdditionalParams() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'additionalParams', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterSortBy> thenByAdditionalParamsDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'additionalParams', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QAfterSortBy> thenByApiUrl() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'apiUrl', Sort.asc);
|
||||
|
|
@ -3317,6 +3507,14 @@ extension SourceQuerySortThenBy on QueryBuilder<Source, Source, QSortThenBy> {
|
|||
}
|
||||
|
||||
extension SourceQueryWhereDistinct on QueryBuilder<Source, Source, QDistinct> {
|
||||
QueryBuilder<Source, Source, QDistinct> distinctByAdditionalParams(
|
||||
{bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'additionalParams',
|
||||
caseSensitive: caseSensitive);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, Source, QDistinct> distinctByApiUrl(
|
||||
{bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
|
|
@ -3473,6 +3671,12 @@ extension SourceQueryProperty on QueryBuilder<Source, Source, QQueryProperty> {
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, String?, QQueryOperations> additionalParamsProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'additionalParams');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Source, String?, QQueryOperations> apiUrlProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'apiUrl');
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:mangayomi/eval/model/source_preference.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
import 'package:mangayomi/modules/browse/extension/providers/extension_preferences_providers.dart';
|
||||
import 'package:mangayomi/modules/browse/extension/widgets/source_preference_widget.dart';
|
||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
import 'package:mangayomi/services/get_source_preference.dart';
|
||||
import 'package:mangayomi/utils/colors.dart';
|
||||
import 'package:mangayomi/utils/language.dart';
|
||||
import 'package:mangayomi/utils/media_query.dart';
|
||||
|
|
@ -19,6 +22,11 @@ class ExtensionDetail extends ConsumerStatefulWidget {
|
|||
|
||||
class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
|
||||
late Source source = widget.source;
|
||||
late List<SourcePreference> sourcePreference =
|
||||
getSourcePreference(source: source)
|
||||
.map((e) => getSourcePreferenceEntry(e.key!, source.id!))
|
||||
.toList();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = l10nLocalizations(context)!;
|
||||
|
|
@ -178,85 +186,8 @@ class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
|
|||
)),
|
||||
),
|
||||
),
|
||||
ref.watch(getMirrorPrefProvider(widget.source.sourceCode!)).when(
|
||||
data: (data) => data != null
|
||||
? ListTile(
|
||||
onTap: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
title: Text(
|
||||
l10n.preferred_domain,
|
||||
),
|
||||
content: SizedBox(
|
||||
width: mediaWidth(context, 0.8),
|
||||
child: ListView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: data.entries.length,
|
||||
itemBuilder: (context, index) {
|
||||
return RadioListTile(
|
||||
dense: true,
|
||||
contentPadding:
|
||||
const EdgeInsets.all(0),
|
||||
value: data.entries
|
||||
.toList()[index]
|
||||
.value,
|
||||
groupValue: widget.source.baseUrl!,
|
||||
onChanged: (value) {
|
||||
isar.writeTxnSync(() => isar
|
||||
.sources
|
||||
.putSync(widget.source
|
||||
..baseUrl = data.entries
|
||||
.toList()[index]
|
||||
.value));
|
||||
setState(() {
|
||||
source = isar.sources
|
||||
.getSync(source.id!)!;
|
||||
});
|
||||
|
||||
Navigator.pop(context);
|
||||
},
|
||||
title: Row(
|
||||
children: [
|
||||
Text(data.entries
|
||||
.toList()[index]
|
||||
.key)
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
)),
|
||||
actions: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Text(
|
||||
l10n.cancel,
|
||||
style: TextStyle(
|
||||
color: primaryColor(context)),
|
||||
)),
|
||||
],
|
||||
)
|
||||
],
|
||||
);
|
||||
});
|
||||
},
|
||||
title: Text(l10n.preferred_domain),
|
||||
subtitle: Text(
|
||||
widget.source.baseUrl!,
|
||||
style: TextStyle(
|
||||
fontSize: 11, color: secondaryColor(context)),
|
||||
),
|
||||
)
|
||||
: Container(),
|
||||
error: (error, stackTrace) => Text(error.toString()),
|
||||
loading: () => Container(),
|
||||
)
|
||||
SourcePreferenceWidget(
|
||||
sourcePreference: sourcePreference, source: source)
|
||||
],
|
||||
),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import 'package:mangayomi/models/source.dart';
|
|||
import 'package:mangayomi/modules/browse/extension/providers/fetch_anime_sources.dart';
|
||||
import 'package:mangayomi/modules/browse/extension/providers/fetch_manga_sources.dart';
|
||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
import 'package:mangayomi/sources/source_test.dart';
|
||||
import 'package:mangayomi/utils/language.dart';
|
||||
import 'package:mangayomi/modules/browse/extension/widgets/extension_list_tile_widget.dart';
|
||||
import 'package:mangayomi/modules/more/settings/browse/providers/browse_state_provider.dart';
|
||||
|
|
@ -78,6 +79,10 @@ class ExtensionScreen extends ConsumerWidget {
|
|||
return SingleChildScrollView(
|
||||
child: Column(
|
||||
children: [
|
||||
if (useTestSourceCode)
|
||||
ExtensionListTileWidget(
|
||||
source: testSourceModel,
|
||||
isTestSource: useTestSourceCode),
|
||||
GroupedListView<Source, String>(
|
||||
elements: entries,
|
||||
groupBy: (element) => "",
|
||||
|
|
|
|||
|
|
@ -1,26 +1,54 @@
|
|||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/eval/runtime/runtime.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'extension_preferences_providers.g.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:mangayomi/eval/model/source_preference.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
import 'package:mangayomi/services/get_source_preference.dart';
|
||||
import 'package:mangayomi/sources/source_test.dart';
|
||||
|
||||
@riverpod
|
||||
Future<Map<String, String>?> getMirrorPref(
|
||||
GetMirrorPrefRef ref, String codeSource) async {
|
||||
try {
|
||||
final bytecode = compilerEval(codeSource);
|
||||
final runtime = runtimeEval(bytecode);
|
||||
var res = await runtime.executeLib(
|
||||
'package:mangayomi/main.dart',
|
||||
'getMirrorPref',
|
||||
);
|
||||
Map<String, String> headers = {};
|
||||
if (res is $Map) {
|
||||
headers = res.$reified
|
||||
.map((key, value) => MapEntry(key.toString(), value.toString()));
|
||||
void setPreferenceSetting(SourcePreference sourcePreference, Source source) {
|
||||
final sourcePref = isar.sourcePreferences
|
||||
.filter()
|
||||
.sourceIdEqualTo(source.id)
|
||||
.keyEqualTo(sourcePreference.key)
|
||||
.findFirstSync();
|
||||
isar.writeTxnSync(() {
|
||||
if (sourcePref != null) {
|
||||
isar.sourcePreferences.putSync(sourcePreference);
|
||||
} else {
|
||||
isar.sourcePreferences.putSync(sourcePreference..sourceId = source.id);
|
||||
}
|
||||
return headers;
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
getPreferenceValue(String key, int sourceId) {
|
||||
final sourcePreference = getSourcePreferenceEntry(key, sourceId);
|
||||
|
||||
if (sourcePreference.listPreference != null) {
|
||||
final pref = sourcePreference.listPreference!;
|
||||
return pref.entryValues![pref.valueIndex!];
|
||||
} else if (sourcePreference.checkBoxPreference != null) {
|
||||
return sourcePreference.checkBoxPreference!.value;
|
||||
} else if (sourcePreference.switchPreferenceCompat != null) {
|
||||
return sourcePreference.switchPreferenceCompat!.value;
|
||||
} else if (sourcePreference.editTextPreference != null) {
|
||||
return sourcePreference.editTextPreference!.value;
|
||||
}
|
||||
return sourcePreference.multiSelectListPreference!.values;
|
||||
}
|
||||
|
||||
SourcePreference getSourcePreferenceEntry(String key, int sourceId) {
|
||||
SourcePreference? sourcePreference = isar.sourcePreferences
|
||||
.filter()
|
||||
.sourceIdEqualTo(sourceId)
|
||||
.keyEqualTo(key)
|
||||
.findFirstSync();
|
||||
final source =
|
||||
useTestSourceCode ? testSourceModel : isar.sources.getSync(sourceId)!;
|
||||
if (sourcePreference == null) {
|
||||
sourcePreference = getSourcePreference(source: source)
|
||||
.firstWhere((element) => element.key == key, orElse: () => throw ());
|
||||
setPreferenceSetting(sourcePreference, source);
|
||||
}
|
||||
|
||||
return sourcePreference;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,160 +0,0 @@
|
|||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'extension_preferences_providers.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$getMirrorPrefHash() => r'9b39c2c0e06ce4efda23dfd078d4ff96c1441f53';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
_SystemHash._();
|
||||
|
||||
static int combine(int hash, int value) {
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + value);
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
|
||||
return hash ^ (hash >> 6);
|
||||
}
|
||||
|
||||
static int finish(int hash) {
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
|
||||
// ignore: parameter_assignments
|
||||
hash = hash ^ (hash >> 11);
|
||||
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
|
||||
}
|
||||
}
|
||||
|
||||
/// See also [getMirrorPref].
|
||||
@ProviderFor(getMirrorPref)
|
||||
const getMirrorPrefProvider = GetMirrorPrefFamily();
|
||||
|
||||
/// See also [getMirrorPref].
|
||||
class GetMirrorPrefFamily extends Family<AsyncValue<Map<String, String>?>> {
|
||||
/// See also [getMirrorPref].
|
||||
const GetMirrorPrefFamily();
|
||||
|
||||
/// See also [getMirrorPref].
|
||||
GetMirrorPrefProvider call(
|
||||
String codeSource,
|
||||
) {
|
||||
return GetMirrorPrefProvider(
|
||||
codeSource,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
GetMirrorPrefProvider getProviderOverride(
|
||||
covariant GetMirrorPrefProvider provider,
|
||||
) {
|
||||
return call(
|
||||
provider.codeSource,
|
||||
);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
||||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'getMirrorPrefProvider';
|
||||
}
|
||||
|
||||
/// See also [getMirrorPref].
|
||||
class GetMirrorPrefProvider
|
||||
extends AutoDisposeFutureProvider<Map<String, String>?> {
|
||||
/// See also [getMirrorPref].
|
||||
GetMirrorPrefProvider(
|
||||
String codeSource,
|
||||
) : this._internal(
|
||||
(ref) => getMirrorPref(
|
||||
ref as GetMirrorPrefRef,
|
||||
codeSource,
|
||||
),
|
||||
from: getMirrorPrefProvider,
|
||||
name: r'getMirrorPrefProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$getMirrorPrefHash,
|
||||
dependencies: GetMirrorPrefFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
GetMirrorPrefFamily._allTransitiveDependencies,
|
||||
codeSource: codeSource,
|
||||
);
|
||||
|
||||
GetMirrorPrefProvider._internal(
|
||||
super._createNotifier, {
|
||||
required super.name,
|
||||
required super.dependencies,
|
||||
required super.allTransitiveDependencies,
|
||||
required super.debugGetCreateSourceHash,
|
||||
required super.from,
|
||||
required this.codeSource,
|
||||
}) : super.internal();
|
||||
|
||||
final String codeSource;
|
||||
|
||||
@override
|
||||
Override overrideWith(
|
||||
FutureOr<Map<String, String>?> Function(GetMirrorPrefRef provider) create,
|
||||
) {
|
||||
return ProviderOverride(
|
||||
origin: this,
|
||||
override: GetMirrorPrefProvider._internal(
|
||||
(ref) => create(ref as GetMirrorPrefRef),
|
||||
from: from,
|
||||
name: null,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
debugGetCreateSourceHash: null,
|
||||
codeSource: codeSource,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AutoDisposeFutureProviderElement<Map<String, String>?> createElement() {
|
||||
return _GetMirrorPrefProviderElement(this);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is GetMirrorPrefProvider && other.codeSource == codeSource;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||
hash = _SystemHash.combine(hash, codeSource.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
}
|
||||
|
||||
mixin GetMirrorPrefRef on AutoDisposeFutureProviderRef<Map<String, String>?> {
|
||||
/// The parameter `codeSource` of this provider.
|
||||
String get codeSource;
|
||||
}
|
||||
|
||||
class _GetMirrorPrefProviderElement
|
||||
extends AutoDisposeFutureProviderElement<Map<String, String>?>
|
||||
with GetMirrorPrefRef {
|
||||
_GetMirrorPrefProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
String get codeSource => (origin as GetMirrorPrefProvider).codeSource;
|
||||
}
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member
|
||||
|
|
@ -11,8 +11,12 @@ import 'package:mangayomi/utils/language.dart';
|
|||
class ExtensionListTileWidget extends ConsumerStatefulWidget {
|
||||
final Source source;
|
||||
final bool installed;
|
||||
final bool isTestSource;
|
||||
const ExtensionListTileWidget(
|
||||
{super.key, required this.source, this.installed = false});
|
||||
{super.key,
|
||||
required this.source,
|
||||
this.installed = false,
|
||||
this.isTestSource = false});
|
||||
|
||||
@override
|
||||
ConsumerState<ExtensionListTileWidget> createState() =>
|
||||
|
|
@ -27,8 +31,10 @@ class _ExtensionListTileWidgetState
|
|||
BuildContext context,
|
||||
) {
|
||||
final l10n = l10nLocalizations(context)!;
|
||||
final updateAivalable =
|
||||
compareVersions(widget.source.version!, widget.source.versionLast!) < 0;
|
||||
final updateAivalable = widget.isTestSource
|
||||
? false
|
||||
: compareVersions(widget.source.version!, widget.source.versionLast!) <
|
||||
0;
|
||||
final sourceNotEmpty = widget.source.sourceCode != null &&
|
||||
widget.source.sourceCode!.isNotEmpty;
|
||||
|
||||
|
|
@ -82,16 +88,13 @@ class _ExtensionListTileWidgetState
|
|||
subtitle: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
Text(
|
||||
completeLanguageName(widget.source.lang!.toLowerCase()),
|
||||
style: const TextStyle(fontWeight: FontWeight.w300, fontSize: 12),
|
||||
),
|
||||
Text(completeLanguageName(widget.source.lang!.toLowerCase()),
|
||||
style:
|
||||
const TextStyle(fontWeight: FontWeight.w300, fontSize: 12)),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
const SizedBox(
|
||||
width: 4,
|
||||
),
|
||||
const SizedBox(width: 4),
|
||||
Text(widget.source.version!,
|
||||
style: const TextStyle(
|
||||
fontWeight: FontWeight.w300, fontSize: 10)),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,294 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:mangayomi/eval/model/source_preference.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
import 'package:mangayomi/modules/browse/extension/providers/extension_preferences_providers.dart';
|
||||
import 'package:mangayomi/modules/manga/detail/widgets/chapter_filter_list_tile_widget.dart';
|
||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
import 'package:mangayomi/utils/colors.dart';
|
||||
import 'package:mangayomi/utils/media_query.dart';
|
||||
|
||||
class SourcePreferenceWidget extends StatefulWidget {
|
||||
final List<SourcePreference> sourcePreference;
|
||||
final Source source;
|
||||
const SourcePreferenceWidget(
|
||||
{super.key, required this.sourcePreference, required this.source});
|
||||
|
||||
@override
|
||||
State<SourcePreferenceWidget> createState() => _SourcePreferenceWidgetState();
|
||||
}
|
||||
|
||||
class _SourcePreferenceWidgetState extends State<SourcePreferenceWidget> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: widget.sourcePreference.length,
|
||||
itemBuilder: (context, index) {
|
||||
final preference = widget.sourcePreference[index];
|
||||
Widget? w;
|
||||
if (preference.editTextPreference != null) {
|
||||
final pref = preference.editTextPreference!;
|
||||
w = ListTile(
|
||||
title: Text(pref.title!),
|
||||
subtitle: Text(pref.summary!,
|
||||
style:
|
||||
TextStyle(fontSize: 11, color: secondaryColor(context))),
|
||||
onTap: () {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => EditTextDialogWidget(
|
||||
text: pref.value!,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
pref.value = value;
|
||||
});
|
||||
setPreferenceSetting(preference, widget.source);
|
||||
},
|
||||
dialogTitle: pref.dialogTitle!,
|
||||
dialogMessage: pref.dialogMessage!));
|
||||
},
|
||||
);
|
||||
} else if (preference.checkBoxPreference != null) {
|
||||
final pref = preference.checkBoxPreference!;
|
||||
w = CheckboxListTile(
|
||||
title: Text(pref.title!),
|
||||
subtitle: Text(pref.summary!,
|
||||
style:
|
||||
TextStyle(fontSize: 11, color: secondaryColor(context))),
|
||||
value: pref.value,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
pref.value = value;
|
||||
});
|
||||
setPreferenceSetting(preference, widget.source);
|
||||
},
|
||||
controlAffinity: ListTileControlAffinity.trailing,
|
||||
);
|
||||
} else if (preference.switchPreferenceCompat != null) {
|
||||
final pref = preference.switchPreferenceCompat!;
|
||||
w = SwitchListTile(
|
||||
title: Text(pref.title!),
|
||||
subtitle: Text(pref.summary!,
|
||||
style:
|
||||
TextStyle(fontSize: 11, color: secondaryColor(context))),
|
||||
value: pref.value!,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
pref.value = value;
|
||||
});
|
||||
setPreferenceSetting(preference, widget.source);
|
||||
},
|
||||
controlAffinity: ListTileControlAffinity.trailing,
|
||||
);
|
||||
} else if (preference.listPreference != null) {
|
||||
final pref = preference.listPreference!;
|
||||
w = ListTile(
|
||||
title: Text(pref.title!),
|
||||
subtitle: Text(pref.entries![pref.valueIndex!],
|
||||
style: TextStyle(
|
||||
fontSize: 11, color: secondaryColor(context))),
|
||||
onTap: () async {
|
||||
final res = await showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(pref.title!),
|
||||
content: SizedBox(
|
||||
width: mediaWidth(context, 0.8),
|
||||
child: ListView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: pref.entries!.length,
|
||||
itemBuilder: (context, index) {
|
||||
return RadioListTile(
|
||||
dense: true,
|
||||
contentPadding: const EdgeInsets.all(0),
|
||||
value: index,
|
||||
groupValue: pref.valueIndex,
|
||||
onChanged: (value) {
|
||||
Navigator.pop(context, index);
|
||||
},
|
||||
title: Row(
|
||||
children: [Text(pref.entries![index])],
|
||||
),
|
||||
);
|
||||
},
|
||||
)),
|
||||
actions: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Text(
|
||||
context.l10n.cancel,
|
||||
style:
|
||||
TextStyle(color: primaryColor(context)),
|
||||
)),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
if (res != null) {
|
||||
setState(() {
|
||||
pref.valueIndex = res;
|
||||
});
|
||||
}
|
||||
setPreferenceSetting(preference, widget.source);
|
||||
});
|
||||
} else if (preference.multiSelectListPreference != null) {
|
||||
final pref = preference.multiSelectListPreference!;
|
||||
w = ListTile(
|
||||
title: Text(pref.title!),
|
||||
subtitle: Text(pref.summary!,
|
||||
style: TextStyle(
|
||||
fontSize: 11, color: secondaryColor(context))),
|
||||
onTap: () {
|
||||
List<String> indexList = [];
|
||||
indexList.addAll(pref.values!);
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return StatefulBuilder(
|
||||
builder: (context, setState) {
|
||||
return AlertDialog(
|
||||
title: Text(pref.title!),
|
||||
content: SizedBox(
|
||||
width: mediaWidth(context, 0.8),
|
||||
child: ListView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: pref.entries!.length,
|
||||
itemBuilder: (context, index) {
|
||||
return ListTileChapterFilter(
|
||||
label: pref.entries![index],
|
||||
type: indexList.contains(
|
||||
pref.entryValues![index])
|
||||
? 1
|
||||
: 0,
|
||||
onTap: () {
|
||||
if (indexList.contains(
|
||||
pref.entryValues![index])) {
|
||||
setState(() {
|
||||
indexList.remove(
|
||||
pref.entryValues![index]);
|
||||
pref.values = indexList;
|
||||
});
|
||||
} else {
|
||||
setState(() {
|
||||
indexList.add(
|
||||
pref.entryValues![index]);
|
||||
pref.values = indexList;
|
||||
});
|
||||
}
|
||||
setPreferenceSetting(
|
||||
preference, widget.source);
|
||||
});
|
||||
},
|
||||
)),
|
||||
actions: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Text(
|
||||
context.l10n.cancel,
|
||||
style: TextStyle(
|
||||
color: primaryColor(context)),
|
||||
)),
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Text(
|
||||
context.l10n.ok,
|
||||
style: TextStyle(
|
||||
color: primaryColor(context)),
|
||||
)),
|
||||
],
|
||||
)
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
}
|
||||
return w ?? Container();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class EditTextDialogWidget extends StatefulWidget {
|
||||
final String text;
|
||||
final String dialogTitle;
|
||||
final String dialogMessage;
|
||||
final Function(String) onChanged;
|
||||
const EditTextDialogWidget(
|
||||
{super.key,
|
||||
required this.text,
|
||||
required this.onChanged,
|
||||
required this.dialogTitle,
|
||||
required this.dialogMessage});
|
||||
|
||||
@override
|
||||
State<EditTextDialogWidget> createState() => _EditTextDialogWidgetState();
|
||||
}
|
||||
|
||||
class _EditTextDialogWidgetState extends State<EditTextDialogWidget> {
|
||||
late final _controller = TextEditingController(text: widget.text);
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(widget.dialogTitle),
|
||||
Text(widget.dialogMessage, style: const TextStyle(fontSize: 13))
|
||||
],
|
||||
),
|
||||
content: Padding(
|
||||
padding: const EdgeInsets.only(top: 20),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: TextField(
|
||||
controller: _controller,
|
||||
decoration: InputDecoration(
|
||||
isDense: true,
|
||||
filled: false,
|
||||
enabledBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(color: secondaryColor(context)),
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(color: primaryColor(context)),
|
||||
),
|
||||
border: const OutlineInputBorder(borderSide: BorderSide()),
|
||||
),
|
||||
))),
|
||||
actions: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Text(context.l10n.cancel)),
|
||||
const SizedBox(
|
||||
width: 15,
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
widget.onChanged(_controller.text);
|
||||
Navigator.pop(context);
|
||||
},
|
||||
child: Text(context.l10n.ok)),
|
||||
],
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@ part of 'migration.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$migrationHash() => r'6e66a54603736b638f834ffa9e2dbe03ec3f494e';
|
||||
String _$migrationHash() => r'6b3ff1b28168381079986d619b30c31ce44f341f';
|
||||
|
||||
/// See also [migration].
|
||||
@ProviderFor(migration)
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import 'package:mangayomi/modules/manga/detail/providers/update_manga_detail_pro
|
|||
import 'package:mangayomi/modules/manga/detail/providers/isar_providers.dart';
|
||||
import 'package:mangayomi/modules/widgets/error_text.dart';
|
||||
import 'package:mangayomi/modules/widgets/progress_center.dart';
|
||||
import 'package:mangayomi/sources/source_test.dart';
|
||||
|
||||
class MangaReaderDetail extends ConsumerStatefulWidget {
|
||||
final int mangaId;
|
||||
|
|
@ -61,7 +62,7 @@ class _MangaReaderDetailState extends ConsumerState<MangaReaderDetail> {
|
|||
final sourceExist = snapshot.hasData && snapshot.data!.isNotEmpty;
|
||||
return RefreshIndicator(
|
||||
onRefresh: () async {
|
||||
if (sourceExist) {
|
||||
if (sourceExist || useTestSourceCode) {
|
||||
await ref.read(updateMangaDetailProvider(
|
||||
mangaId: manga.id, isInit: false)
|
||||
.future);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'track_state_providers.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$trackStateHash() => r'dfaf828ad521255297e685ae780e53359abccc90';
|
||||
String _$trackStateHash() => r'8b3b72900d3f0c39834cabd942200814099b4106';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import 'package:isar/isar.dart';
|
|||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/chapter.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
import 'package:mangayomi/sources/source_test.dart';
|
||||
|
||||
pushMangaReaderView({
|
||||
required BuildContext context,
|
||||
|
|
@ -22,7 +23,9 @@ pushMangaReaderView({
|
|||
.isAddedEqualTo(true)
|
||||
.findAllSync()
|
||||
.isNotEmpty;
|
||||
if (sourceExist || chapter.manga.value!.isLocalArchive!) {
|
||||
if (sourceExist ||
|
||||
useTestSourceCode ||
|
||||
chapter.manga.value!.isLocalArchive!) {
|
||||
if (chapter.manga.value!.isManga!) {
|
||||
context.push('/mangareaderview', extra: chapter);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'track_providers.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$tracksHash() => r'65e6092128a8d24edcecb215287d4a774df1b180';
|
||||
String _$tracksHash() => r'8fbe5a46115adda0135e97386f4de57f22dc4149';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// ignore_for_file: depend_on_referenced_packages
|
||||
import 'dart:io';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:mangayomi/eval/model/source_preference.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/category.dart';
|
||||
import 'package:mangayomi/models/chapter.dart';
|
||||
|
|
@ -107,7 +108,8 @@ class StorageProvider {
|
|||
SourceSchema,
|
||||
SettingsSchema,
|
||||
TrackPreferenceSchema,
|
||||
TrackSchema
|
||||
TrackSchema,
|
||||
SourcePreferenceSchema
|
||||
], directory: dir!.path, name: "mangayomiDb", inspector: inspector!);
|
||||
|
||||
if (isar.settings.filter().idEqualTo(227).isEmptySync()) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'router.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$routerHash() => r'd78592aa99912031c9bd923477bf65e394626d01';
|
||||
String _$routerHash() => r'50d606dbd2d70fb41bf26613e12475e787990319';
|
||||
|
||||
/// See also [router].
|
||||
@ProviderFor(router)
|
||||
|
|
|
|||
26
lib/services/get_source_preference.dart
Normal file
26
lib/services/get_source_preference.dart
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/eval/model/m_provider.dart';
|
||||
import 'package:mangayomi/eval/model/source_preference.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
import 'package:mangayomi/eval/runtime/runtime.dart';
|
||||
|
||||
List<SourcePreference> getSourcePreference({required Source source}) {
|
||||
List<SourcePreference> sourcePreference = [];
|
||||
|
||||
try {
|
||||
final bytecode = compilerEval(source.sourceCode!);
|
||||
|
||||
final runtime = runtimeEval(bytecode);
|
||||
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main');
|
||||
sourcePreference = (res as MProvider)
|
||||
.getSourcePreferences()
|
||||
.map((e) => (e is $Value ? e.$reified : e) as SourcePreference)
|
||||
.toList();
|
||||
} catch (_) {
|
||||
return [];
|
||||
}
|
||||
|
||||
return sourcePreference;
|
||||
}
|
||||
Loading…
Reference in a new issue