@@ -5,7 +5,6 @@ import 'package:flutter/foundation.dart'; // For compute()
55import '../screens/custom_toast.dart' ;
66import '../modules/light_novel.dart' ;
77import '../services/history_service_v2.dart' ;
8- import '../services/crawler_service.dart' ;
98import '../services/eye_protection_service.dart' ;
109import '../widgets/eye_protection_overlay.dart' ;
1110import '../widgets/eye_friendly_text.dart' ;
@@ -322,8 +321,6 @@ class _ReaderScreenState extends State<ReaderScreen>
322321 late EyeProtectionService _eyeProtectionService;
323322 DateTime _readingStartTime = DateTime .now ();
324323
325- final CrawlerService _crawlerService = CrawlerService ();
326-
327324 @override
328325 void initState () {
329326 super .initState ();
@@ -377,45 +374,48 @@ class _ReaderScreenState extends State<ReaderScreen>
377374 if (widget.novel == null ) return ;
378375
379376 try {
380- final novelDetails = await _crawlerService.getNovelDetails (
377+ // 1. Dùng ApiService gọi data về (Object NovelDetail chuẩn chỉ)
378+ final novelDetails = await _apiService.fetchNovelDetail (
381379 widget.novel! .url,
382- context,
383380 );
384381
385382 if (mounted) {
386- final List <Map <String , dynamic >> chapters =
387- (novelDetails['chapters' ] as List <dynamic >? )
388- ? .cast <Map <String , dynamic >>() ??
389- [];
383+ // 2. Làm phẳng danh sách chương (Gộp tất cả Volume lại thành 1 list)
384+ // Vì trong model mới: NovelDetail -> List<Volume> -> List<Chapter>
385+ final List <Chapter > allChapters = [];
386+ for (var vol in novelDetails.volumes) {
387+ allChapters.addAll (vol.chapters);
388+ }
390389
391- if (chapters .isNotEmpty) {
392- // Find current chapter index
390+ if (allChapters .isNotEmpty) {
391+ // 3. Tìm vị trí chương hiện tại
393392 int currentIndex = - 1 ;
394- for (int i = 0 ; i < chapters.length; i++ ) {
395- if (chapters[i]['title' ] == widget.chapterTitle) {
393+ for (int i = 0 ; i < allChapters.length; i++ ) {
394+ // So sánh tiêu đề để tìm chương đang đọc
395+ if (allChapters[i].title == widget.chapterTitle) {
396396 currentIndex = i;
397397 break ;
398398 }
399399 }
400400
401401 if (currentIndex != - 1 ) {
402- // Check if has next chapter
403- if (currentIndex < chapters .length - 1 ) {
402+ // 4. Xử lý chương TIẾP THEO
403+ if (currentIndex < allChapters .length - 1 ) {
404404 setState (() {
405405 _hasNextChapter = true ;
406- final nextChapter = chapters [currentIndex + 1 ];
407- _nextChapterUrl = nextChapter[ ' url' ] ?? '' ;
408- _nextChapterTitle = nextChapter[ ' title' ] ?? 'Next Chapter' ;
406+ final nextChapter = allChapters [currentIndex + 1 ];
407+ _nextChapterUrl = nextChapter. url;
408+ _nextChapterTitle = nextChapter. title;
409409 });
410410 }
411411
412- // Check if has previous chapter
412+ // 5. Xử lý chương TRƯỚC ĐÓ
413413 if (currentIndex > 0 ) {
414414 setState (() {
415415 _hasPreviousChapter = true ;
416- final prevChapter = chapters [currentIndex - 1 ];
417- _prevChapterUrl = prevChapter[ ' url' ] ?? '' ;
418- _prevChapterTitle = prevChapter[ ' title' ] ?? 'Previous Chapter' ;
416+ final prevChapter = allChapters [currentIndex - 1 ];
417+ _prevChapterUrl = prevChapter. url;
418+ _prevChapterTitle = prevChapter. title;
419419 });
420420 }
421421 }
@@ -1700,7 +1700,7 @@ class _ReaderScreenState extends State<ReaderScreen>
17001700
17011701 // Method to fix image URLs before loading
17021702 String _fixImageUrl (String url) {
1703- // First check if the URL is from a known problematic domain
1703+ // Giữ lại logic thay thế domain lỗi (docln -> hako)
17041704 final domainPatterns = {
17051705 'i.docln.net' : 'i.hako.vn' ,
17061706 'i2.docln.net' : 'i.hako.vn' ,
@@ -1714,13 +1714,9 @@ class _ReaderScreenState extends State<ReaderScreen>
17141714 }
17151715 }
17161716
1717- // Use the crawler service's fixImageUrl if available
1718- try {
1719- return _crawlerService.fixImageUrl (url);
1720- } catch (e) {
1721- print ('Error fixing image URL: $e ' );
1722- return url;
1723- }
1717+ // XÓA ĐOẠN GỌI CRAWLER SERVICE ĐI
1718+ // Trả về URL gốc nếu không cần fix
1719+ return url;
17241720 }
17251721
17261722 // Custom image widget that handles redirects and fallbacks
0 commit comments