refactor & some fix
This commit is contained in:
parent
1e98eadee7
commit
ca81405f43
59 changed files with 1526 additions and 866 deletions
|
|
@ -3,27 +3,32 @@ import 'package:dart_eval/dart_eval.dart';
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:http/http.dart';
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/model/m_bridge.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
|
||||
/// dart_eval wrapper for [Client]
|
||||
/// dart_eval wrapper for [InterceptedClient]
|
||||
class $Client implements $Instance {
|
||||
$Client.wrap(this.$value);
|
||||
|
||||
@override
|
||||
final Client $value;
|
||||
final InterceptedClient $value;
|
||||
|
||||
late final $Instance _superclass = $Object($value);
|
||||
|
||||
/// Compile-time bridged type reference for [$Client]
|
||||
/// Compile-time bridged type reference for [$InterceptedClient]
|
||||
static const $type = BridgeTypeRef(
|
||||
BridgeTypeSpec('package:mangayomi/bridge_lib.dart', 'Client'));
|
||||
|
||||
/// Compile-time bridged class declaration for [$Client]
|
||||
/// Compile-time bridged class declaration for [$InterceptedClient]
|
||||
static const $declaration = BridgeClassDef(BridgeClassType($type),
|
||||
constructors: {
|
||||
'': BridgeConstructorDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation($type), params: [], namedParams: []))
|
||||
'': BridgeConstructorDef(
|
||||
BridgeFunctionDef(returns: BridgeTypeAnnotation($type), params: [
|
||||
BridgeParameter(
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false),
|
||||
], namedParams: []))
|
||||
},
|
||||
methods: {
|
||||
'get': BridgeMethodDef(BridgeFunctionDef(
|
||||
|
|
@ -207,7 +212,9 @@ class $Client implements $Instance {
|
|||
wrap: true);
|
||||
|
||||
static $Client $new(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
return $Client.wrap(Client());
|
||||
return $Client.wrap(
|
||||
MInterceptor.init(source: args[0]?.$value),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -240,10 +247,10 @@ class $Client implements $Instance {
|
|||
final url = args[0]!.$value as Uri;
|
||||
final headers = _toMapString(args[1]?.$value);
|
||||
|
||||
final request = (target!.$value as Client).get(url, headers: headers);
|
||||
return $Future.wrap(request
|
||||
.then((value) => $Response.wrap(value.message()))
|
||||
.onErrorMessage());
|
||||
final request =
|
||||
(target!.$value as InterceptedClient).get(url, headers: headers);
|
||||
return $Future
|
||||
.wrap(request.then((value) => $Response.wrap(value)).onErrorMessage());
|
||||
}
|
||||
|
||||
static const $Function __post = $Function(_post);
|
||||
|
|
@ -254,11 +261,10 @@ class $Client implements $Instance {
|
|||
final body = _toBodyObject(args[2]?.$value);
|
||||
final encoding = args[3]?.$value as Encoding?;
|
||||
|
||||
final request = (target!.$value as Client)
|
||||
final request = (target!.$value as InterceptedClient)
|
||||
.post(url, headers: headers, body: body, encoding: encoding);
|
||||
return $Future.wrap(request
|
||||
.then((value) => $Response.wrap(value.message()))
|
||||
.onErrorMessage());
|
||||
return $Future
|
||||
.wrap(request.then((value) => $Response.wrap(value)).onErrorMessage());
|
||||
}
|
||||
|
||||
static const $Function __put = $Function(_put);
|
||||
|
|
@ -269,11 +275,10 @@ class $Client implements $Instance {
|
|||
final body = _toBodyObject(args[2]?.$value);
|
||||
final encoding = args[3]?.$value as Encoding?;
|
||||
|
||||
final request = (target!.$value as Client)
|
||||
final request = (target!.$value as InterceptedClient)
|
||||
.put(url, headers: headers, body: body, encoding: encoding);
|
||||
return $Future.wrap(request
|
||||
.then((value) => $Response.wrap(value.message()))
|
||||
.onErrorMessage());
|
||||
return $Future
|
||||
.wrap(request.then((value) => $Response.wrap(value)).onErrorMessage());
|
||||
}
|
||||
|
||||
static const $Function __delete = $Function(_delete);
|
||||
|
|
@ -284,11 +289,10 @@ class $Client implements $Instance {
|
|||
final body = _toBodyObject(args[2]?.$value);
|
||||
final encoding = args[3]?.$value as Encoding?;
|
||||
|
||||
final request = (target!.$value as Client)
|
||||
final request = (target!.$value as InterceptedClient)
|
||||
.delete(url, headers: headers, body: body, encoding: encoding);
|
||||
return $Future.wrap(request
|
||||
.then((value) => $Response.wrap(value.message()))
|
||||
.onErrorMessage());
|
||||
return $Future
|
||||
.wrap(request.then((value) => $Response.wrap(value)).onErrorMessage());
|
||||
}
|
||||
|
||||
static const $Function __patch = $Function(_patch);
|
||||
|
|
@ -299,7 +303,7 @@ class $Client implements $Instance {
|
|||
final body = _toBodyObject(args[2]?.$value);
|
||||
final encoding = args[3]?.$value as Encoding?;
|
||||
|
||||
final request = (target!.$value as Client)
|
||||
final request = (target!.$value as InterceptedClient)
|
||||
.patch(url, headers: headers, body: body, encoding: encoding);
|
||||
return $Future
|
||||
.wrap(request.then((value) => $Response.wrap(value)).onErrorMessage());
|
||||
|
|
@ -311,7 +315,8 @@ class $Client implements $Instance {
|
|||
final url = args[0]!.$value as Uri;
|
||||
final headers = _toMapString(args[1]?.$value);
|
||||
|
||||
final request = (target!.$value as Client).read(url, headers: headers);
|
||||
final request =
|
||||
(target!.$value as InterceptedClient).read(url, headers: headers);
|
||||
return $Future
|
||||
.wrap(request.then((value) => $String(value)).onErrorMessage());
|
||||
}
|
||||
|
|
@ -325,7 +330,8 @@ class $Client implements $Instance {
|
|||
(key, value) =>
|
||||
MapEntry((key.$reified).toString(), (value.$reified).toString()));
|
||||
|
||||
final request = (target!.$value as Client).readBytes(url, headers: headers);
|
||||
final request =
|
||||
(target!.$value as InterceptedClient).readBytes(url, headers: headers);
|
||||
return $Future
|
||||
.wrap(request.then((value) => $List.wrap(value)).onErrorMessage());
|
||||
}
|
||||
|
|
@ -333,7 +339,7 @@ class $Client implements $Instance {
|
|||
static const $Function __close = $Function(_close);
|
||||
|
||||
static $Value? _close(Runtime runtime, $Value? target, List<$Value?> args) {
|
||||
(target!.$value as Client).close();
|
||||
(target!.$value as InterceptedClient).close();
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -711,19 +717,3 @@ extension FutureResponseExtension<T> on Future<T> {
|
|||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
extension ResponseExtension on Response {
|
||||
Response message() {
|
||||
final cloudflare = [403, 503].contains(statusCode) &&
|
||||
["cloudflare-nginx", "cloudflare"].contains(headers["server"]);
|
||||
if (kDebugMode) {
|
||||
print(
|
||||
"${request?.method}: ${request?.url}, statusCode: $statusCode ${cloudflare ? "Failed to bypass Cloudflare" : ""}");
|
||||
}
|
||||
if (cloudflare) {
|
||||
botToast("$statusCode Failed to bypass Cloudflare");
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import 'package:dart_eval/dart_eval_bridge.dart';
|
|||
import 'package:dart_eval/stdlib/core.dart';
|
||||
import 'package:mangayomi/eval/bridge/document.dart';
|
||||
import 'package:mangayomi/eval/bridge/filter.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_manga.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_pages.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_status.dart';
|
||||
|
|
@ -13,7 +12,6 @@ import 'package:mangayomi/eval/bridge/m_video.dart';
|
|||
import 'package:mangayomi/eval/model/filter.dart';
|
||||
import 'package:mangayomi/eval/model/m_bridge.dart';
|
||||
import 'package:mangayomi/eval/model/m_pages.dart';
|
||||
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';
|
||||
|
|
@ -44,8 +42,6 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.future, [$MPages.$type])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false),
|
||||
BridgeParameter('page',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)), false),
|
||||
])),
|
||||
|
|
@ -53,8 +49,6 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.future, [$MPages.$type])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false),
|
||||
BridgeParameter('page',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)), false),
|
||||
])),
|
||||
|
|
@ -62,8 +56,6 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.future, [$MPages.$type])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false),
|
||||
BridgeParameter('query',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter(
|
||||
|
|
@ -76,8 +68,6 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
returns: BridgeTypeAnnotation(
|
||||
BridgeTypeRef(CoreTypes.future, [$MManga.$type])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false),
|
||||
BridgeParameter('url',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
])),
|
||||
|
|
@ -86,8 +76,6 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
BridgeTypeRef(CoreTypes.list, [BridgeTypeRef(CoreTypes.string)])
|
||||
])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false),
|
||||
BridgeParameter('url',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
])),
|
||||
|
|
@ -96,25 +84,17 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
BridgeTypeRef(CoreTypes.list, [$MVideo.$type])
|
||||
])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false),
|
||||
BridgeParameter('url',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
])),
|
||||
'getFilterList': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(
|
||||
CoreTypes.list, [BridgeTypeRef(CoreTypes.dynamic)])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false)
|
||||
])),
|
||||
params: [])),
|
||||
'getSourcePreferences': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(
|
||||
CoreTypes.list, [BridgeTypeRef(CoreTypes.dynamic)])),
|
||||
params: [
|
||||
BridgeParameter(
|
||||
'source', BridgeTypeAnnotation($MSource.$type), false)
|
||||
])),
|
||||
params: [])),
|
||||
'getPreferenceValue': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.dynamic)),
|
||||
params: [
|
||||
|
|
@ -123,6 +103,26 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
BridgeParameter('key',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
])),
|
||||
'getPrefStringValue': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
params: [
|
||||
BridgeParameter('sourceId',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)), false),
|
||||
BridgeParameter('key',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('value',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
])),
|
||||
'setPrefStringValue': BridgeMethodDef(BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.voidType)),
|
||||
params: [
|
||||
BridgeParameter('sourceId',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)), false),
|
||||
BridgeParameter('key',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
BridgeParameter('value',
|
||||
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)), false),
|
||||
])),
|
||||
'cryptoHandler': BridgeMethodDef(
|
||||
BridgeFunctionDef(
|
||||
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
|
||||
|
|
@ -782,6 +782,16 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
}
|
||||
return $List.wrap(value.map((e) => $String(e)).toList());
|
||||
}),
|
||||
'getPrefStringValue' => $Function((_, __, List<$Value?> args) {
|
||||
final value = getSourcePreferenceStringValue(
|
||||
args[0]!.$reified, args[1]!.$reified, args[2]!.$reified);
|
||||
return $String(value);
|
||||
}),
|
||||
'setPrefStringValue' => $Function((_, __, List<$Value?> args) {
|
||||
setSourcePreferenceStringValue(
|
||||
args[0]!.$reified, args[1]!.$reified, args[2]!.$reified);
|
||||
return;
|
||||
}),
|
||||
"cryptoHandler" => $Function((_, __, List<$Value?> args) {
|
||||
return $String(MBridge.cryptoHandler(args[0]!.$value, args[1]!.$value,
|
||||
args[2]!.$value, args[3]!.$value));
|
||||
|
|
@ -951,31 +961,28 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
bool get supportsLatest => $_get('supportsLatest');
|
||||
|
||||
@override
|
||||
Future<MManga> getDetail(MSource source, String url) async =>
|
||||
await $_invoke('getDetail', [$MSource.wrap(source), $String(url)]);
|
||||
Future<MManga> getDetail(String url) async =>
|
||||
await $_invoke('getDetail', [$String(url)]);
|
||||
|
||||
@override
|
||||
Future<MPages> getLatestUpdates(MSource source, int page) async =>
|
||||
await $_invoke('getLatestUpdates', [$MSource.wrap(source), $int(page)]);
|
||||
Future<MPages> getLatestUpdates(int page) async =>
|
||||
await $_invoke('getLatestUpdates', [$int(page)]);
|
||||
|
||||
@override
|
||||
Future<MPages> getPopular(MSource source, int page) async =>
|
||||
await $_invoke('getPopular', [$MSource.wrap(source), $int(page)]);
|
||||
Future<MPages> getPopular(int page) async =>
|
||||
await $_invoke('getPopular', [$int(page)]);
|
||||
|
||||
@override
|
||||
Future<MPages> search(MSource source, String query, int page,
|
||||
FilterList filterList) async =>
|
||||
Future<MPages> search(String query, int page, FilterList filterList) async =>
|
||||
await $_invoke('search', [
|
||||
$MSource.wrap(source),
|
||||
$String(query),
|
||||
$int(page),
|
||||
$FilterList.wrap(FilterList(_toValueList(filterList.filters)))
|
||||
]);
|
||||
|
||||
@override
|
||||
Future<List<String>> getPageList(MSource source, String url) async {
|
||||
final res =
|
||||
await $_invoke('getPageList', [$MSource.wrap(source), $String(url)]);
|
||||
Future<List<String>> getPageList(String url) async {
|
||||
final res = await $_invoke('getPageList', [$String(url)]);
|
||||
if (res is $List) {
|
||||
return res.$reified.map((e) => e as String).toList();
|
||||
}
|
||||
|
|
@ -983,8 +990,8 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
}
|
||||
|
||||
@override
|
||||
List getFilterList(MSource source) {
|
||||
final res = $_invoke('getFilterList', [$MSource.wrap(source)]);
|
||||
List getFilterList() {
|
||||
final res = $_invoke('getFilterList', []);
|
||||
if (res is $List) {
|
||||
return res.$reified;
|
||||
}
|
||||
|
|
@ -992,8 +999,8 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
}
|
||||
|
||||
@override
|
||||
List getSourcePreferences(MSource source) {
|
||||
final res = $_invoke('getSourcePreferences', [$MSource.wrap(source)]);
|
||||
List getSourcePreferences() {
|
||||
final res = $_invoke('getSourcePreferences', []);
|
||||
if (res is $List) {
|
||||
return res.$reified;
|
||||
}
|
||||
|
|
@ -1001,9 +1008,8 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<List<Video>> getVideoList(MSource source, String url) async {
|
||||
final res =
|
||||
await $_invoke('getVideoList', [$MSource.wrap(source), $String(url)]);
|
||||
Future<List<Video>> getVideoList(String url) async {
|
||||
final res = await $_invoke('getVideoList', [$String(url)]);
|
||||
if (res is $List) {
|
||||
return res.$reified.map((e) => e as Video).toList();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ import 'package:mangayomi/services/anime_extractors/streamwish_extractor.dart';
|
|||
import 'package:mangayomi/services/anime_extractors/vidbom_extractor.dart';
|
||||
import 'package:mangayomi/services/anime_extractors/voe_extractor.dart';
|
||||
import 'package:mangayomi/services/anime_extractors/your_upload_extractor.dart';
|
||||
import 'package:mangayomi/services/cloudflare/cloudflare.dart';
|
||||
import 'package:mangayomi/services/http/cloudflare.dart';
|
||||
import 'package:mangayomi/utils/constant.dart';
|
||||
import 'package:mangayomi/utils/cryptoaes/crypto_aes.dart';
|
||||
import 'package:mangayomi/utils/cryptoaes/deobfuscator.dart';
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
import 'package:mangayomi/eval/model/filter.dart';
|
||||
import 'package:mangayomi/eval/model/m_pages.dart';
|
||||
import 'package:mangayomi/eval/model/m_source.dart';
|
||||
import 'package:mangayomi/eval/model/m_manga.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
|
||||
|
|
@ -9,20 +8,19 @@ abstract class MProvider {
|
|||
|
||||
bool get supportsLatest => true;
|
||||
|
||||
Future<MPages> getLatestUpdates(MSource source, int page);
|
||||
Future<MPages> getLatestUpdates(int page);
|
||||
|
||||
Future<MPages> getPopular(MSource source, int page);
|
||||
Future<MPages> getPopular(int page);
|
||||
|
||||
Future<MPages> search(
|
||||
MSource source, String query, int page, FilterList filterList);
|
||||
Future<MPages> search(String query, int page, FilterList filterList);
|
||||
|
||||
Future<MManga> getDetail(MSource source, String url);
|
||||
Future<MManga> getDetail(String url);
|
||||
|
||||
Future<List<String>> getPageList(MSource source, String url);
|
||||
Future<List<String>> getPageList(String url);
|
||||
|
||||
Future<List<Video>> getVideoList(MSource source, String url);
|
||||
Future<List<Video>> getVideoList(String url);
|
||||
|
||||
List<dynamic> getFilterList(MSource source);
|
||||
List<dynamic> getFilterList();
|
||||
|
||||
List<dynamic> getSourcePreferences(MSource source);
|
||||
List<dynamic> getSourcePreferences();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -194,3 +194,15 @@ class EditTextPreference {
|
|||
text: json['text']);
|
||||
}
|
||||
}
|
||||
|
||||
@collection
|
||||
@Name("SourcePreferenceStringValue")
|
||||
class SourcePreferenceStringValue {
|
||||
Id id;
|
||||
int? sourceId;
|
||||
String? key;
|
||||
String? value;
|
||||
|
||||
SourcePreferenceStringValue(
|
||||
{this.id = Isar.autoIncrement, this.sourceId, this.key, this.value});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -933,6 +933,824 @@ extension SourcePreferenceQueryProperty
|
|||
}
|
||||
}
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types
|
||||
|
||||
extension GetSourcePreferenceStringValueCollection on Isar {
|
||||
IsarCollection<SourcePreferenceStringValue>
|
||||
get sourcePreferenceStringValues => this.collection();
|
||||
}
|
||||
|
||||
const SourcePreferenceStringValueSchema = CollectionSchema(
|
||||
name: r'SourcePreferenceStringValue',
|
||||
id: 8063295595066322236,
|
||||
properties: {
|
||||
r'key': PropertySchema(
|
||||
id: 0,
|
||||
name: r'key',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'sourceId': PropertySchema(
|
||||
id: 1,
|
||||
name: r'sourceId',
|
||||
type: IsarType.long,
|
||||
),
|
||||
r'value': PropertySchema(
|
||||
id: 2,
|
||||
name: r'value',
|
||||
type: IsarType.string,
|
||||
)
|
||||
},
|
||||
estimateSize: _sourcePreferenceStringValueEstimateSize,
|
||||
serialize: _sourcePreferenceStringValueSerialize,
|
||||
deserialize: _sourcePreferenceStringValueDeserialize,
|
||||
deserializeProp: _sourcePreferenceStringValueDeserializeProp,
|
||||
idName: r'id',
|
||||
indexes: {},
|
||||
links: {},
|
||||
embeddedSchemas: {},
|
||||
getId: _sourcePreferenceStringValueGetId,
|
||||
getLinks: _sourcePreferenceStringValueGetLinks,
|
||||
attach: _sourcePreferenceStringValueAttach,
|
||||
version: '3.1.0+1',
|
||||
);
|
||||
|
||||
int _sourcePreferenceStringValueEstimateSize(
|
||||
SourcePreferenceStringValue object,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
var bytesCount = offsets.last;
|
||||
{
|
||||
final value = object.key;
|
||||
if (value != null) {
|
||||
bytesCount += 3 + value.length * 3;
|
||||
}
|
||||
}
|
||||
{
|
||||
final value = object.value;
|
||||
if (value != null) {
|
||||
bytesCount += 3 + value.length * 3;
|
||||
}
|
||||
}
|
||||
return bytesCount;
|
||||
}
|
||||
|
||||
void _sourcePreferenceStringValueSerialize(
|
||||
SourcePreferenceStringValue object,
|
||||
IsarWriter writer,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
writer.writeString(offsets[0], object.key);
|
||||
writer.writeLong(offsets[1], object.sourceId);
|
||||
writer.writeString(offsets[2], object.value);
|
||||
}
|
||||
|
||||
SourcePreferenceStringValue _sourcePreferenceStringValueDeserialize(
|
||||
Id id,
|
||||
IsarReader reader,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
final object = SourcePreferenceStringValue(
|
||||
id: id,
|
||||
key: reader.readStringOrNull(offsets[0]),
|
||||
sourceId: reader.readLongOrNull(offsets[1]),
|
||||
value: reader.readStringOrNull(offsets[2]),
|
||||
);
|
||||
return object;
|
||||
}
|
||||
|
||||
P _sourcePreferenceStringValueDeserializeProp<P>(
|
||||
IsarReader reader,
|
||||
int propertyId,
|
||||
int offset,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
switch (propertyId) {
|
||||
case 0:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 1:
|
||||
return (reader.readLongOrNull(offset)) as P;
|
||||
case 2:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
default:
|
||||
throw IsarError('Unknown property with id $propertyId');
|
||||
}
|
||||
}
|
||||
|
||||
Id _sourcePreferenceStringValueGetId(SourcePreferenceStringValue object) {
|
||||
return object.id;
|
||||
}
|
||||
|
||||
List<IsarLinkBase<dynamic>> _sourcePreferenceStringValueGetLinks(
|
||||
SourcePreferenceStringValue object) {
|
||||
return [];
|
||||
}
|
||||
|
||||
void _sourcePreferenceStringValueAttach(
|
||||
IsarCollection<dynamic> col, Id id, SourcePreferenceStringValue object) {
|
||||
object.id = id;
|
||||
}
|
||||
|
||||
extension SourcePreferenceStringValueQueryWhereSort on QueryBuilder<
|
||||
SourcePreferenceStringValue, SourcePreferenceStringValue, QWhere> {
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterWhere> anyId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(const IdWhereClause.any());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension SourcePreferenceStringValueQueryWhere on QueryBuilder<
|
||||
SourcePreferenceStringValue, SourcePreferenceStringValue, QWhereClause> {
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterWhereClause> idEqualTo(Id id) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(IdWhereClause.between(
|
||||
lower: id,
|
||||
upper: id,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterWhereClause> idNotEqualTo(Id id) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
if (query.whereSort == Sort.asc) {
|
||||
return query
|
||||
.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: false),
|
||||
)
|
||||
.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: false),
|
||||
);
|
||||
} else {
|
||||
return query
|
||||
.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: false),
|
||||
)
|
||||
.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: false),
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterWhereClause> idGreaterThan(Id id, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IdWhereClause.greaterThan(lower: id, includeLower: include),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterWhereClause> idLessThan(Id id, {bool include = false}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(
|
||||
IdWhereClause.lessThan(upper: id, includeUpper: include),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterWhereClause> idBetween(
|
||||
Id lowerId,
|
||||
Id upperId, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addWhereClause(IdWhereClause.between(
|
||||
lower: lowerId,
|
||||
includeLower: includeLower,
|
||||
upper: upperId,
|
||||
includeUpper: includeUpper,
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension SourcePreferenceStringValueQueryFilter on QueryBuilder<
|
||||
SourcePreferenceStringValue,
|
||||
SourcePreferenceStringValue,
|
||||
QFilterCondition> {
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> idEqualTo(Id value) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'id',
|
||||
value: value,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> idGreaterThan(
|
||||
Id value, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'id',
|
||||
value: value,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> idLessThan(
|
||||
Id value, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'id',
|
||||
value: value,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> idBetween(
|
||||
Id lower,
|
||||
Id upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.between(
|
||||
property: r'id',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> keyIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
property: r'key',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> keyIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||
property: r'key',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> keyEqualTo(
|
||||
String? value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'key',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> keyGreaterThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'key',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> keyLessThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'key',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> keyBetween(
|
||||
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'key',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> keyStartsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.startsWith(
|
||||
property: r'key',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> keyEndsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.endsWith(
|
||||
property: r'key',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition>
|
||||
keyContains(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.contains(
|
||||
property: r'key',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition>
|
||||
keyMatches(String pattern, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.matches(
|
||||
property: r'key',
|
||||
wildcard: pattern,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> keyIsEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'key',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> keyIsNotEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
property: r'key',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> sourceIdIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
property: r'sourceId',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> sourceIdIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||
property: r'sourceId',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> sourceIdEqualTo(int? value) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'sourceId',
|
||||
value: value,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> sourceIdGreaterThan(
|
||||
int? value, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'sourceId',
|
||||
value: value,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> sourceIdLessThan(
|
||||
int? value, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'sourceId',
|
||||
value: value,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> sourceIdBetween(
|
||||
int? lower,
|
||||
int? upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.between(
|
||||
property: r'sourceId',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> valueIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
property: r'value',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> valueIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||
property: r'value',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> valueEqualTo(
|
||||
String? value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'value',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> valueGreaterThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'value',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> valueLessThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'value',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> valueBetween(
|
||||
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'value',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> valueStartsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.startsWith(
|
||||
property: r'value',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> valueEndsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.endsWith(
|
||||
property: r'value',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition>
|
||||
valueContains(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.contains(
|
||||
property: r'value',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition>
|
||||
valueMatches(String pattern, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.matches(
|
||||
property: r'value',
|
||||
wildcard: pattern,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> valueIsEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'value',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterFilterCondition> valueIsNotEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
property: r'value',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension SourcePreferenceStringValueQueryObject on QueryBuilder<
|
||||
SourcePreferenceStringValue,
|
||||
SourcePreferenceStringValue,
|
||||
QFilterCondition> {}
|
||||
|
||||
extension SourcePreferenceStringValueQueryLinks on QueryBuilder<
|
||||
SourcePreferenceStringValue,
|
||||
SourcePreferenceStringValue,
|
||||
QFilterCondition> {}
|
||||
|
||||
extension SourcePreferenceStringValueQuerySortBy on QueryBuilder<
|
||||
SourcePreferenceStringValue, SourcePreferenceStringValue, QSortBy> {
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> sortByKey() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'key', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> sortByKeyDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'key', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> sortBySourceId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'sourceId', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> sortBySourceIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'sourceId', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> sortByValue() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'value', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> sortByValueDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'value', Sort.desc);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension SourcePreferenceStringValueQuerySortThenBy on QueryBuilder<
|
||||
SourcePreferenceStringValue, SourcePreferenceStringValue, QSortThenBy> {
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> thenById() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'id', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> thenByIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'id', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> thenByKey() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'key', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> thenByKeyDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'key', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> thenBySourceId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'sourceId', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> thenBySourceIdDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'sourceId', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> thenByValue() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'value', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QAfterSortBy> thenByValueDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'value', Sort.desc);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension SourcePreferenceStringValueQueryWhereDistinct on QueryBuilder<
|
||||
SourcePreferenceStringValue, SourcePreferenceStringValue, QDistinct> {
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QDistinct> distinctByKey({bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'key', caseSensitive: caseSensitive);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QDistinct> distinctBySourceId() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'sourceId');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, SourcePreferenceStringValue,
|
||||
QDistinct> distinctByValue({bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'value', caseSensitive: caseSensitive);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension SourcePreferenceStringValueQueryProperty on QueryBuilder<
|
||||
SourcePreferenceStringValue, SourcePreferenceStringValue, QQueryProperty> {
|
||||
QueryBuilder<SourcePreferenceStringValue, int, QQueryOperations>
|
||||
idProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'id');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, String?, QQueryOperations>
|
||||
keyProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'key');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, int?, QQueryOperations>
|
||||
sourceIdProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'sourceId');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<SourcePreferenceStringValue, String?, QQueryOperations>
|
||||
valueProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'value');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// **************************************************************************
|
||||
// IsarEmbeddedGenerator
|
||||
// **************************************************************************
|
||||
|
|
|
|||
|
|
@ -61,8 +61,6 @@ class Settings {
|
|||
|
||||
String? userAgent;
|
||||
|
||||
List<Cookie>? cookiesList;
|
||||
|
||||
@enumerated
|
||||
late ReaderMode defaultReaderMode;
|
||||
|
||||
|
|
@ -165,6 +163,8 @@ class Settings {
|
|||
|
||||
bool? fullScreenReader;
|
||||
|
||||
String? defaultAppStoragePath;
|
||||
|
||||
Settings(
|
||||
{this.id = 227,
|
||||
this.displayType = DisplayType.compactGrid,
|
||||
|
|
@ -190,7 +190,6 @@ class Settings {
|
|||
this.showPagesNumber = true,
|
||||
this.chapterPageIndexList,
|
||||
this.userAgent = defaultUserAgent,
|
||||
this.cookiesList,
|
||||
this.defaultReaderMode = ReaderMode.vertical,
|
||||
this.personalReaderModeList,
|
||||
this.animatePageTransitions = true,
|
||||
|
|
@ -237,7 +236,8 @@ class Settings {
|
|||
this.aniSkipTimeoutLength,
|
||||
this.btServerAddress = "127.0.0.1",
|
||||
this.btServerPort,
|
||||
this.fullScreenReader = true});
|
||||
this.fullScreenReader = true,
|
||||
this.defaultAppStoragePath});
|
||||
|
||||
Settings.fromJson(Map<String, dynamic> json) {
|
||||
animatePageTransitions = json['animatePageTransitions'];
|
||||
|
|
@ -279,10 +279,6 @@ class Settings {
|
|||
.toList();
|
||||
}
|
||||
checkForExtensionUpdates = json['checkForExtensionUpdates'];
|
||||
if (json['cookiesList'] != null) {
|
||||
cookiesList =
|
||||
(json['cookiesList'] as List).map((e) => Cookie.fromJson(e)).toList();
|
||||
}
|
||||
cropBorders = json['cropBorders'];
|
||||
dateFormat = json['dateFormat'];
|
||||
defaultReaderMode = ReaderMode.values[json['defaultReaderMode']];
|
||||
|
|
@ -366,6 +362,7 @@ class Settings {
|
|||
btServerAddress = json['btServerAddress'];
|
||||
btServerPort = json['btServerPort'];
|
||||
fullScreenReader = json['fullScreenReader'];
|
||||
defaultAppStoragePath = json['defaultAppStoragePath'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
|
|
@ -396,7 +393,6 @@ class Settings {
|
|||
'chapterPageUrlsList':
|
||||
chapterPageUrlsList!.map((v) => v.toJson()).toList(),
|
||||
'checkForExtensionUpdates': checkForExtensionUpdates,
|
||||
'cookiesList': cookiesList,
|
||||
'cropBorders': cropBorders,
|
||||
'dateFormat': dateFormat,
|
||||
'defaultReaderMode': defaultReaderMode.index,
|
||||
|
|
@ -462,7 +458,8 @@ class Settings {
|
|||
'aniSkipTimeoutLength': aniSkipTimeoutLength,
|
||||
'btServerAddress': btServerAddress,
|
||||
'btServerPort': btServerPort,
|
||||
'fullScreenReader': fullScreenReader
|
||||
'fullScreenReader': fullScreenReader,
|
||||
'defaultAppStoragePath': defaultAppStoragePath
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -580,20 +577,6 @@ class ChapterPageIndex {
|
|||
Map<String, dynamic> toJson() => {'chapterId': chapterId, 'index': index};
|
||||
}
|
||||
|
||||
@embedded
|
||||
class Cookie {
|
||||
String? idSource;
|
||||
String? cookie;
|
||||
Cookie({this.idSource, this.cookie});
|
||||
|
||||
Cookie.fromJson(Map<String, dynamic> json) {
|
||||
idSource = json['idSource'];
|
||||
cookie = json['cookie'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() => {'idSource': idSource, 'cookie': cookie};
|
||||
}
|
||||
|
||||
@embedded
|
||||
class PersonalReaderMode {
|
||||
int? mangaId;
|
||||
|
|
|
|||
|
|
@ -140,22 +140,21 @@ const SettingsSchema = CollectionSchema(
|
|||
name: r'checkForExtensionUpdates',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'cookiesList': PropertySchema(
|
||||
id: 23,
|
||||
name: r'cookiesList',
|
||||
type: IsarType.objectList,
|
||||
target: r'Cookie',
|
||||
),
|
||||
r'cropBorders': PropertySchema(
|
||||
id: 24,
|
||||
id: 23,
|
||||
name: r'cropBorders',
|
||||
type: IsarType.bool,
|
||||
),
|
||||
r'dateFormat': PropertySchema(
|
||||
id: 25,
|
||||
id: 24,
|
||||
name: r'dateFormat',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'defaultAppStoragePath': PropertySchema(
|
||||
id: 25,
|
||||
name: r'defaultAppStoragePath',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'defaultDoubleTapToSkipLength': PropertySchema(
|
||||
id: 26,
|
||||
name: r'defaultDoubleTapToSkipLength',
|
||||
|
|
@ -434,7 +433,6 @@ const SettingsSchema = CollectionSchema(
|
|||
r'ChapterFilterBookmarked': ChapterFilterBookmarkedSchema,
|
||||
r'ChapterPageurls': ChapterPageurlsSchema,
|
||||
r'ChapterPageIndex': ChapterPageIndexSchema,
|
||||
r'Cookie': CookieSchema,
|
||||
r'PersonalReaderMode': PersonalReaderModeSchema,
|
||||
r'FilterScanlator': FilterScanlatorSchema,
|
||||
r'L10nLocale': L10nLocaleSchema,
|
||||
|
|
@ -556,20 +554,13 @@ int _settingsEstimateSize(
|
|||
}
|
||||
}
|
||||
{
|
||||
final list = object.cookiesList;
|
||||
if (list != null) {
|
||||
bytesCount += 3 + list.length * 3;
|
||||
{
|
||||
final offsets = allOffsets[Cookie]!;
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
final value = list[i];
|
||||
bytesCount += CookieSchema.estimateSize(value, offsets, allOffsets);
|
||||
}
|
||||
}
|
||||
final value = object.dateFormat;
|
||||
if (value != null) {
|
||||
bytesCount += 3 + value.length * 3;
|
||||
}
|
||||
}
|
||||
{
|
||||
final value = object.dateFormat;
|
||||
final value = object.defaultAppStoragePath;
|
||||
if (value != null) {
|
||||
bytesCount += 3 + value.length * 3;
|
||||
}
|
||||
|
|
@ -728,14 +719,9 @@ void _settingsSerialize(
|
|||
object.chapterPageUrlsList,
|
||||
);
|
||||
writer.writeBool(offsets[22], object.checkForExtensionUpdates);
|
||||
writer.writeObjectList<Cookie>(
|
||||
offsets[23],
|
||||
allOffsets,
|
||||
CookieSchema.serialize,
|
||||
object.cookiesList,
|
||||
);
|
||||
writer.writeBool(offsets[24], object.cropBorders);
|
||||
writer.writeString(offsets[25], object.dateFormat);
|
||||
writer.writeBool(offsets[23], object.cropBorders);
|
||||
writer.writeString(offsets[24], object.dateFormat);
|
||||
writer.writeString(offsets[25], object.defaultAppStoragePath);
|
||||
writer.writeLong(offsets[26], object.defaultDoubleTapToSkipLength);
|
||||
writer.writeDouble(offsets[27], object.defaultPlayBackSpeed);
|
||||
writer.writeByte(offsets[28], object.defaultReaderMode.index);
|
||||
|
|
@ -874,14 +860,9 @@ Settings _settingsDeserialize(
|
|||
ChapterPageurls(),
|
||||
),
|
||||
checkForExtensionUpdates: reader.readBoolOrNull(offsets[22]),
|
||||
cookiesList: reader.readObjectList<Cookie>(
|
||||
offsets[23],
|
||||
CookieSchema.deserialize,
|
||||
allOffsets,
|
||||
Cookie(),
|
||||
),
|
||||
cropBorders: reader.readBoolOrNull(offsets[24]),
|
||||
dateFormat: reader.readStringOrNull(offsets[25]),
|
||||
cropBorders: reader.readBoolOrNull(offsets[23]),
|
||||
dateFormat: reader.readStringOrNull(offsets[24]),
|
||||
defaultAppStoragePath: reader.readStringOrNull(offsets[25]),
|
||||
defaultDoubleTapToSkipLength: reader.readLongOrNull(offsets[26]),
|
||||
defaultPlayBackSpeed: reader.readDoubleOrNull(offsets[27]),
|
||||
defaultReaderMode: _SettingsdefaultReaderModeValueEnumMap[
|
||||
|
|
@ -1075,14 +1056,9 @@ P _settingsDeserializeProp<P>(
|
|||
case 22:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 23:
|
||||
return (reader.readObjectList<Cookie>(
|
||||
offset,
|
||||
CookieSchema.deserialize,
|
||||
allOffsets,
|
||||
Cookie(),
|
||||
)) as P;
|
||||
case 24:
|
||||
return (reader.readBoolOrNull(offset)) as P;
|
||||
case 24:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 25:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 26:
|
||||
|
|
@ -3077,111 +3053,6 @@ extension SettingsQueryFilter
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition> cookiesListIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
property: r'cookiesList',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
cookiesListIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||
property: r'cookiesList',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
cookiesListLengthEqualTo(int length) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.listLength(
|
||||
r'cookiesList',
|
||||
length,
|
||||
true,
|
||||
length,
|
||||
true,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition> cookiesListIsEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.listLength(
|
||||
r'cookiesList',
|
||||
0,
|
||||
true,
|
||||
0,
|
||||
true,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
cookiesListIsNotEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.listLength(
|
||||
r'cookiesList',
|
||||
0,
|
||||
false,
|
||||
999999,
|
||||
true,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
cookiesListLengthLessThan(
|
||||
int length, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.listLength(
|
||||
r'cookiesList',
|
||||
0,
|
||||
true,
|
||||
length,
|
||||
include,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
cookiesListLengthGreaterThan(
|
||||
int length, {
|
||||
bool include = false,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.listLength(
|
||||
r'cookiesList',
|
||||
length,
|
||||
include,
|
||||
999999,
|
||||
true,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
cookiesListLengthBetween(
|
||||
int lower,
|
||||
int upper, {
|
||||
bool includeLower = true,
|
||||
bool includeUpper = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.listLength(
|
||||
r'cookiesList',
|
||||
lower,
|
||||
includeLower,
|
||||
upper,
|
||||
includeUpper,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition> cropBordersIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
|
|
@ -3357,6 +3228,161 @@ extension SettingsQueryFilter
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
property: r'defaultAppStoragePath',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||
property: r'defaultAppStoragePath',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathEqualTo(
|
||||
String? value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'defaultAppStoragePath',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathGreaterThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'defaultAppStoragePath',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathLessThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'defaultAppStoragePath',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathBetween(
|
||||
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'defaultAppStoragePath',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathStartsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.startsWith(
|
||||
property: r'defaultAppStoragePath',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathEndsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.endsWith(
|
||||
property: r'defaultAppStoragePath',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathContains(String value, {bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.contains(
|
||||
property: r'defaultAppStoragePath',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathMatches(String pattern,
|
||||
{bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.matches(
|
||||
property: r'defaultAppStoragePath',
|
||||
wildcard: pattern,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathIsEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'defaultAppStoragePath',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultAppStoragePathIsNotEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
property: r'defaultAppStoragePath',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
defaultDoubleTapToSkipLengthIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
|
|
@ -6297,13 +6323,6 @@ extension SettingsQueryObject
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition> cookiesListElement(
|
||||
FilterQuery<Cookie> q) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.object(q, r'cookiesList');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterFilterCondition>
|
||||
filterScanlatorListElement(FilterQuery<FilterScanlator> q) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
|
|
@ -6652,6 +6671,19 @@ extension SettingsQuerySortBy on QueryBuilder<Settings, Settings, QSortBy> {
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> sortByDefaultAppStoragePath() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'defaultAppStoragePath', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy>
|
||||
sortByDefaultAppStoragePathDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'defaultAppStoragePath', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy>
|
||||
sortByDefaultDoubleTapToSkipLength() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
|
|
@ -7439,6 +7471,19 @@ extension SettingsQuerySortThenBy
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy> thenByDefaultAppStoragePath() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'defaultAppStoragePath', Sort.asc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy>
|
||||
thenByDefaultAppStoragePathDesc() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addSortBy(r'defaultAppStoragePath', Sort.desc);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QAfterSortBy>
|
||||
thenByDefaultDoubleTapToSkipLength() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
|
|
@ -8130,6 +8175,14 @@ extension SettingsQueryWhereDistinct
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QDistinct> distinctByDefaultAppStoragePath(
|
||||
{bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addDistinctBy(r'defaultAppStoragePath',
|
||||
caseSensitive: caseSensitive);
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, Settings, QDistinct>
|
||||
distinctByDefaultDoubleTapToSkipLength() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
|
|
@ -8571,13 +8624,6 @@ extension SettingsQueryProperty
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, List<Cookie>?, QQueryOperations>
|
||||
cookiesListProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'cookiesList');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, bool?, QQueryOperations> cropBordersProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'cropBorders');
|
||||
|
|
@ -8590,6 +8636,13 @@ extension SettingsQueryProperty
|
|||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, String?, QQueryOperations>
|
||||
defaultAppStoragePathProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addPropertyName(r'defaultAppStoragePath');
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Settings, int?, QQueryOperations>
|
||||
defaultDoubleTapToSkipLengthProperty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
|
|
@ -10670,386 +10723,6 @@ extension ChapterPageIndexQueryObject
|
|||
// coverage:ignore-file
|
||||
// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types
|
||||
|
||||
const CookieSchema = Schema(
|
||||
name: r'Cookie',
|
||||
id: -4750069831156363626,
|
||||
properties: {
|
||||
r'cookie': PropertySchema(
|
||||
id: 0,
|
||||
name: r'cookie',
|
||||
type: IsarType.string,
|
||||
),
|
||||
r'idSource': PropertySchema(
|
||||
id: 1,
|
||||
name: r'idSource',
|
||||
type: IsarType.string,
|
||||
)
|
||||
},
|
||||
estimateSize: _cookieEstimateSize,
|
||||
serialize: _cookieSerialize,
|
||||
deserialize: _cookieDeserialize,
|
||||
deserializeProp: _cookieDeserializeProp,
|
||||
);
|
||||
|
||||
int _cookieEstimateSize(
|
||||
Cookie object,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
var bytesCount = offsets.last;
|
||||
{
|
||||
final value = object.cookie;
|
||||
if (value != null) {
|
||||
bytesCount += 3 + value.length * 3;
|
||||
}
|
||||
}
|
||||
{
|
||||
final value = object.idSource;
|
||||
if (value != null) {
|
||||
bytesCount += 3 + value.length * 3;
|
||||
}
|
||||
}
|
||||
return bytesCount;
|
||||
}
|
||||
|
||||
void _cookieSerialize(
|
||||
Cookie object,
|
||||
IsarWriter writer,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
writer.writeString(offsets[0], object.cookie);
|
||||
writer.writeString(offsets[1], object.idSource);
|
||||
}
|
||||
|
||||
Cookie _cookieDeserialize(
|
||||
Id id,
|
||||
IsarReader reader,
|
||||
List<int> offsets,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
final object = Cookie(
|
||||
cookie: reader.readStringOrNull(offsets[0]),
|
||||
idSource: reader.readStringOrNull(offsets[1]),
|
||||
);
|
||||
return object;
|
||||
}
|
||||
|
||||
P _cookieDeserializeProp<P>(
|
||||
IsarReader reader,
|
||||
int propertyId,
|
||||
int offset,
|
||||
Map<Type, List<int>> allOffsets,
|
||||
) {
|
||||
switch (propertyId) {
|
||||
case 0:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
case 1:
|
||||
return (reader.readStringOrNull(offset)) as P;
|
||||
default:
|
||||
throw IsarError('Unknown property with id $propertyId');
|
||||
}
|
||||
}
|
||||
|
||||
extension CookieQueryFilter on QueryBuilder<Cookie, Cookie, QFilterCondition> {
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
property: r'cookie',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||
property: r'cookie',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieEqualTo(
|
||||
String? value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'cookie',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieGreaterThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'cookie',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieLessThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'cookie',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieBetween(
|
||||
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'cookie',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieStartsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.startsWith(
|
||||
property: r'cookie',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieEndsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.endsWith(
|
||||
property: r'cookie',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieContains(
|
||||
String value,
|
||||
{bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.contains(
|
||||
property: r'cookie',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieMatches(
|
||||
String pattern,
|
||||
{bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.matches(
|
||||
property: r'cookie',
|
||||
wildcard: pattern,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieIsEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'cookie',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> cookieIsNotEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
property: r'cookie',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceIsNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNull(
|
||||
property: r'idSource',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceIsNotNull() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(const FilterCondition.isNotNull(
|
||||
property: r'idSource',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceEqualTo(
|
||||
String? value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'idSource',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceGreaterThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
include: include,
|
||||
property: r'idSource',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceLessThan(
|
||||
String? value, {
|
||||
bool include = false,
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.lessThan(
|
||||
include: include,
|
||||
property: r'idSource',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceBetween(
|
||||
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'idSource',
|
||||
lower: lower,
|
||||
includeLower: includeLower,
|
||||
upper: upper,
|
||||
includeUpper: includeUpper,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceStartsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.startsWith(
|
||||
property: r'idSource',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceEndsWith(
|
||||
String value, {
|
||||
bool caseSensitive = true,
|
||||
}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.endsWith(
|
||||
property: r'idSource',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceContains(
|
||||
String value,
|
||||
{bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.contains(
|
||||
property: r'idSource',
|
||||
value: value,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceMatches(
|
||||
String pattern,
|
||||
{bool caseSensitive = true}) {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.matches(
|
||||
property: r'idSource',
|
||||
wildcard: pattern,
|
||||
caseSensitive: caseSensitive,
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceIsEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.equalTo(
|
||||
property: r'idSource',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
QueryBuilder<Cookie, Cookie, QAfterFilterCondition> idSourceIsNotEmpty() {
|
||||
return QueryBuilder.apply(this, (query) {
|
||||
return query.addFilterCondition(FilterCondition.greaterThan(
|
||||
property: r'idSource',
|
||||
value: '',
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
extension CookieQueryObject on QueryBuilder<Cookie, Cookie, QFilterCondition> {}
|
||||
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: duplicate_ignore, non_constant_identifier_names, constant_identifier_names, invalid_use_of_protected_member, unnecessary_cast, prefer_const_constructors, lines_longer_than_80_chars, require_trailing_commas, inference_failure_on_function_invocation, unnecessary_parenthesis, unnecessary_raw_strings, unnecessary_null_checks, join_return_with_assignment, prefer_final_locals, avoid_js_rounded_ints, avoid_positional_boolean_parameters, always_specify_types
|
||||
|
||||
const PersonalReaderModeSchema = Schema(
|
||||
name: r'PersonalReaderMode',
|
||||
id: -1072936262658804338,
|
||||
|
|
|
|||
|
|
@ -152,7 +152,6 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage> {
|
|||
language: _firstVid.audios?.first.label));
|
||||
|
||||
final ValueNotifier<double> _playbackSpeed = ValueNotifier(1.0);
|
||||
bool _seekToCurrentPosition = true;
|
||||
bool _initSubtitle = true;
|
||||
final ValueNotifier<bool> _enterFullScreen = ValueNotifier(false);
|
||||
late final ValueNotifier<Duration> _currentPosition =
|
||||
|
|
@ -166,19 +165,14 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage> {
|
|||
final bool _isDesktop =
|
||||
Platform.isWindows || Platform.isMacOS || Platform.isLinux;
|
||||
|
||||
late StreamSubscription<Duration> _currentPositionSub =
|
||||
late final StreamSubscription<Duration> _currentPositionSub =
|
||||
_player.stream.position.listen(
|
||||
(position) async {
|
||||
if (_seekToCurrentPosition && _currentPosition.value != Duration.zero) {
|
||||
await _player.stream.buffer.first;
|
||||
_player.seek(_currentPosition.value);
|
||||
_isCompleted.value = _player.state.duration.inSeconds -
|
||||
_currentPosition.value.inSeconds <=
|
||||
10;
|
||||
_seekToCurrentPosition = false;
|
||||
} else {
|
||||
_currentPosition.value = position;
|
||||
}
|
||||
_isCompleted.value =
|
||||
_player.state.duration.inSeconds - _currentPosition.value.inSeconds <=
|
||||
10;
|
||||
_currentPosition.value = position;
|
||||
|
||||
if ((_firstVid.subtitles ?? []).isNotEmpty) {
|
||||
if (_initSubtitle) {
|
||||
try {
|
||||
|
|
@ -205,6 +199,7 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage> {
|
|||
@override
|
||||
void initState() {
|
||||
_setCurrentPosition(true);
|
||||
_seekToCurrentPosition();
|
||||
_currentPositionSub;
|
||||
_currentTotalDurationSub;
|
||||
_player.open(Media(_video.value!.videoTrack!.id,
|
||||
|
|
@ -214,6 +209,15 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage> {
|
|||
super.initState();
|
||||
}
|
||||
|
||||
void _seekToCurrentPosition({Duration? duration}) async {
|
||||
await Future.doWhile(() async {
|
||||
await Future.delayed(const Duration(milliseconds: 300));
|
||||
await _player.stream.buffer.first;
|
||||
_player.seek(duration ?? _streamController.geTCurrentPosition());
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
void _initAniSkip() async {
|
||||
await _player.stream.buffer.first;
|
||||
_streamController.getAniSkipResults((result) {
|
||||
|
|
@ -327,23 +331,7 @@ class _AnimeStreamPageState extends riv.ConsumerState<AnimeStreamPage> {
|
|||
_player.open(
|
||||
Media(quality.videoTrack!.id, httpHeaders: quality.headers));
|
||||
}
|
||||
_seekToCurrentPosition = true;
|
||||
_currentPositionSub = _player.stream.position.listen(
|
||||
(position) async {
|
||||
if (_seekToCurrentPosition &&
|
||||
_currentPosition.value != Duration.zero) {
|
||||
await _player.stream.buffer.first;
|
||||
_player.seek(_currentPosition.value);
|
||||
try {
|
||||
_player.setSubtitleTrack(_subtitle.value!);
|
||||
} catch (_) {}
|
||||
|
||||
_seekToCurrentPosition = false;
|
||||
} else {
|
||||
_currentPosition.value = position;
|
||||
}
|
||||
},
|
||||
);
|
||||
_seekToCurrentPosition(duration: _currentPosition.value);
|
||||
Navigator.pop(context);
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'dart:math';
|
||||
import 'package:flutter/material.dart';
|
||||
|
|
@ -105,12 +104,6 @@ class CustomSeekBarState extends State<CustomSeekBar> {
|
|||
widget.onSeekEnd?.call(Duration(
|
||||
milliseconds: value.toInt() - position.inMilliseconds));
|
||||
widget.player.seek(Duration(milliseconds: value.toInt()));
|
||||
await Future.delayed(const Duration(milliseconds: 500));
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
tempPosition = null;
|
||||
});
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -51,3 +51,37 @@ SourcePreference getSourcePreferenceEntry(String key, int sourceId) {
|
|||
|
||||
return sourcePreference;
|
||||
}
|
||||
|
||||
String getSourcePreferenceStringValue(
|
||||
int sourceId, String key, String defaultValue) {
|
||||
SourcePreferenceStringValue? sourcePreferenceStringValue = isar
|
||||
.sourcePreferenceStringValues
|
||||
.filter()
|
||||
.sourceIdEqualTo(sourceId)
|
||||
.keyEqualTo(key)
|
||||
.findFirstSync();
|
||||
if (sourcePreferenceStringValue == null) {
|
||||
setSourcePreferenceStringValue(sourceId, key, defaultValue);
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
return sourcePreferenceStringValue.value ?? "";
|
||||
}
|
||||
|
||||
void setSourcePreferenceStringValue(int sourceId, String key, String value) {
|
||||
final sourcePref = isar.sourcePreferenceStringValues
|
||||
.filter()
|
||||
.sourceIdEqualTo(sourceId)
|
||||
.keyEqualTo(key)
|
||||
.findFirstSync();
|
||||
isar.writeTxnSync(() {
|
||||
if (sourcePref != null) {
|
||||
isar.sourcePreferenceStringValues.putSync(sourcePref..value = value);
|
||||
} else {
|
||||
isar.sourcePreferenceStringValues.putSync(SourcePreferenceStringValue()
|
||||
..key = key
|
||||
..sourceId = sourceId
|
||||
..value = value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ part of 'fetch_anime_sources.dart';
|
|||
// **************************************************************************
|
||||
|
||||
String _$fetchAnimeSourcesListHash() =>
|
||||
r'3f9cf47efce8e6e207c59e0d936727959c1fe982';
|
||||
r'fce156ad85528a46bf28390f783a04ca2768e92c';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ part of 'fetch_manga_sources.dart';
|
|||
// **************************************************************************
|
||||
|
||||
String _$fetchMangaSourcesListHash() =>
|
||||
r'a74557098c49877942a296abe110fb6ef1dce580';
|
||||
r'ec5b2fa05b41e73485460fbe1456f33d40c8fda8';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
// import 'package:mangayomi/eval/model/m_bridge.dart';
|
||||
import 'package:mangayomi/eval/model/m_bridge.dart';
|
||||
import 'package:mangayomi/eval/model/m_chapter.dart';
|
||||
import 'package:mangayomi/eval/model/m_manga.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
|
|
@ -22,7 +23,7 @@ Future<dynamic> updateMangaDetail(UpdateMangaDetailRef ref,
|
|||
getManga = await ref
|
||||
.watch(getDetailProvider(url: manga.link!, source: source!).future);
|
||||
} catch (e) {
|
||||
// botToast(e.toString());
|
||||
botToast(e.toString());
|
||||
return;
|
||||
}
|
||||
manga
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'auto_backup.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$checkAndBackupHash() => r'fad714bbc0d37442d4f72fd98d91fcaf72166284';
|
||||
String _$checkAndBackupHash() => r'8d15908fe42ebd4d64ed4cc309fb4b0918ee14ac';
|
||||
|
||||
/// See also [checkAndBackup].
|
||||
@ProviderFor(checkAndBackup)
|
||||
|
|
@ -56,7 +56,7 @@ final backupFrequencyOptionsStateProvider = AutoDisposeNotifierProvider<
|
|||
|
||||
typedef _$BackupFrequencyOptionsState = AutoDisposeNotifier<List<int>>;
|
||||
String _$autoBackupLocationStateHash() =>
|
||||
r'87feb5475d47a77da4e87fa62e551b785fa1e7ba';
|
||||
r'db6d5a8a0b74ea61cd8569e0486d3a4720393ed1';
|
||||
|
||||
/// See also [AutoBackupLocationState].
|
||||
@ProviderFor(AutoBackupLocationState)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'backup.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$doBackUpHash() => r'44abdf2cffcd6c6470234cd378f5b802a2aff7ba';
|
||||
String _$doBackUpHash() => r'5680593f7d0c457c9f4ae9ab26b94f3b9fb974f0';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
// ignore_for_file: depend_on_referenced_packages
|
||||
|
||||
import 'dart:convert';
|
||||
import 'dart:developer';
|
||||
import 'dart:io';
|
||||
import 'package:desktop_webview_window/desktop_webview_window.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
import 'package:mangayomi/services/cloudflare/cookie.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
import 'package:share_plus/share_plus.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
|
|
@ -54,6 +54,11 @@ class _MangaWebViewState extends ConsumerState<MangaWebView> {
|
|||
webview!
|
||||
..setBrightness(Brightness.dark)
|
||||
..launch(widget.url)
|
||||
..addOnUrlRequestCallback((url) async {
|
||||
final newCookie =
|
||||
await webview!.evaluateJavaScript("window.document.cookie;");
|
||||
log(newCookie.toString());
|
||||
})
|
||||
..onClose.whenComplete(() {
|
||||
Navigator.pop(context);
|
||||
});
|
||||
|
|
@ -217,7 +222,7 @@ class _MangaWebViewState extends ConsumerState<MangaWebView> {
|
|||
final ua = await controller.evaluateJavascript(
|
||||
source: "navigator.userAgent") ??
|
||||
"";
|
||||
await addCookie(widget.sourceId, url.toString(), ua);
|
||||
await MInterceptor.setCookie(url.toString(), ua);
|
||||
final canGoback = await controller.canGoBack();
|
||||
final canGoForward = await controller.canGoForward();
|
||||
final title = await controller.getTitle();
|
||||
|
|
@ -246,16 +251,16 @@ Future<String> getWebViewPath() async {
|
|||
);
|
||||
}
|
||||
|
||||
Future<String?> decodeHtml(Webview webview, {String? sourceId}) async {
|
||||
Future<String?> decodeHtml(Webview webview) async {
|
||||
try {
|
||||
final html = await webview
|
||||
.evaluateJavaScript("window.document.documentElement.outerHTML;");
|
||||
final ua = await webview.evaluateJavaScript("navigator.userAgent") ?? "";
|
||||
final newCookie =
|
||||
await webview.evaluateJavaScript("window.document.cookie;");
|
||||
if (newCookie != null && sourceId != null) {
|
||||
CookieState(idSource: sourceId)
|
||||
.set(jsonDecode(newCookie), ua.isNotEmpty ? jsonDecode(ua) : "");
|
||||
if (newCookie != null) {
|
||||
await MInterceptor.setCookie(
|
||||
jsonDecode(newCookie), ua.isNotEmpty ? jsonDecode(ua) : "");
|
||||
}
|
||||
|
||||
final res = jsonDecode(html!) as String;
|
||||
|
|
|
|||
|
|
@ -123,7 +123,8 @@ class StorageProvider {
|
|||
SettingsSchema,
|
||||
TrackPreferenceSchema,
|
||||
TrackSchema,
|
||||
SourcePreferenceSchema
|
||||
SourcePreferenceSchema,
|
||||
SourcePreferenceStringValueSchema
|
||||
], directory: dir!.path, name: "mangayomiDb", inspector: inspector!);
|
||||
|
||||
if (isar.settings.filter().idEqualTo(227).isEmptySync()) {
|
||||
|
|
@ -133,6 +134,16 @@ class StorageProvider {
|
|||
},
|
||||
);
|
||||
}
|
||||
final settings = isar.settings.getSync(227);
|
||||
final getDefaultAppStoragePath = settings?.defaultAppStoragePath;
|
||||
if (getDefaultAppStoragePath == null) {
|
||||
final path = (await getDefaultDirectory())!.path;
|
||||
isar.writeTxnSync(
|
||||
() {
|
||||
isar.settings.putSync(settings!..defaultAppStoragePath = path);
|
||||
},
|
||||
);
|
||||
}
|
||||
return isar;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:math';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
|
||||
class DoodExtractor {
|
||||
|
|
@ -9,7 +10,7 @@ class DoodExtractor {
|
|||
String? quality,
|
||||
bool redirect = true,
|
||||
}) async {
|
||||
final http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
final newQuality = quality ?? ('Doodstream ${redirect ? ' mirror' : ''}');
|
||||
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:js_packer/js_packer.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
import 'package:mangayomi/utils/xpath_selector.dart';
|
||||
|
||||
class FilemoonExtractor {
|
||||
final http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
|
||||
Future<List<Video>> videosFromUrl(
|
||||
String url, String prefix, String suffix) async {
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
import 'dart:convert';
|
||||
import 'package:html/dom.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/eval/model/m_bridge.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:html/parser.dart' as parser;
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
|
||||
class GogoCdnExtractor {
|
||||
final http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
final JsonCodec json = const JsonCodec();
|
||||
|
||||
Future<List<Video>> videosFromUrl(String serverUrl) async {
|
||||
|
|
|
|||
|
|
@ -1,19 +1,20 @@
|
|||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:js_packer/js_packer.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
import 'package:mangayomi/utils/xpath_selector.dart';
|
||||
|
||||
class Mp4uploadExtractor {
|
||||
static final RegExp qualityRegex = RegExp(r'\WHEIGHT=(\d+)');
|
||||
static const String referer = "https://mp4upload.com/";
|
||||
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
Future<List<Video>> videosFromUrl(String url, Map<String, String> headers,
|
||||
{String prefix = '', String suffix = ''}) async {
|
||||
final newHeaders = Map<String, String>.from(headers)
|
||||
..addAll({'referer': referer});
|
||||
try {
|
||||
final response = await http.get(Uri.parse(url), headers: newHeaders);
|
||||
final response = await client.get(Uri.parse(url), headers: newHeaders);
|
||||
String script = "";
|
||||
|
||||
final scriptElementWithEval = xpathSelector(response.body)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:async';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
|
||||
class MyStreamExtractor {
|
||||
|
|
@ -8,7 +9,7 @@ class MyStreamExtractor {
|
|||
String url, Map<String, String> headers) async {
|
||||
final host = url.substringBefore("/watch");
|
||||
|
||||
final client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
|
||||
try {
|
||||
final response = await client.get(Uri.parse(url), headers: headers);
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
import 'package:http/http.dart' as http;
|
||||
import 'package:html/parser.dart' show parse;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
|
||||
class MytvExtractor {
|
||||
final http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
|
||||
Future<List<Video>> videosFromUrl(String url) async {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
import 'package:http/http.dart' as http;
|
||||
import 'package:html/parser.dart' show parse;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
|
||||
class OkruExtractor {
|
||||
final http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
|
||||
String fixQuality(String quality) {
|
||||
final qualities = {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
import 'package:http/http.dart' as http;
|
||||
import 'package:html/parser.dart' as parser;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
|
||||
class SendvidExtractor {
|
||||
final http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
final Map<String, String> headers;
|
||||
|
||||
SendvidExtractor(this.headers);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
|
||||
class SibnetExtractor {
|
||||
final http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
|
||||
Future<List<Video>> videosFromUrl(String url, {String prefix = ""}) async {
|
||||
List<Video> videoList = [];
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/others.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
|
||||
class StreamlareExtractor {
|
||||
final http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
|
||||
Future<List<Video>> videosFromUrl(String url,
|
||||
{String prefix = "", String suffix = ""}) async {
|
||||
|
|
|
|||
|
|
@ -1,17 +1,19 @@
|
|||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:html/parser.dart' show parse;
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
|
||||
class StreamTapeExtractor {
|
||||
Future<List<Video>> videosFromUrl(String url,
|
||||
{String quality = "StreamTape"}) async {
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
try {
|
||||
const baseUrl = "https://streamtape.com/e/";
|
||||
final newUrl =
|
||||
!url.startsWith(baseUrl) ? "$baseUrl${url.split("/")[4]}" : url;
|
||||
|
||||
final response = await http.Client().get(Uri.parse(newUrl));
|
||||
final response = await client.get(Uri.parse(newUrl));
|
||||
final document = parse(response.body);
|
||||
|
||||
const targetLine = "document.getElementById('robotlink')";
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:js_packer/js_packer.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/others.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
import 'package:mangayomi/utils/xpath_selector.dart';
|
||||
|
||||
class StreamWishExtractor {
|
||||
final http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
final Map<String, String> headers = {};
|
||||
|
||||
Future<List<Video>> videosFromUrl(String url, String prefix) async {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
import 'package:mangayomi/utils/xpath_selector.dart';
|
||||
|
||||
class VidBomExtractor {
|
||||
final http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
|
||||
Future<List<Video>> videosFromUrl(String url) async {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
import 'package:mangayomi/utils/xpath_selector.dart';
|
||||
|
||||
class VoeExtractor {
|
||||
http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
|
||||
Future<List<Video>> videosFromUrl(String url, String? quality) async {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
import 'package:http/http.dart' as http;
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/models/video.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
import 'package:mangayomi/utils/extensions/string_extensions.dart';
|
||||
import 'package:mangayomi/utils/xpath_selector.dart';
|
||||
|
||||
class YourUploadExtractor {
|
||||
http.Client client = http.Client();
|
||||
final InterceptedClient client = MInterceptor.init();
|
||||
|
||||
Future<List<Video>> videosFromUrl(String url, Map<String, String> headers,
|
||||
{String name = "YourUpload", String prefix = ""}) async {
|
||||
|
|
|
|||
|
|
@ -1,49 +0,0 @@
|
|||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/settings.dart';
|
||||
import 'package:flutter_inappwebview/flutter_inappwebview.dart'
|
||||
as flutter_inappwebview;
|
||||
|
||||
class CookieState {
|
||||
String? idSource;
|
||||
CookieState({required String idSource});
|
||||
|
||||
String get() {
|
||||
final cookiesList = isar.settings.getSync(227)!.cookiesList ?? [];
|
||||
return cookiesList
|
||||
.firstWhere(
|
||||
(element) => element.idSource == idSource,
|
||||
orElse: () => Cookie(cookie: ""),
|
||||
)
|
||||
.cookie!;
|
||||
}
|
||||
|
||||
void set(String newCookie, String ua) {
|
||||
final settings = isar.settings.getSync(227);
|
||||
List<Cookie>? cookieList = [];
|
||||
for (var cookie in settings!.cookiesList ?? []) {
|
||||
if (cookie.idSource != idSource) {
|
||||
cookieList.add(cookie);
|
||||
}
|
||||
}
|
||||
|
||||
cookieList.add(Cookie()
|
||||
..idSource = idSource
|
||||
..cookie = newCookie);
|
||||
isar.writeTxnSync(() => isar.settings.putSync(settings
|
||||
..cookiesList = cookieList
|
||||
..userAgent = ua));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> addCookie(String sourceId, String url, String ua) async {
|
||||
flutter_inappwebview.CookieManager cookieManager =
|
||||
flutter_inappwebview.CookieManager.instance();
|
||||
|
||||
final cookie = (await cookieManager.getCookie(
|
||||
url: Uri.parse(url), name: "cf_clearance"));
|
||||
if (cookie != null) {
|
||||
final newCookie = "${cookie.name}=${cookie.value}";
|
||||
|
||||
CookieState(idSource: sourceId).set(newCookie, ua);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'dart:typed_data';
|
||||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/eval/model/m_provider.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
|
|
@ -68,9 +69,9 @@ Future<GetChapterPagesModel> getChapterPages(
|
|||
|
||||
final runtime = runtimeEval(bytecode);
|
||||
|
||||
var res = await runtime.executeLib('package:mangayomi/main.dart', 'main');
|
||||
pageUrls = (await (res as MProvider)
|
||||
.getPageList(source.toMSource(), chapter.url!));
|
||||
var res = await runtime.executeLib('package:mangayomi/main.dart', 'main',
|
||||
[$MSource.wrap(source.toMSource())]);
|
||||
pageUrls = (await (res as MProvider).getPageList(chapter.url!));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'get_chapter_pages.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$getChapterPagesHash() => r'ebd047f73e22df675982127c901b2d386873e208';
|
||||
String _$getChapterPagesHash() => r'843f224e365aafe2f3ca124a07254a1ff1d153ae';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:async';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/model/m_manga.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/eval/model/m_provider.dart';
|
||||
|
|
@ -25,9 +26,10 @@ Future<MManga> getDetail(
|
|||
|
||||
final runtime = runtimeEval(bytecode);
|
||||
|
||||
var res = await runtime.executeLib('package:mangayomi/main.dart', 'main');
|
||||
var res = await runtime.executeLib('package:mangayomi/main.dart', 'main',
|
||||
[$MSource.wrap(source.toMSource())]);
|
||||
try {
|
||||
mangadetail = await (res as MProvider).getDetail(source.toMSource(), url);
|
||||
mangadetail = await (res as MProvider).getDetail(url);
|
||||
} catch (e) {
|
||||
throw Exception(e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'get_detail.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$getDetailHash() => r'683f6a473aca093cc35d5d9756ae9cbdfb302f88';
|
||||
String _$getDetailHash() => r'003f3f5c25352c114ba768c88eea6656964fd715';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/eval/model/m_provider.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
|
|
@ -14,9 +15,10 @@ List<dynamic> getFilterList({required Source source}) {
|
|||
|
||||
final runtime = runtimeEval(bytecode);
|
||||
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main');
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main',
|
||||
[$MSource.wrap(source.toMSource())]);
|
||||
filterList = (res as MProvider)
|
||||
.getFilterList(source.toMSource())
|
||||
.getFilterList()
|
||||
.map((e) => e is $Value ? e.$reified : e)
|
||||
.toList();
|
||||
} catch (_) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'dart:async';
|
||||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/model/m_pages.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/eval/model/m_provider.dart';
|
||||
|
|
@ -22,9 +23,9 @@ Future<MPages?> getLatestUpdates(
|
|||
|
||||
final runtime = runtimeEval(bytecode);
|
||||
|
||||
var res = await runtime.executeLib('package:mangayomi/main.dart', 'main');
|
||||
latestUpdatesManga =
|
||||
await (res as MProvider).getLatestUpdates(source.toMSource(), page);
|
||||
var res = await runtime.executeLib('package:mangayomi/main.dart', 'main',
|
||||
[$MSource.wrap(source.toMSource())]);
|
||||
latestUpdatesManga = await (res as MProvider).getLatestUpdates(page);
|
||||
} catch (e) {
|
||||
throw Exception(e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'get_latest_updates.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$getLatestUpdatesHash() => r'19ccde133a23148dd90f29110b5f9804cd2cb942';
|
||||
String _$getLatestUpdatesHash() => r'288b2ce3b2e79c1924c8e2a312282900fd9e645f';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'dart:async';
|
||||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/model/m_pages.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/eval/model/m_provider.dart';
|
||||
|
|
@ -22,9 +23,9 @@ Future<MPages?> getPopular(
|
|||
|
||||
final runtime = runtimeEval(bytecode);
|
||||
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main');
|
||||
popularManga =
|
||||
await (res as MProvider).getPopular(source.toMSource(), page);
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main',
|
||||
[$MSource.wrap(source.toMSource())]);
|
||||
popularManga = await (res as MProvider).getPopular(page);
|
||||
} catch (e) {
|
||||
throw Exception(e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'get_popular.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$getPopularHash() => r'9eb971f8ca52854efe7431010b93a998e425f9da';
|
||||
String _$getPopularHash() => r'd78a01ea5854ad3f592e713e4f4052929774e78e';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:dart_eval/dart_eval_bridge.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/eval/model/m_provider.dart';
|
||||
import 'package:mangayomi/eval/model/source_preference.dart';
|
||||
|
|
@ -13,9 +14,10 @@ List<SourcePreference> getSourcePreference({required Source source}) {
|
|||
|
||||
final runtime = runtimeEval(bytecode);
|
||||
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main');
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main',
|
||||
[$MSource.wrap(source.toMSource())]);
|
||||
sourcePreference = (res as MProvider)
|
||||
.getSourcePreferences(source.toMSource())
|
||||
.getSourcePreferences()
|
||||
.map((e) => (e is $Value ? e.$reified : e) as SourcePreference)
|
||||
.toList();
|
||||
} catch (_) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/model/m_provider.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/messages/generated.dart';
|
||||
|
|
@ -38,13 +39,13 @@ Future<(List<Video>, bool, String?)> getVideoList(
|
|||
}
|
||||
await Rinf.finalize();
|
||||
await Rinf.initialize();
|
||||
final bytecode =
|
||||
compilerEval(useTestSourceCode ? testSourceCode : source.sourceCode!);
|
||||
final bytecode =
|
||||
compilerEval(useTestSourceCode ? testSourceCode : source.sourceCode!);
|
||||
|
||||
final runtime = runtimeEval(bytecode);
|
||||
final runtime = runtimeEval(bytecode);
|
||||
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main');
|
||||
final dd = (await (res as MProvider)
|
||||
.getVideoList(source.toMSource(), episode.url!));
|
||||
return (dd, false, null);
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main',
|
||||
[$MSource.wrap(source.toMSource())]);
|
||||
final dd = (await (res as MProvider).getVideoList(episode.url!));
|
||||
return (dd, false, null);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'get_video_list.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$getVideoListHash() => r'd1e21cd01a2d2eda2050c199f255eb0502d67fad';
|
||||
String _$getVideoListHash() => r'c7e36c244ebbac9dad01945be0e2ed5712236855';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import 'package:desktop_webview_window/desktop_webview_window.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
|
||||
import 'package:mangayomi/modules/webview/webview.dart';
|
||||
import 'package:mangayomi/services/cloudflare/cookie.dart';
|
||||
import 'package:mangayomi/services/http/interceptor.dart';
|
||||
|
||||
Future<String> cloudflareBypass(
|
||||
{required String url, required String sourceId}) async {
|
||||
|
|
@ -24,7 +24,7 @@ Future<String> cloudflareBypass(
|
|||
|
||||
await Future.doWhile(() async {
|
||||
await Future.delayed(const Duration(seconds: 1));
|
||||
html = await decodeHtml(webview, sourceId: sourceId);
|
||||
html = await decodeHtml(webview);
|
||||
if (html == null ||
|
||||
html!.contains("Just a moment") ||
|
||||
html!.contains("challenges.cloudflare.com")) {
|
||||
|
|
@ -67,7 +67,7 @@ Future<String> cloudflareBypass(
|
|||
}
|
||||
return true;
|
||||
});
|
||||
await addCookie(sourceId, url, ua);
|
||||
await MInterceptor.setCookie(url, ua);
|
||||
}
|
||||
return html!;
|
||||
}
|
||||
}
|
||||
150
lib/services/http/interceptor.dart
Normal file
150
lib/services/http/interceptor.dart
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:http_interceptor/http_interceptor.dart';
|
||||
import 'package:mangayomi/eval/model/m_bridge.dart';
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'package:cookie_jar/cookie_jar.dart' as cookie_jar;
|
||||
import 'package:mangayomi/eval/model/m_source.dart';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:flutter_inappwebview/flutter_inappwebview.dart'
|
||||
as flutter_inappwebview;
|
||||
import 'package:mangayomi/models/settings.dart';
|
||||
|
||||
class MInterceptor {
|
||||
static final _cookieJar = cookie_jar.PersistCookieJar(
|
||||
ignoreExpires: true,
|
||||
storage: cookie_jar.FileStorage(
|
||||
"${isar.settings.getSync(227)!.defaultAppStoragePath}.cookies/"));
|
||||
MInterceptor({required String idSource});
|
||||
|
||||
static InterceptedClient init({MSource? source}) {
|
||||
return InterceptedClient.build(interceptors: [
|
||||
if (source?.hasCloudflare ?? false) ...[MCookieManager(_cookieJar)],
|
||||
LoggerInterceptor()
|
||||
]);
|
||||
}
|
||||
|
||||
static Future<void> setCookie(String url, String ua) async {
|
||||
flutter_inappwebview.CookieManager cookieManager =
|
||||
flutter_inappwebview.CookieManager.instance();
|
||||
|
||||
final cookies = (await cookieManager.getCookies(url: Uri.parse(url)))
|
||||
.map((e) => "${e.name}=${e.value}")
|
||||
.toList();
|
||||
|
||||
if (cookies.isNotEmpty) {
|
||||
for (final cookie in cookies) {
|
||||
await _cookieJar.saveFromResponse(
|
||||
Uri.parse(url),
|
||||
[Cookie.fromSetCookieValue(cookie)],
|
||||
);
|
||||
}
|
||||
final settings = isar.settings.getSync(227);
|
||||
|
||||
isar.writeTxnSync(() => isar.settings.putSync(settings!..userAgent = ua));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class MCookieManager extends InterceptorContract {
|
||||
MCookieManager(this.cookieJar);
|
||||
|
||||
final cookie_jar.CookieJar cookieJar;
|
||||
static String getCookies(List<Cookie> cookies) {
|
||||
cookies.sort((a, b) {
|
||||
if (a.path == null && b.path == null) {
|
||||
return 0;
|
||||
} else if (a.path == null) {
|
||||
return -1;
|
||||
} else if (b.path == null) {
|
||||
return 1;
|
||||
} else {
|
||||
return b.path!.length.compareTo(a.path!.length);
|
||||
}
|
||||
});
|
||||
return cookies.map((cookie) => '${cookie.name}=${cookie.value}').join('; ');
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BaseRequest> interceptRequest({
|
||||
required BaseRequest request,
|
||||
}) async {
|
||||
final cookies = await cookieJar.loadForRequest(request.url);
|
||||
final previousCookies = request.headers[HttpHeaders.cookieHeader];
|
||||
final userAgent = isar.settings.getSync(227)!.userAgent!;
|
||||
final newCookies = getCookies([
|
||||
...?previousCookies
|
||||
?.split(';')
|
||||
.where((e) => e.isNotEmpty)
|
||||
.map((c) => Cookie.fromSetCookieValue(c)),
|
||||
...cookies,
|
||||
]);
|
||||
request.headers[HttpHeaders.cookieHeader] =
|
||||
newCookies.isNotEmpty ? newCookies : "";
|
||||
request.headers[HttpHeaders.userAgentHeader] = userAgent;
|
||||
return request;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BaseResponse> interceptResponse({
|
||||
required BaseResponse response,
|
||||
}) async {
|
||||
await _saveCookies(response);
|
||||
return response;
|
||||
}
|
||||
|
||||
Future<void> _saveCookies(BaseResponse response) async {
|
||||
final setCookies = response.headers[HttpHeaders.setCookieHeader];
|
||||
if (setCookies == null || setCookies.isEmpty) {
|
||||
return;
|
||||
}
|
||||
final List<Cookie> cookies = setCookies
|
||||
.split(RegExp('(?<=)(,)(?=[^;]+?=)'))
|
||||
.where((cookie) => cookie.isNotEmpty)
|
||||
.map((str) => Cookie.fromSetCookieValue(str))
|
||||
.toList();
|
||||
final statusCode = response.statusCode;
|
||||
final isRedirectRequest = statusCode >= 300 && statusCode < 400;
|
||||
final location = response.headers[HttpHeaders.locationHeader] ?? "";
|
||||
final originalUri = response.request!.url;
|
||||
final realUri = originalUri
|
||||
.resolveUri(isRedirectRequest ? Uri.parse(location) : originalUri);
|
||||
await cookieJar.saveFromResponse(realUri, cookies);
|
||||
if (isRedirectRequest && location.isNotEmpty) {
|
||||
await Future.wait(
|
||||
[cookieJar.saveFromResponse(originalUri.resolve(location), cookies)],
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class LoggerInterceptor extends InterceptorContract {
|
||||
@override
|
||||
Future<BaseRequest> interceptRequest({
|
||||
required BaseRequest request,
|
||||
}) async {
|
||||
if (kDebugMode) {
|
||||
print('----- Request -----');
|
||||
print(request.toString());
|
||||
print(request.headers.toString());
|
||||
}
|
||||
return request;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<BaseResponse> interceptResponse({
|
||||
required BaseResponse response,
|
||||
}) async {
|
||||
final cloudflare = [403, 503].contains(response.statusCode) &&
|
||||
["cloudflare-nginx", "cloudflare"].contains(response.headers["server"]);
|
||||
if (kDebugMode) {
|
||||
print('----- Response -----');
|
||||
print(
|
||||
"${response.request?.method}: ${response.request?.url}, statusCode: ${response.statusCode} ${cloudflare ? "Failed to bypass Cloudflare" : ""}");
|
||||
}
|
||||
if (cloudflare) {
|
||||
botToast("${response.statusCode} Failed to bypass Cloudflare");
|
||||
}
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/model/filter.dart';
|
||||
import 'package:mangayomi/eval/model/m_pages.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
|
|
@ -18,10 +19,11 @@ Future<MPages?> search(SearchRef ref,
|
|||
final bytecode =
|
||||
compilerEval(useTestSourceCode ? testSourceCode : source.sourceCode!);
|
||||
final runtime = runtimeEval(bytecode);
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main');
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main',
|
||||
[$MSource.wrap(source.toMSource())]);
|
||||
try {
|
||||
manga = await (res as MProvider)
|
||||
.search(source.toMSource(), query, page, FilterList(filterList));
|
||||
manga =
|
||||
await (res as MProvider).search(query, page, FilterList(filterList));
|
||||
} catch (e) {
|
||||
throw Exception(e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'search.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$searchHash() => r'b2683242cc45e83f3946339d3490cad6488dd847';
|
||||
String _$searchHash() => r'685e379023d83ede702d76696d64fccb803e5549';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/model/filter.dart';
|
||||
import 'package:mangayomi/eval/model/m_pages.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
|
|
@ -20,10 +21,11 @@ Future<MPages?> search(
|
|||
final bytecode =
|
||||
compilerEval(useTestSourceCode ? testSourceCode : source.sourceCode!);
|
||||
final runtime = runtimeEval(bytecode);
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main');
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main',
|
||||
[$MSource.wrap(source.toMSource())]);
|
||||
try {
|
||||
manga = await (res as MProvider)
|
||||
.search(source.toMSource(), query, page, FilterList(filterList));
|
||||
manga =
|
||||
await (res as MProvider).search(query, page, FilterList(filterList));
|
||||
} catch (e) {
|
||||
throw Exception(e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import 'package:mangayomi/eval/bridge/m_source.dart';
|
||||
import 'package:mangayomi/eval/compiler/compiler.dart';
|
||||
import 'package:mangayomi/eval/model/m_provider.dart';
|
||||
import 'package:mangayomi/models/source.dart';
|
||||
|
|
@ -16,7 +17,8 @@ bool supportsLatest(SupportsLatestRef ref, {required Source source}) {
|
|||
|
||||
final runtime = runtimeEval(bytecode);
|
||||
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main');
|
||||
var res = runtime.executeLib('package:mangayomi/main.dart', 'main',
|
||||
[$MSource.wrap(source.toMSource())]);
|
||||
supportsLatest = (res as MProvider).supportsLatest;
|
||||
} catch (e) {
|
||||
supportsLatest = true;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'supports_latest.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$supportsLatestHash() => r'affdd0558a86dcdf8c40a9dba0fe6f4d053e9709';
|
||||
String _$supportsLatestHash() => r'96669da97ba75756371c0c1c50541ecfd68dd13e';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'myanimelist.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$myAnimeListHash() => r'ab694820166610c5ec7bb1c936527b4da73fb6d5';
|
||||
String _$myAnimeListHash() => r'bdbe57c0071039f20aa929fc9f320f130b4a4ae3';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
|
|
@ -21,57 +21,60 @@ import 'package:mangayomi/bridge_lib.dart';
|
|||
import 'dart:convert';
|
||||
|
||||
class TestSource extends MProvider {
|
||||
TestSource();
|
||||
TestSource({required this.source});
|
||||
|
||||
MSource source;
|
||||
|
||||
final Client client = Client(source);
|
||||
|
||||
@override
|
||||
bool get supportsLatest => true;
|
||||
|
||||
@override
|
||||
Future<MPages> getPopular(MSource source, int page) async {
|
||||
Future<MPages> getPopular(int page) async {
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MPages> getLatestUpdates(MSource source, int page) async {
|
||||
Future<MPages> getLatestUpdates(int page) async {
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MPages> search(
|
||||
MSource source, String query, int page, FilterList filterList) async {
|
||||
Future<MPages> search(String query, int page, FilterList filterList) async {
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
@override
|
||||
Future<MManga> getDetail(MSource source, String url) async {
|
||||
Future<MManga> getDetail(String url) async {
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
// For anime episode video list
|
||||
@override
|
||||
Future<List<MVideo>> getVideoList(MSource source, String url) async {
|
||||
Future<List<MVideo>> getVideoList(String url) async {
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
// For manga chapter pages
|
||||
@override
|
||||
Future<List<String>> getPageList(MSource source, String url) {
|
||||
Future<List<String>> getPageList(String url) {
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
@override
|
||||
List<dynamic> getFilterList(MSource source) {
|
||||
List<dynamic> getFilterList() {
|
||||
// TODO: implement
|
||||
}
|
||||
|
||||
@override
|
||||
List<dynamic> getSourcePreferences(MSource source) {
|
||||
List<dynamic> getSourcePreferences() {
|
||||
// TODO: implement
|
||||
}
|
||||
}
|
||||
|
||||
TestSource main() {
|
||||
return TestSource();
|
||||
TestSource main(MSource source) {
|
||||
return TestSource(source:source);
|
||||
}
|
||||
|
||||
''';
|
||||
|
|
|
|||
|
|
@ -1,7 +1,4 @@
|
|||
import 'dart:convert';
|
||||
import 'package:mangayomi/main.dart';
|
||||
import 'package:mangayomi/models/settings.dart';
|
||||
import 'package:mangayomi/services/cloudflare/cookie.dart';
|
||||
import 'package:mangayomi/sources/utils/utils.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
part 'headers.g.dart';
|
||||
|
|
@ -9,24 +6,13 @@ part 'headers.g.dart';
|
|||
@riverpod
|
||||
Map<String, String> headers(HeadersRef ref,
|
||||
{required String source, required String lang}) {
|
||||
final sourceM = getSource(lang, source);
|
||||
final mSource = getSource(lang, source);
|
||||
|
||||
if (sourceM == null) return {};
|
||||
|
||||
if (sourceM.headers!.isEmpty && !sourceM.hasCloudflare!) return {};
|
||||
|
||||
Map<String, String> newHeaders = {};
|
||||
if (sourceM.headers!.isNotEmpty) {
|
||||
final headers = jsonDecode(sourceM.headers!) as Map;
|
||||
newHeaders =
|
||||
headers.map((key, value) => MapEntry(key.toString(), value.toString()));
|
||||
Map<String, String> headers = {};
|
||||
if (mSource?.headers?.isNotEmpty ?? false) {
|
||||
headers = (jsonDecode(mSource!.headers!) as Map)
|
||||
.map((key, value) => MapEntry(key.toString(), value.toString()));
|
||||
}
|
||||
|
||||
if (sourceM.hasCloudflare!) {
|
||||
final userAgent = isar.settings.getSync(227)!.userAgent!;
|
||||
final cookie = CookieState(idSource: sourceM.id.toString()).get();
|
||||
|
||||
newHeaders.addAll({'User-Agent': userAgent, "Cookie": cookie});
|
||||
}
|
||||
return newHeaders;
|
||||
return headers;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ part of 'headers.dart';
|
|||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$headersHash() => r'2075121328277856708a7f61718d22c409f915e0';
|
||||
String _$headersHash() => r'cabe2e8d0241df2a9741f4f738c52a0f6ce2ab10';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
|
|
|
|||
24
pubspec.lock
24
pubspec.lock
|
|
@ -234,6 +234,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.1"
|
||||
cookie_jar:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: cookie_jar
|
||||
sha256: a6ac027d3ed6ed756bfce8f3ff60cb479e266f3b0fdabd6242b804b6765e52de
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.8"
|
||||
cross_file:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -630,6 +638,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.0"
|
||||
http_interceptor:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: http_interceptor
|
||||
sha256: "7fe0863f734dcc8286875d2f074f8dd91c47fef95cd219b34282d71930a4895f"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.0-beta.7"
|
||||
http_multi_server:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
@ -1404,6 +1420,14 @@ packages:
|
|||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.2"
|
||||
universal_io:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: universal_io
|
||||
sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
universal_platform:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
|
|
|||
|
|
@ -66,6 +66,8 @@ dependencies:
|
|||
window_manager: ^0.3.7
|
||||
ffi: ^2.1.0
|
||||
ffigen: ^11.0.0
|
||||
http_interceptor: ^2.0.0-beta.7
|
||||
cookie_jar: ^4.0.0
|
||||
|
||||
|
||||
dependency_overrides:
|
||||
|
|
|
|||
Loading…
Reference in a new issue