@@ -17,9 +17,12 @@ import 'dart:io';
1717
1818import 'dart:isolate' ;
1919
20+ import 'package:dio/dio.dart' ;
21+ import 'package:dio_compatibility_layer/dio_compatibility_layer.dart' ;
2022import 'package:flutter/material.dart' ;
2123import 'package:flutter/services.dart' ;
2224import 'package:flutter_cache_manager/flutter_cache_manager.dart' ;
25+ import 'package:flutter_cache_manager_dio/flutter_cache_manager_dio.dart' ;
2326import 'package:path_provider/path_provider.dart' ;
2427import 'package:pixez/component/pixiv_image.dart' ;
2528import 'package:pixez/er/hoster.dart' ;
@@ -31,7 +34,7 @@ import 'package:pixez/models/illust.dart';
3134import 'package:pixez/models/task_persist.dart' ;
3235import 'package:pixez/store/save_store.dart' ;
3336import 'package:quiver/collection.dart' ;
34- import 'package:rhttp/rhttp.dart' ;
37+ import 'package:rhttp/rhttp.dart' as r ;
3538
3639enum IsoTaskState { INIT , APPEND , PROGRESS , ERROR , COMPLETE }
3740
@@ -144,6 +147,7 @@ class Fetcher {
144147 SendMessage (
145148 receivePort.sendPort,
146149 pictureSource,
150+ userSetting.disableBypassSni,
147151 RootIsolateToken .instance! ,
148152 ),
149153 debugName: 'childIsolate' ,
@@ -236,9 +240,15 @@ class Fetcher {
236240class SendMessage {
237241 final SendPort sendPort;
238242 final String pictureSource;
243+ final bool disableBypassSni;
239244 final RootIsolateToken rootIsolateToken;
240245
241- SendMessage (this .sendPort, this .pictureSource, this .rootIsolateToken);
246+ SendMessage (
247+ this .sendPort,
248+ this .pictureSource,
249+ this .disableBypassSni,
250+ this .rootIsolateToken,
251+ );
242252}
243253
244254entryPoint (SendMessage message) async {
@@ -248,10 +258,32 @@ entryPoint(SendMessage message) async {
248258 LPrinter .d ("entryPoint ====== $pictureSource " );
249259 String inSource = pictureSource;
250260 BackgroundIsolateBinaryMessenger .ensureInitialized (rootIsolateToken);
251- await Rhttp .init ();
261+ await r. Rhttp .init ();
252262 await Hoster .initMap ();
253263 Hoster .dnsQueryFetcher ();
254- await PixivImage .generatePixivCache ();
264+ final dio = Dio ();
265+ final client = await r.RhttpCompatibleClient .createSync (
266+ settings: (message.disableBypassSni || pictureSource != ImageHost )
267+ ? null
268+ : r.ClientSettings (
269+ tlsSettings: r.TlsSettings (verifyCertificates: false , sni: false ),
270+ dnsSettings: r.DnsSettings .dynamic (
271+ resolver: (host) async {
272+ if (host == 'i.pximg.net' ) {
273+ return [Hoster .iPximgNet ()];
274+ }
275+ if (host == 's.pximg.net' ) {
276+ return [Hoster .sPximgNet ()];
277+ }
278+ return await InternetAddress .lookup (
279+ host,
280+ ).then ((value) => value.map ((e) => e.address).toList ());
281+ },
282+ ),
283+ ),
284+ );
285+ dio.httpClientAdapter = ConversionLayerAdapter (client);
286+ DioCacheManager .initialize (dio);
255287 ReceivePort receivePort = ReceivePort ();
256288 sendPort.send (
257289 IsoContactBean (state: IsoTaskState .INIT , data: receivePort.sendPort),
0 commit comments