Skip to content

Commit f26e6ff

Browse files
author
Nekkochan0x0007
committed
[release] Patch for version 2025.10.12
1 parent 894dd76 commit f26e6ff

File tree

2 files changed

+34
-40
lines changed

2 files changed

+34
-40
lines changed

lib/screens/LightNovelDetailsScreen.dart

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
22
import '../modules/light_novel.dart';
33
import './widgets/light_novel_card.dart';
44
import './widgets/chapter_card.dart';
5-
import '../services/crawler_service.dart';
65
import '../screens/custom_toast.dart';
76
import '../screens/webview_screen.dart';
87
import '../screens/reader_screen.dart';
@@ -34,7 +33,6 @@ class LightNovelDetailsScreen extends StatefulWidget {
3433
}
3534

3635
class _LightNovelDetailsScreenState extends State<LightNovelDetailsScreen> {
37-
final CrawlerService _crawlerService = CrawlerService();
3836
final BackgroundNotificationService _backgroundService =
3937
BackgroundNotificationService();
4038
bool _isLoading = true;
@@ -165,14 +163,14 @@ class _LightNovelDetailsScreenState extends State<LightNovelDetailsScreen> {
165163
}
166164
}
167165

168-
int? _extractNumberFromString(String text, String pattern) {
169-
final regex = RegExp(pattern);
170-
final match = regex.firstMatch(text);
171-
if (match != null && match.group(1) != null) {
172-
return int.tryParse(match.group(1)!.replaceAll(RegExp(r'[,.]'), ''));
173-
}
174-
return null;
175-
}
166+
// int? _extractNumberFromString(String text, String pattern) {
167+
// final regex = RegExp(pattern);
168+
// final match = regex.firstMatch(text);
169+
// if (match != null && match.group(1) != null) {
170+
// return int.tryParse(match.group(1)!.replaceAll(RegExp(r'[,.]'), ''));
171+
// }
172+
// return null;
173+
// }
176174

177175
// Handle case when data is empty
178176
void _handleEmptyData() {

lib/screens/reader_screen.dart

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import 'package:flutter/foundation.dart'; // For compute()
55
import '../screens/custom_toast.dart';
66
import '../modules/light_novel.dart';
77
import '../services/history_service_v2.dart';
8-
import '../services/crawler_service.dart';
98
import '../services/eye_protection_service.dart';
109
import '../widgets/eye_protection_overlay.dart';
1110
import '../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

Comments
 (0)