loadQuranDataV3 method
-------- Methods ----------
Implementation
// Future<void> _initSearch() async {
// quranSearch = QuranSearch(ayahs); // تأكد من أن `ayahs` محملة مسبقًا
// await quranSearch.loadModel(); // تحميل نموذج BERT
// }
Future<void> loadQuranDataV3() async {
lastPage = _quranRepository.getLastPage() ?? 1;
state.currentPageNumber.value = lastPage;
if (lastPage != 0) {
jumpToPage(lastPage - 1);
}
if (surahs.isEmpty) {
List<dynamic> surahsJson = await _quranRepository.getQuranDataV3();
surahs =
surahsJson.map((s) => SurahModel.fromDownloadedFontsJson(s)).toList();
// مزامنة القوائم على مستوى الـ instance مع state لتجنب القوائم الفارغة
// surahs.addAll(surahs);
for (final surah in surahs) {
// نقل بيانات السورة إلى كل آية حتى يعمل البحث بشكل صحيح
for (final ayah in surah.ayahs) {
ayah.surahNumber ??= surah.surahNumber;
ayah.arabicName ??= surah.arabicName;
ayah.englishName ??= surah.englishName;
}
state.allAyahs.addAll(surah.ayahs);
}
// مزامنة قائمة الآيات على مستوى الـ instance
ayahs.addAll(state.allAyahs);
List.generate(604, (pageIndex) {
state.pages.add(state.allAyahs
.where((ayah) => ayah.page == pageIndex + 1)
.toList());
});
state.isQuranLoaded = true;
_buildAyahUqIndexIfNeeded();
// تحميل كسول لملفات QPC v4 فقط عند تفعيل الخط المحمّل (code v4)
if (isQpcV4Enabled) {
// لا ننتظر هنا لتجنب إبطاء init في الحالات الأخرى.
Future(() => _ensureQpcV4AssetsLoaded());
}
// log('Pages Length: ${state.pages.length}', name: 'Quran Controller');
}
}