@@ -5,6 +5,8 @@ import 'package:html/dom.dart' as dom;
55
66// Project imports:
77import 'package:openlib/services/instance_manager.dart' ;
8+ import 'package:openlib/services/logger.dart' ;
9+ import 'package:openlib/services/dns_resolver.dart' ;
810
911// ====================================================================
1012// DATA MODELS
@@ -56,9 +58,16 @@ class AnnasArchieve {
5658
5759 final Dio dio = Dio ();
5860 final InstanceManager _instanceManager = InstanceManager ();
61+ final AppLogger _logger = AppLogger ();
62+ final DnsResolverService _dnsResolver = DnsResolverService ();
5963 static const int maxRetries = 2 ; // Check each server 2x as per requirements
6064 static const int retryDelayMs = 500 ; // Delay between retries in milliseconds
6165
66+ AnnasArchieve () {
67+ // Configure Dio to use DNS-over-HTTPS
68+ _dnsResolver.configureDio (dio);
69+ }
70+
6271 Map <String , dynamic > defaultDioHeaders = {
6372 "user-agent" :
6473 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" ,
@@ -284,8 +293,16 @@ class AnnasArchieve {
284293 String sort = "" ,
285294 String fileType = "" ,
286295 bool enableFilters = true }) async {
296+ _logger.info ('Searching books' , tag: 'AnnasArchive' , metadata: {
297+ 'query' : searchQuery,
298+ 'content' : content,
299+ 'sort' : sort,
300+ 'fileType' : fileType,
301+ 'filtersEnabled' : enableFilters,
302+ });
303+
287304 try {
288- return await _requestWithRetry <List <BookData >>((currentBaseUrl) async {
305+ final books = await _requestWithRetry <List <BookData >>((currentBaseUrl) async {
289306 final String encodedURL = urlEncoder (
290307 searchQuery: searchQuery,
291308 content: content,
@@ -294,11 +311,16 @@ class AnnasArchieve {
294311 enableFilters: enableFilters,
295312 currentBaseUrl: currentBaseUrl);
296313
314+ _logger.debug ('Fetching search results' , tag: 'AnnasArchive' , metadata: {'url' : encodedURL});
297315 final response = await dio.get (encodedURL,
298316 options: Options (headers: defaultDioHeaders));
299317 return _parser (response.data, fileType, currentBaseUrl);
300318 });
319+
320+ _logger.info ('Search completed' , tag: 'AnnasArchive' , metadata: {'results' : books.length});
321+ return books;
301322 } on DioException catch (e) {
323+ _logger.error ('Search failed' , tag: 'AnnasArchive' , error: e.message ?? e.error);
302324 if (e.type == DioExceptionType .unknown) {
303325 throw "socketException" ;
304326 }
@@ -307,8 +329,10 @@ class AnnasArchieve {
307329 }
308330
309331 Future <BookInfoData > bookInfo ({required String url}) async {
332+ _logger.info ('Fetching book info' , tag: 'AnnasArchive' , metadata: {'url' : url});
333+
310334 try {
311- return await _requestWithRetry <BookInfoData >((currentBaseUrl) async {
335+ final data = await _requestWithRetry <BookInfoData >((currentBaseUrl) async {
312336 // Replace the base URL in the url parameter if it contains a different one
313337 String adjustedUrl = url;
314338 final urlParsed = Uri .parse (url);
@@ -319,6 +343,7 @@ class AnnasArchieve {
319343 adjustedUrl = '$currentBaseUrl ${urlParsed .path }${urlParsed .query .isNotEmpty ? "?${urlParsed .query }" : "" }' ;
320344 }
321345
346+ _logger.debug ('Fetching book details' , tag: 'AnnasArchive' , metadata: {'url' : adjustedUrl});
322347 final response = await dio.get (adjustedUrl,
323348 options: Options (headers: defaultDioHeaders));
324349 BookInfoData ? data = await _bookInfoParser (response.data, adjustedUrl, currentBaseUrl);
@@ -328,7 +353,15 @@ class AnnasArchieve {
328353 throw 'unable to get data' ;
329354 }
330355 });
356+
357+ _logger.info ('Book info retrieved successfully' , tag: 'AnnasArchive' , metadata: {
358+ 'title' : data.title,
359+ 'format' : data.format,
360+ 'hasMirror' : data.mirror != null ,
361+ });
362+ return data;
331363 } on DioException catch (e) {
364+ _logger.error ('Failed to fetch book info' , tag: 'AnnasArchive' , error: e.message ?? e.error);
332365 if (e.type == DioExceptionType .unknown) {
333366 throw "socketException" ;
334367 }
0 commit comments