Revert "code refactor , deobfuscator method , extension preferences"

This reverts commit 3ff647bb01.
This commit is contained in:
kodjomoustapha 2023-09-11 18:04:49 +01:00
parent 9e54108872
commit 530763dafe
32 changed files with 141 additions and 457 deletions

View file

@ -41,11 +41,6 @@ class $VideoModel implements VideoModel, $Instance {
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.list,
[BridgeTypeRef.type(RuntimeTypes.dynamicType)])),
false),
BridgeParameter(
'audios',
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.list,
[BridgeTypeRef.type(RuntimeTypes.dynamicType)])),
false),
]))
},
// Specify class fields

View file

@ -36,7 +36,6 @@ import 'package:mangayomi/services/anime_extractors/your_upload_extractor.dart';
import 'package:mangayomi/services/http_service/cloudflare/cloudflare_bypass.dart';
import 'package:mangayomi/utils/constant.dart';
import 'package:mangayomi/utils/cryptoaes/crypto_aes.dart';
import 'package:mangayomi/utils/cryptoaes/deobfuscator.dart';
import 'package:mangayomi/utils/extensions.dart';
import 'package:mangayomi/utils/reg_exp_matcher.dart';
import 'package:mangayomi/utils/xpath_selector.dart';
@ -111,7 +110,7 @@ class MBridge {
.trimLeft()
.trimRight();
} catch (e) {
botToast(e.toString());
_botToast(e.toString());
throw Exception(e);
}
}
@ -199,7 +198,7 @@ class MBridge {
//return last element of the resRegExp list
return resRegExp.last.trim().trimLeft().trimRight();
} catch (e) {
botToast(e.toString());
_botToast(e.toString());
throw Exception(e);
}
}
@ -226,7 +225,7 @@ class MBridge {
return attr;
}
} catch (e) {
// botToast(e.toString());
// _botToast(e.toString());
return "";
}
}
@ -297,11 +296,9 @@ class MBridge {
..launch(url);
await Future.doWhile(() async {
await Future.delayed(const Duration(seconds: 1));
html = await decodeHtml(
webview,
);
if (html == null || xpathSelector(html!).query(rule).attrs.isEmpty) {
await Future.delayed(const Duration(seconds: 10));
html = await decodeHtml(webview);
if (xpathSelector(html!).query(rule).attrs.isEmpty) {
html = await decodeHtml(webview);
return true;
}
@ -377,7 +374,7 @@ class MBridge {
final jsPacker = JSPacker(code);
return jsPacker.unpack() ?? "";
} catch (e) {
botToast(e.toString());
_botToast(e.toString());
throw Exception(e);
}
}
@ -426,7 +423,7 @@ class MBridge {
}).toList();
}
} catch (e) {
botToast(e.toString());
_botToast(e.toString());
throw Exception(e);
}
}
@ -487,7 +484,7 @@ class MBridge {
}
return listRg.first;
} catch (e) {
botToast(e.toString());
_botToast(e.toString());
throw Exception(e);
}
}
@ -611,7 +608,7 @@ class MBridge {
return result;
} catch (e) {
botToast(e.toString());
_botToast(e.toString());
return "";
}
}
@ -685,7 +682,7 @@ class MBridge {
return result;
} catch (e) {
botToast(e.toString());
_botToast(e.toString());
return "";
}
}
@ -781,7 +778,7 @@ class MBridge {
["menit", "dakika", "min", "minute", "minuto", "นาที", "دقائق"])
.anyWordIn(date)) {
return cal.subtract(Duration(minutes: number)).millisecondsSinceEpoch;
} else if (WordSet(["detik", "segundo", "second", "วินาที", "sec"])
} else if (WordSet(["detik", "segundo", "second", "วินาที"])
.anyWordIn(date)) {
return cal.subtract(Duration(seconds: number)).millisecondsSinceEpoch;
} else if (WordSet(["week", "semana"]).anyWordIn(date)) {
@ -875,15 +872,11 @@ class MBridge {
} catch (_) {}
}
}
botToast(e.toString());
_botToast(e.toString());
throw Exception(e);
}
}
static String deobfuscateJsPassword(String inputString) {
return Deobfuscator.deobfuscateJsPassword(inputString);
}
static Future<List<Video>> sibnetExtractor(String url) async {
return await SibnetExtractor().videosFromUrl(
url,
@ -1104,19 +1097,6 @@ class $MBridge extends MBridge with $Bridge {
],
namedParams: []),
isStatic: true),
'deobfuscateJsPassword': BridgeMethodDef(
BridgeFunctionDef(
returns: BridgeTypeAnnotation(
BridgeTypeRef.type(RuntimeTypes.stringType)),
params: [
BridgeParameter(
'inputString',
BridgeTypeAnnotation(
BridgeTypeRef.type(RuntimeTypes.stringType)),
false),
],
namedParams: []),
isStatic: true),
'sibnetExtractor': BridgeMethodDef(
BridgeFunctionDef(
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.future,
@ -2053,10 +2033,6 @@ class $MBridge extends MBridge with $Bridge {
$String(MBridge.parseChapterDate(
args[0]!.$value, args[1]!.$value, args[2]!.$value));
static $String $deobfuscateJsPassword(
Runtime runtime, $Value? target, List<$Value?> args) =>
$String(MBridge.deobfuscateJsPassword(args[0]!.$value));
static $String $querySelectorAll(
Runtime runtime, $Value? target, List<$Value?> args) =>
$String(MBridge.querySelectorAll(
@ -2184,7 +2160,7 @@ class $MBridge extends MBridge with $Bridge {
void $bridgeSet(String identifier, $Value value) {}
}
void botToast(String title) {
void _botToast(String title) {
BotToast.showSimpleNotification(
onlyOne: true,
dismissDirections: [DismissDirection.horizontal, DismissDirection.down],

View file

@ -99,8 +99,6 @@ Runtime runtimeEval(Uint8List bytecode) {
'package:bridge_lib/bridge_lib.dart', 'MBridge.xpath', $MBridge.$xpath);
runtime.registerBridgeFunc('package:bridge_lib/bridge_lib.dart',
'MBridge.querySelector', $MBridge.$querySelector);
runtime.registerBridgeFunc('package:bridge_lib/bridge_lib.dart',
'MBridge.deobfuscateJsPassword', $MBridge.$deobfuscateJsPassword);
runtime.registerBridgeFunc('package:bridge_lib/bridge_lib.dart',
'MBridge.querySelectorAll', $MBridge.$querySelectorAll);
runtime.setup();

View file

@ -1,7 +1,7 @@
import 'dart:io';
import 'package:archive/archive_io.dart';
import 'package:flutter/foundation.dart';
import 'package:mangayomi/modules/manga/archive_reader/models/models.dart';
import 'package:mangayomi/modules/archive_reader/models/models.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'archive_reader_providers.g.dart';

View file

@ -3,24 +3,17 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/modules/browse/extension/providers/extension_preferences_providers.dart';
import 'package:mangayomi/providers/l10n_providers.dart';
import 'package:mangayomi/utils/colors.dart';
import 'package:mangayomi/utils/language.dart';
import 'package:mangayomi/utils/media_query.dart';
class ExtensionDetail extends ConsumerStatefulWidget {
class ExtensionDetail extends ConsumerWidget {
final Source source;
const ExtensionDetail({super.key, required this.source});
@override
ConsumerState<ExtensionDetail> createState() => _ExtensionDetailState();
}
class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
late Source source = widget.source;
@override
Widget build(BuildContext context) {
Widget build(BuildContext context, WidgetRef ref) {
final l10n = l10nLocalizations(context)!;
return Scaffold(
appBar: AppBar(
@ -35,10 +28,10 @@ class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
color:
Theme.of(context).secondaryHeaderColor.withOpacity(0.5),
borderRadius: BorderRadius.circular(10)),
child: widget.source.iconUrl!.isEmpty
child: source.iconUrl!.isEmpty
? const Icon(Icons.source_outlined, size: 140)
: CachedNetworkImage(
imageUrl: widget.source.iconUrl!,
imageUrl: source.iconUrl!,
fit: BoxFit.contain,
width: 140,
height: 140,
@ -57,7 +50,7 @@ class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
Padding(
padding: const EdgeInsets.all(12),
child: Text(
widget.source.name!,
source.name!,
style: const TextStyle(fontSize: 23, fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
@ -76,7 +69,7 @@ class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
Column(
children: [
Text(
widget.source.version!,
source.version!,
style: const TextStyle(
fontSize: 16, fontWeight: FontWeight.bold),
),
@ -86,7 +79,7 @@ class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
),
],
),
if (widget.source.isNsfw!)
if (source.isNsfw!)
Container(
decoration: BoxDecoration(
color: Colors.red.withOpacity(0.7),
@ -103,7 +96,7 @@ class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
Column(
children: [
Text(
completeLanguageName(widget.source.lang!),
completeLanguageName(source.lang!),
style: const TextStyle(
fontSize: 16, fontWeight: FontWeight.bold),
),
@ -138,10 +131,10 @@ class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
builder: (ctx) {
return AlertDialog(
title: Text(
widget.source.name!,
source.name!,
),
content: Text(
l10n.uninstall_extension(widget.source.name!)),
content:
Text(l10n.uninstall_extension(source.name!)),
actions: [
Row(
mainAxisAlignment: MainAxisAlignment.end,
@ -156,8 +149,8 @@ class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
),
TextButton(
onPressed: () {
isar.writeTxnSync(() =>
isar.sources.putSync(widget.source
isar.writeTxnSync(
() => isar.sources.putSync(source
..sourceCode = ""
..isAdded = false
..isPinned = false));
@ -177,86 +170,7 @@ class _ExtensionDetailState extends ConsumerState<ExtensionDetail> {
fontSize: 20, fontWeight: FontWeight.bold),
)),
),
),
ref.watch(getMirrorPrefProvider(widget.source.sourceCode!)).when(
data: (data) => data != null
? ListTile(
onTap: () {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text(
l10n.relative_timestamp,
),
content: SizedBox(
width: mediaWidth(context, 0.8),
child: ListView.builder(
shrinkWrap: true,
itemCount: data.entries.length,
itemBuilder: (context, index) {
return RadioListTile(
dense: true,
contentPadding:
const EdgeInsets.all(0),
value: data.entries
.toList()[index]
.value,
groupValue: widget.source.baseUrl!,
onChanged: (value) {
isar.writeTxnSync(() => isar
.sources
.putSync(widget.source
..baseUrl = data.entries
.toList()[index]
.value));
setState(() {
source = isar.sources
.getSync(source.id!)!;
});
Navigator.pop(context);
},
title: Row(
children: [
Text(data.entries
.toList()[index]
.key)
],
),
);
},
)),
actions: [
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
TextButton(
onPressed: () async {
Navigator.pop(context);
},
child: Text(
l10n.cancel,
style: TextStyle(
color: primaryColor(context)),
)),
],
)
],
);
});
},
title: Text(l10n.relative_timestamp),
subtitle: Text(
widget.source.baseUrl!,
style: TextStyle(
fontSize: 11, color: secondaryColor(context)),
),
)
: Container(),
error: (error, stackTrace) => Text(error.toString()),
loading: () => Container(),
)
)
],
),
);

View file

@ -1,26 +0,0 @@
import 'package:dart_eval/stdlib/core.dart';
import 'package:mangayomi/eval/compiler/compiler.dart';
import 'package:mangayomi/eval/runtime/runtime.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'extension_preferences_providers.g.dart';
@riverpod
Future<Map<String, String>?> getMirrorPref(
GetMirrorPrefRef ref, String codeSource) async {
try {
final bytecode = compilerEval(codeSource);
final runtime = runtimeEval(bytecode);
var res = await runtime.executeLib(
'package:mangayomi/source_code.dart',
'getMirrorPref',
);
Map<String, String> headers = {};
if (res is $Map) {
headers = res.$reified
.map((key, value) => MapEntry(key.toString(), value.toString()));
}
return headers;
} catch (_) {
return null;
}
}

View file

@ -1,114 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'extension_preferences_providers.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$getMirrorPrefHash() => r'87d8329eabbe702d2e612a04cfe6fc719519194c';
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
typedef GetMirrorPrefRef = AutoDisposeFutureProviderRef<Map<String, String>?>;
/// See also [getMirrorPref].
@ProviderFor(getMirrorPref)
const getMirrorPrefProvider = GetMirrorPrefFamily();
/// See also [getMirrorPref].
class GetMirrorPrefFamily extends Family<AsyncValue<Map<String, String>?>> {
/// See also [getMirrorPref].
const GetMirrorPrefFamily();
/// See also [getMirrorPref].
GetMirrorPrefProvider call(
String codeSource,
) {
return GetMirrorPrefProvider(
codeSource,
);
}
@override
GetMirrorPrefProvider getProviderOverride(
covariant GetMirrorPrefProvider provider,
) {
return call(
provider.codeSource,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'getMirrorPrefProvider';
}
/// See also [getMirrorPref].
class GetMirrorPrefProvider
extends AutoDisposeFutureProvider<Map<String, String>?> {
/// See also [getMirrorPref].
GetMirrorPrefProvider(
this.codeSource,
) : super.internal(
(ref) => getMirrorPref(
ref,
codeSource,
),
from: getMirrorPrefProvider,
name: r'getMirrorPrefProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$getMirrorPrefHash,
dependencies: GetMirrorPrefFamily._dependencies,
allTransitiveDependencies:
GetMirrorPrefFamily._allTransitiveDependencies,
);
final String codeSource;
@override
bool operator ==(Object other) {
return other is GetMirrorPrefProvider && other.codeSource == codeSource;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, codeSource.hashCode);
return _SystemHash.finish(hash);
}
}
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member

View file

@ -3,8 +3,8 @@ import 'package:file_picker/file_picker.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/modules/manga/archive_reader/models/models.dart';
import 'package:mangayomi/modules/manga/archive_reader/providers/archive_reader_providers.dart';
import 'package:mangayomi/modules/archive_reader/models/models.dart';
import 'package:mangayomi/modules/archive_reader/providers/archive_reader_providers.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'local_archive.g.dart';

View file

@ -7,7 +7,7 @@ part of 'local_archive.dart';
// **************************************************************************
String _$importArchivesFromFileHash() =>
r'f911dfd50c20ebbfec97322dd0bf44261a025341';
r'25ff2ca889a31d482a95af7cb9be8ebd9cf0dc89';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -76,19 +76,17 @@ class MainScreen extends ConsumerWidget {
children: [
AnimatedContainer(
duration: const Duration(milliseconds: 0),
width: switch (isLongPressed) {
true => 0,
_ => switch (location) {
null => 100,
!= '/MangaLibrary' &&
!= '/AnimeLibrary' &&
!= '/history' &&
!= '/browse' &&
!= '/more' =>
0,
_ => 100,
},
},
width: isLongPressed
? 0
: location == null
? 100
: location != '/MangaLibrary' &&
location != '/AnimeLibrary' &&
location != '/history' &&
location != '/browse' &&
location != '/more'
? 0
: 100,
child: NavigationRailTheme(
data: NavigationRailThemeData(
indicatorShape: RoundedRectangleBorder(
@ -178,19 +176,17 @@ class MainScreen extends ConsumerWidget {
: AnimatedContainer(
duration: const Duration(milliseconds: 0),
width: mediaWidth(context, 1),
height: switch (isLongPressed) {
true => 0,
_ => switch (location) {
null => null,
!= '/MangaLibrary' &&
!= '/AnimeLibrary' &&
!= '/history' &&
!= '/browse' &&
!= '/more' =>
0,
_ => null,
},
},
height: isLongPressed
? 0
: location == null
? null
: location != '/MangaLibrary' &&
location != '/AnimeLibrary' &&
location != '/history' &&
location != '/browse' &&
location != '/more'
? 0
: null,
child: NavigationBarTheme(
data: NavigationBarThemeData(
indicatorShape: RoundedRectangleBorder(

View file

@ -10,7 +10,6 @@ import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/providers/l10n_providers.dart';
import 'package:mangayomi/services/http_service/cloudflare/cookie.dart';
import 'package:mangayomi/services/http_service/cloudflare/providers/cookie_providers.dart';
import 'package:mangayomi/utils/constant.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:share_plus/share_plus.dart';
@ -183,6 +182,7 @@ class _MangaWebViewState extends ConsumerState<MangaWebView> {
_url = url.toString();
});
},
shouldOverrideUrlLoading:
(controller, navigationAction) async {
var uri = navigationAction.request.url!;
@ -213,6 +213,7 @@ class _MangaWebViewState extends ConsumerState<MangaWebView> {
_url = url.toString();
});
},
onProgressChanged: (controller, progress) async {
setState(() {
this.progress = progress / 100;
@ -232,12 +233,12 @@ class _MangaWebViewState extends ConsumerState<MangaWebView> {
_canGoback = canGoback;
_canGoForward = canGoForward;
});
},
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
userAgent: isar.settings.getSync(227)!.userAgent!),
),
initialUrlRequest: URLRequest(url: Uri.parse(widget.url)),
},initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(userAgent: isar.settings.getSync(227)!.userAgent!),
),
initialUrlRequest:
URLRequest(url: Uri.parse(widget.url)),
),
),
],
@ -255,17 +256,10 @@ Future<String> getWebViewPath() async {
);
}
Future<String?> decodeHtml(Webview webview, {String? sourceId}) async {
decodeHtml(Webview webview) async {
final html = await webview
.evaluateJavaScript("window.document.documentElement.outerHTML;");
final cookie = await webview.evaluateJavaScript("window.document.cookie;");
if (cookie != null && sourceId != null) {
setCookieBA(cookie, sourceId);
}
final res = jsonDecode(html!) as String;
return res == "<html><head></head><body></body></html>" || res.isEmpty
? null
: res;
// final cookie = await webview.evaluateJavaScript("window.document.cookie;");
// log(cookie!);
return jsonDecode(html!) as String;
}

View file

@ -43,6 +43,7 @@ Future<(List<Video>, bool)> getAnimeServers(
];
var res = await runtime.executeLib(
'package:mangayomi/source_code.dart', 'getVideoList');
// await Future.delayed(Duration(days: 1));
if (res is $List) {
video = res.$reified.map(
(e) {

View file

@ -9,7 +9,7 @@ import 'package:mangayomi/eval/compiler/compiler.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/modules/manga/archive_reader/providers/archive_reader_providers.dart';
import 'package:mangayomi/modules/archive_reader/providers/archive_reader_providers.dart';
import 'package:mangayomi/modules/manga/reader/reader_view.dart';
import 'package:mangayomi/providers/storage_provider.dart';
import 'package:mangayomi/eval/runtime/runtime.dart';

View file

@ -6,7 +6,7 @@ part of 'get_chapter_url.dart';
// RiverpodGenerator
// **************************************************************************
String _$getChapterUrlHash() => r'6a8b0eb3869519b75787d8d4a876f536a517e849';
String _$getChapterUrlHash() => r'330c495774b22fc1fdedb0fa64969cd17e4635f8';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -7,7 +7,7 @@ part of 'get_latest_updates_manga.dart';
// **************************************************************************
String _$getLatestUpdatesMangaHash() =>
r'5bae855778ae63dd954705adab9b9bdb3432065e';
r'b4de1c71b935893780b02be6a4fa1980651a833d';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -6,7 +6,7 @@ part of 'get_manga_detail.dart';
// RiverpodGenerator
// **************************************************************************
String _$getMangaDetailHash() => r'9ac46d56d3492b3a61ff159873762f579415fb36';
String _$getMangaDetailHash() => r'025ccc11f94f9b69bd85d86833bc261f66b74f7f';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -6,7 +6,7 @@ part of 'get_popular_manga.dart';
// RiverpodGenerator
// **************************************************************************
String _$getPopularMangaHash() => r'6c9face3040220071430e814a12da83201692310';
String _$getPopularMangaHash() => r'f5a1f5a66bad652cb461ef0ed9d30f60ff7a000a';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -31,11 +31,9 @@ Future<String> cloudflareBypass(
..launch(url);
await Future.doWhile(() async {
await Future.delayed(const Duration(seconds: 1));
html = await decodeHtml(webview, sourceId: sourceId);
if (html == null ||
html!.contains("Just a moment") ||
html!.contains("challenges.cloudflare.com")) {
await Future.delayed(const Duration(seconds: 5));
if (html == null) {
html = await decodeHtml(webview);
return true;
}
return false;

View file

@ -8,14 +8,22 @@ Future setCookie(SetCookieRef ref, String sourceId, String url) async {
CookieManager cookie = CookieManager.instance();
final cookies = await cookie.getCookies(url: Uri.parse(url.toString()));
final newCookie = cookies.join("; ");
setCookieBA(newCookie, sourceId);
final newCookie =
cookies.where((element) => element.name == "cf_clearance").toList();
if (newCookie.isNotEmpty) {
ref
.read(cookieStateProvider(sourceId).notifier)
.setCookie("cf_clearance=${newCookie.first.value};");
}
}
Future setCookieB(String sourceId, String url) async {
CookieManager cookie = CookieManager.instance();
final cookies = await cookie.getCookies(url: Uri.parse(url.toString()));
final newCookie = cookies.join("; ");
setCookieBA(newCookie, sourceId);
final newCookie =
cookies.where((element) => element.name == "cf_clearance").toList();
if (newCookie.isNotEmpty) {
setCookieB("cf_clearance=${newCookie.first.value};", sourceId);
}
}

View file

@ -6,7 +6,7 @@ part of 'cookie.dart';
// RiverpodGenerator
// **************************************************************************
String _$setCookieHash() => r'55073d2aceae6ce9bf03d61d390dfb84150d272e';
String _$setCookieHash() => r'4beff910b58df98a7b5019a5375f9fb5c84a580c';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -35,7 +35,7 @@ class CookieState extends _$CookieState {
}
}
void setCookieBA(String newCookie, String idSource) {
void setCookieB(String newCookie, String idSource) {
final settings = isar.settings.getSync(227);
List<Cookie>? cookieList = [];
for (var cookie in settings!.cookiesList ?? []) {

View file

@ -6,7 +6,7 @@ part of 'cookie_providers.dart';
// RiverpodGenerator
// **************************************************************************
String _$cookieStateHash() => r'a3e0c52a396c7b9072c2b1e948399f2e4e4728d5';
String _$cookieStateHash() => r'42286f51989b6f65eed9787ca2390a96854395a8';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -6,7 +6,7 @@ part of 'search_manga.dart';
// RiverpodGenerator
// **************************************************************************
String _$searchMangaHash() => r'0c16725a47f5ad9b7ec7f128a5c1c03e4868fcf0';
String _$searchMangaHash() => r'9bbf3d7b3cb8f1aa92201200e6a4616721cd3037';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -2,7 +2,6 @@ import 'dart:developer';
import 'dart:io';
import 'package:flutter_web_auth_2/flutter_web_auth_2.dart';
import 'package:http/http.dart' as http;
import 'package:mangayomi/eval/m_bridge.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/track.dart';
import 'package:mangayomi/models/track_preference.dart';
@ -73,7 +72,8 @@ class Anilist extends _$Anilist {
Future<Track> addLibManga(Track track) async {
final accessToken = await _getAccesToken();
const query = '''
const query =
'''
mutation AddManga(\$mangaId: Int, \$progress: Int, \$status: MediaListStatus) {
SaveMediaListEntry(mediaId: \$mangaId, progress: \$progress, status: \$status) {
id
@ -107,7 +107,8 @@ class Anilist extends _$Anilist {
Future<Track> addLibAnime(Track track) async {
final accessToken = await _getAccesToken();
const query = '''
const query =
'''
mutation AddAnime(\$animeId: Int, \$progress: Int, \$status: MediaListStatus) {
SaveMediaListEntry(mediaId: \$animeId, progress: \$progress, status: \$status) {
id
@ -140,7 +141,8 @@ class Anilist extends _$Anilist {
Future<Track> updateLibManga(Track track) async {
final accessToken = await _getAccesToken();
const query = '''
const query =
'''
mutation UpdateManga(\$listId: Int, \$progress: Int, \$status: MediaListStatus, \$score: Int, \$startedAt: FuzzyDateInput, \$completedAt: FuzzyDateInput) {
SaveMediaListEntry(
id: \$listId,
@ -183,7 +185,8 @@ class Anilist extends _$Anilist {
Future<Track> updateLibAnime(Track track) async {
final accessToken = await _getAccesToken();
const query = '''
const query =
'''
mutation UpdateAnime(\$listId: Int, \$progress: Int, \$status: MediaListStatus, \$score: Int, \$startedAt: FuzzyDateInput, \$completedAt: FuzzyDateInput) {
SaveMediaListEntry(
id: \$listId,
@ -224,7 +227,8 @@ class Anilist extends _$Anilist {
Future<List<TrackSearch>> search(String search) async {
final accessToken = await _getAccesToken();
const query = '''
const query =
'''
query Search(\$query: String) {
Page(perPage: 50) {
media(search: \$query, type: MANGA, format_not_in: [NOVEL]) {
@ -290,7 +294,8 @@ class Anilist extends _$Anilist {
Future<List<TrackSearch>> searchAnime(String search) async {
final accessToken = await _getAccesToken();
const query = '''
const query =
'''
query Search(\$query: String) {
Page(perPage: 50) {
media(search: \$query, type: ANIME) {
@ -360,7 +365,8 @@ class Anilist extends _$Anilist {
final userId = ref.watch(tracksProvider(syncId: syncId))!.username;
final accessToken = await _getAccesToken();
const query = '''
const query =
'''
query(\$id: Int!, \$manga_id: Int!) {
Page {
mediaList(userId: \$id, type: MANGA, mediaId: \$manga_id) {
@ -442,7 +448,8 @@ class Anilist extends _$Anilist {
final userId = ref.watch(tracksProvider(syncId: syncId))!.username;
final accessToken = await _getAccesToken();
const query = '''
const query =
'''
query(\$id: Int!, \$anime_id: Int!) {
Page {
mediaList(userId: \$id, type: ANIME, mediaId: \$anime_id) {
@ -519,7 +526,8 @@ class Anilist extends _$Anilist {
}
Future<(String, String)> _getCurrentUser(String accessToken) async {
const query = '''
const query =
'''
query User {
Viewer {
id
@ -558,7 +566,6 @@ class Anilist extends _$Anilist {
final expiresIn = DateTime.fromMillisecondsSinceEpoch(mALOAuth.expiresIn!);
if (DateTime.now().isAfter(expiresIn)) {
ref.read(tracksProvider(syncId: syncId).notifier).logout();
botToast("Anilist Token expired");
throw Exception("Token expired");
}
return mALOAuth.accessToken!;
@ -570,20 +577,24 @@ class Anilist extends _$Anilist {
return switch (scoreFormat) {
"POINT_10" => (score / 10).toString(),
"POINT_100" => score.toString(),
"POINT_5" => switch (score) {
0 => "0",
< 30 => "1",
< 50 => "2",
< 70 => "3",
< 90 => "4",
_ => "5"
},
"POINT_3" => switch (score) {
0 => "0",
<= 35 => ":(",
<= 60 => ":|",
_ => ":)"
},
"POINT_5" => score == 0
? "0"
: score < 30
? "1"
: score < 50
? "2"
: score < 70
? "3"
: score < 90
? "4"
: "5",
"POINT_3" => score == 0
? "0"
: score <= 35
? ":("
: score <= 60
? ":|"
: ":)",
"POINT_10_DECIMAL" => (score / 10).toString(),
_ => throw ("Unknown score type")
};
@ -672,16 +683,14 @@ class Anilist extends _$Anilist {
final prefs = isar.trackPreferences.getSync(syncId)!.prefs;
final scoreFormat = jsonDecode(prefs!)['scoreFormat'];
return switch (scoreFormat) {
'POINT_5' => switch (score) {
0 => "0 ★",
_ => "${(score + 10) ~/ 20}"
},
'POINT_3' => switch (score) {
0 => "-",
<= 35 => "😦",
<= 60 => "😐",
_ => "😊"
},
'POINT_5' => score == 0 ? "0 ★" : "${(score + 10) ~/ 20}",
'POINT_3' => score == 0
? "-"
: score <= 35
? "😦"
: score <= 60
? "😐"
: "😊",
_ => _toAnilistScore(score),
};
}

View file

@ -25,7 +25,7 @@ class CryptoAES {
static String decryptAESCryptoJS(String encrypted, String passphrase) {
try {
Uint8List encryptedBytesWithSalt = base64.decode(encrypted.trim());
Uint8List encryptedBytesWithSalt = base64.decode(encrypted);
Uint8List encryptedBytes =
encryptedBytesWithSalt.sublist(16, encryptedBytesWithSalt.length);

View file

@ -1,65 +0,0 @@
class Deobfuscator {
static String deobfuscateJsPassword(String inputString) {
int idx = 0;
final brackets = ['[', '('];
final evaluatedString = StringBuffer();
while (idx < inputString.length) {
final chr = inputString[idx];
if (!brackets.contains(chr)) {
idx++;
continue;
}
final closingIndex = getMatchingBracketIndex(idx, inputString);
if (chr == '[') {
final digit = calculateDigit(inputString.substring(idx, closingIndex));
evaluatedString.write(digit);
} else {
evaluatedString.write('.');
if (inputString[closingIndex + 1] == '[') {
final skippingIndex = getMatchingBracketIndex(closingIndex + 1, inputString);
idx = skippingIndex + 1;
continue;
}
}
idx = closingIndex + 1;
}
return evaluatedString.toString();
}
static int getMatchingBracketIndex(int openingIndex, String inputString) {
final openingBracket = inputString[openingIndex];
final closingBracket = openingBracket == '[' ? ']' : ')';
var counter = 0;
for (var idx = openingIndex; idx < inputString.length; idx++) {
if (inputString[idx] == openingBracket) counter++;
if (inputString[idx] == closingBracket) counter--;
if (counter == 0) return idx; // found matching bracket
if (counter < 0) return -1; // unbalanced brackets
}
return -1; // matching bracket not found
}
static String calculateDigit(String inputSubString) {
final digit = RegExp(r"\!\+\[\]").allMatches(inputSubString).length;
if (digit == 0) {
if (RegExp(r"\+\[\]").allMatches(inputSubString).length == 1) {
return '0';
}
} else if (digit >= 1 && digit <= 9) {
return digit.toString();
}
return '-'; // Illegal digit
}
}

View file

@ -25,7 +25,7 @@ Map<String, String> headers(HeadersRef ref,
if (sourceM.hasCloudflare!) {
final userAgent = isar.settings.getSync(227)!.userAgent!;
final cookie = ref.watch(cookieStateProvider(sourceM.id.toString()));
final cookie = ref.watch(cookieStateProvider(source));
newHeaders.addAll({'User-Agent': userAgent, "Cookie": cookie});
}

View file

@ -6,7 +6,7 @@ part of 'headers.dart';
// RiverpodGenerator
// **************************************************************************
String _$headersHash() => r'36e19ced66a55af45ef31bb3b342505246745ebe';
String _$headersHash() => r'072a5ed2f4253378506a5fc1f9095531f252450e';
/// Copied from Dart SDK
class _SystemHash {

View file

@ -1579,5 +1579,5 @@ packages:
source: hosted
version: "3.1.2"
sdks:
dart: ">=3.1.1 <4.0.0"
dart: ">=3.1.0 <4.0.0"
flutter: ">=3.13.0"

View file

@ -1,10 +1,10 @@
name: mangayomi
description: Free and open source manga reader multi plateform app inspired by Tachiyomi.
version: 0.0.43+17
version: 0.0.42+16
environment:
sdk: '>=3.1.1 <4.0.0'
sdk: '>=3.1.0 <4.0.0'
dependencies: