add show btn to resolve cloudflare challenge

This commit is contained in:
kodjomoustapha 2024-10-13 18:02:12 +01:00
parent c1fe2b6c95
commit d6f4c99ea1
6 changed files with 33 additions and 23 deletions

3
.gitignore vendored
View file

@ -44,5 +44,4 @@ app.*.map.json
/android/app/profile
/android/app/release
# FVM Version Cache
.fvm/
untranslated_messages.txt

View file

@ -1,4 +1,5 @@
# Run with `flutter gen-l10n`.
arb-dir: lib/l10n
template-arb-file: app_en.arb
# untranslated-messages-file: untranslated_messages.txt
untranslated-messages-file: untranslated_messages.txt
output-localization-file: app_localizations.dart

View file

@ -3,6 +3,7 @@ import 'package:bot_toast/bot_toast.dart';
import 'package:dart_eval/dart_eval_bridge.dart';
import 'package:dart_eval/stdlib/core.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:html/dom.dart' hide Text;
import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';
@ -11,6 +12,7 @@ import 'package:json_path/json_path.dart';
import 'package:mangayomi/eval/dart/model/document.dart';
import 'package:mangayomi/eval/javascript/http.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/router/router.dart';
import 'package:mangayomi/services/anime_extractors/dood_extractor.dart';
import 'package:mangayomi/services/anime_extractors/filemoon.dart';
import 'package:mangayomi/services/anime_extractors/gogocdn_extractor.dart';
@ -29,6 +31,7 @@ import 'package:mangayomi/services/anime_extractors/your_upload_extractor.dart';
import 'package:mangayomi/utils/cryptoaes/crypto_aes.dart';
import 'package:mangayomi/utils/cryptoaes/deobfuscator.dart';
import 'package:mangayomi/utils/cryptoaes/js_unpacker.dart';
import 'package:mangayomi/utils/extensions/build_context_extensions.dart';
import 'package:mangayomi/utils/extensions/string_extensions.dart';
import 'package:mangayomi/utils/reg_exp_matcher.dart';
import 'package:xpath_selector_html_parser/xpath_selector_html_parser.dart';
@ -667,7 +670,10 @@ void botToast(String title,
{int second = 10,
double? fontSize,
double alignX = 0,
double alignY = 0.99}) {
double alignY = 0.99,
bool hasCloudFlare = false,
String? url}) {
final context = navigatorKey.currentState?.context;
final assets = [
'assets/app_icons/icon-black.png',
'assets/app_icons/icon-red.png'
@ -680,10 +686,19 @@ void botToast(String title,
animationDuration: const Duration(milliseconds: 200),
animationReverseDuration: const Duration(milliseconds: 200),
leading: (_) => Image.asset((assets..shuffle()).first, height: 25),
title: (_) => Text(
title,
style: TextStyle(fontSize: fontSize),
),
title: (_) => Text(title, style: TextStyle(fontSize: fontSize)),
trailing: hasCloudFlare
? (_) => OutlinedButton.icon(
style: OutlinedButton.styleFrom(elevation: 10),
onPressed: () {
context
?.push("/mangawebview", extra: {'url': url, 'title': ''});
},
label: Text("Resolve Cloudflare challenge",
style: TextStyle(color: context?.secondaryColor)),
icon: const Icon(Icons.public),
)
: null,
);
}

View file

@ -12,13 +12,8 @@ import 'package:share_plus/share_plus.dart';
class MangaWebView extends ConsumerStatefulWidget {
final String url;
final String sourceId;
final String title;
const MangaWebView(
{super.key,
required this.url,
required this.sourceId,
required this.title});
const MangaWebView({super.key, required this.url, required this.title});
@override
ConsumerState<MangaWebView> createState() => _MangaWebViewState();

View file

@ -41,17 +41,18 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:flutter/cupertino.dart';
part 'router.g.dart';
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
@riverpod
GoRouter router(RouterRef ref) {
final router = RouterNotifier();
return GoRouter(
observers: [BotToastNavigatorObserver()],
initialLocation: '/MangaLibrary',
debugLogDiagnostics: kDebugMode,
refreshListenable: router,
routes: router._routes,
);
observers: [BotToastNavigatorObserver()],
initialLocation: '/MangaLibrary',
debugLogDiagnostics: kDebugMode,
refreshListenable: router,
routes: router._routes,
navigatorKey: navigatorKey);
}
@riverpod
@ -380,7 +381,6 @@ class RouterNotifier extends ChangeNotifier {
final data = state.extra as Map<String, dynamic>;
return MangaWebView(
url: data["url"]!,
sourceId: data["sourceId"]!,
title: data['title']!,
);
},
@ -390,7 +390,6 @@ class RouterNotifier extends ChangeNotifier {
key: state.pageKey,
child: MangaWebView(
url: data["url"]!,
sourceId: data["sourceId"]!,
title: data['title']!,
),
);

View file

@ -176,7 +176,8 @@ class LoggerInterceptor extends InterceptorContract {
Logger.add(LoggerLevel.info,
"----- Response -----\n${response.request?.method}: ${response.request?.url}, statusCode: ${response.statusCode} ${cloudflare ? "Failed to bypass Cloudflare" : ""}");
if (cloudflare) {
botToast("${response.statusCode} Failed to bypass Cloudflare");
botToast("${response.statusCode} Failed to bypass Cloudflare",
hasCloudFlare: cloudflare, url: response.request!.url.toString());
}
return response;
}