control where to show cloudflare error message
This commit is contained in:
parent
a6ccf0e77e
commit
c10f7d120a
8 changed files with 49 additions and 16 deletions
|
|
@ -26,7 +26,7 @@ class ImageViewPaged extends ConsumerWidget {
|
|||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final scaleType = ref.watch(scaleTypeStateProvider);
|
||||
final image = data.getImageProvider(ref);
|
||||
final image = data.getImageProvider(ref, true);
|
||||
return GestureDetector(
|
||||
onLongPress: () => onLongPressData.call(data),
|
||||
child: ColorFilterWidget(
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class ImageViewVertical extends ConsumerWidget {
|
|||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final imageWidget = ExtendedImage(
|
||||
image: data.getImageProvider(ref),
|
||||
image: data.getImageProvider(ref, true),
|
||||
filterQuality: FilterQuality.medium,
|
||||
handleLoadingProgress: true,
|
||||
fit: getBoxFit(ref.watch(scaleTypeStateProvider)),
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_windows_webview/flutter_windows_webview.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:mangayomi/providers/l10n_providers.dart';
|
||||
import 'package:mangayomi/services/http/m_client.dart';
|
||||
import 'package:mangayomi/utils/global_style.dart';
|
||||
|
|
@ -79,7 +80,12 @@ class _MangaWebViewState extends ConsumerState<MangaWebView> {
|
|||
child: SafeArea(
|
||||
child: WillPopScope(
|
||||
onWillPop: () async {
|
||||
_webViewController?.goBack();
|
||||
final canGoback = await _webViewController?.canGoBack();
|
||||
if (canGoback ?? false) {
|
||||
_webViewController?.goBack();
|
||||
} else if (context.mounted) {
|
||||
context.pop();
|
||||
}
|
||||
return false;
|
||||
},
|
||||
child: Column(
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ class CustomExtendedNetworkImageProvider
|
|||
this.cancelToken,
|
||||
this.imageCacheName,
|
||||
this.cacheMaxAge = const Duration(days: 30),
|
||||
this.showCloudFlareError = false,
|
||||
});
|
||||
|
||||
/// The name of [ImageCache], you can define custom [ImageCache] to store this provider.
|
||||
|
|
@ -92,6 +93,8 @@ class CustomExtendedNetworkImageProvider
|
|||
@override
|
||||
final Duration? cacheMaxAge;
|
||||
|
||||
final bool showCloudFlareError;
|
||||
|
||||
@override
|
||||
ImageStreamCompleter loadImage(
|
||||
image_provider.ExtendedNetworkImageProvider key,
|
||||
|
|
@ -278,7 +281,19 @@ class CustomExtendedNetworkImageProvider
|
|||
var request = Request('GET', resolved);
|
||||
request.headers.addAll(headers ?? {});
|
||||
|
||||
StreamedResponse response = await MClient.init().send(request);
|
||||
StreamedResponse response =
|
||||
await MClient.init(showCloudFlareError: showCloudFlareError)
|
||||
.send(request);
|
||||
if (response.request != null) {
|
||||
final res = await MClient.init(
|
||||
reqcopyWith: {'useDartHttpClient': true},
|
||||
showCloudFlareError: showCloudFlareError)
|
||||
.send(response.request!);
|
||||
if (![403, 503].contains(res.statusCode) &&
|
||||
["cloudflare-nginx", "cloudflare"].contains(res.headers["server"])) {
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,10 +40,14 @@ class MClient {
|
|||
static InterceptedClient init(
|
||||
{MSource? source,
|
||||
Map<String, dynamic>? reqcopyWith,
|
||||
rhttp.ClientSettings? settings}) {
|
||||
rhttp.ClientSettings? settings,
|
||||
bool showCloudFlareError = true}) {
|
||||
return InterceptedClient.build(
|
||||
client: httpClient(settings: settings, reqcopyWith: reqcopyWith),
|
||||
interceptors: [MCookieManager(reqcopyWith), LoggerInterceptor()]);
|
||||
interceptors: [
|
||||
MCookieManager(reqcopyWith),
|
||||
LoggerInterceptor(showCloudFlareError)
|
||||
]);
|
||||
}
|
||||
|
||||
static Map<String, String> getCookiesPref(String url) {
|
||||
|
|
@ -158,6 +162,8 @@ class MCookieManager extends InterceptorContract {
|
|||
}
|
||||
|
||||
class LoggerInterceptor extends InterceptorContract {
|
||||
LoggerInterceptor(this.showCloudFlareError);
|
||||
bool showCloudFlareError;
|
||||
@override
|
||||
Future<BaseRequest> interceptRequest({
|
||||
required BaseRequest request,
|
||||
|
|
@ -171,14 +177,18 @@ class LoggerInterceptor extends InterceptorContract {
|
|||
Future<BaseResponse> interceptResponse({
|
||||
required BaseResponse response,
|
||||
}) async {
|
||||
final cloudflare = [403, 503].contains(response.statusCode) &&
|
||||
["cloudflare-nginx", "cloudflare"].contains(response.headers["server"]);
|
||||
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",
|
||||
hasCloudFlare: cloudflare, url: response.request!.url.toString());
|
||||
if (showCloudFlareError) {
|
||||
final cloudflare = [403, 503].contains(response.statusCode) &&
|
||||
["cloudflare-nginx", "cloudflare"]
|
||||
.contains(response.headers["server"]);
|
||||
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",
|
||||
hasCloudFlare: cloudflare, url: response.request!.url.toString());
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,7 +59,8 @@ extension UChapDataPreloadExtensions on UChapDataPreload {
|
|||
return imageBytes;
|
||||
}
|
||||
|
||||
ImageProvider<Object> getImageProvider(WidgetRef ref) {
|
||||
ImageProvider<Object> getImageProvider(
|
||||
WidgetRef ref, bool showCloudFlareError) {
|
||||
final data = this;
|
||||
final isLocale = data.isLocale!;
|
||||
final archiveImage = data.archiveImage;
|
||||
|
|
@ -75,6 +76,7 @@ extension UChapDataPreloadExtensions on UChapDataPreload {
|
|||
data.pageUrl!.url.trim().trimLeft().trimRight(),
|
||||
cache: true,
|
||||
cacheMaxAge: const Duration(days: 7),
|
||||
showCloudFlareError: showCloudFlareError,
|
||||
headers: {
|
||||
...data.pageUrl!.headers ?? {},
|
||||
...ref.watch(headersProvider(
|
||||
|
|
|
|||
|
|
@ -1796,5 +1796,5 @@ packages:
|
|||
source: hosted
|
||||
version: "2.2.1"
|
||||
sdks:
|
||||
dart: ">=3.5.3 <4.0.0"
|
||||
dart: ">=3.5.4 <4.0.0"
|
||||
flutter: ">=3.24.0"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ publish_to: "none"
|
|||
version: 0.3.6+69
|
||||
|
||||
environment:
|
||||
sdk: ">=3.5.3 <4.0.0"
|
||||
sdk: ">=3.5.4 <4.0.0"
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
|
|
|
|||
Loading…
Reference in a new issue