loadQuran method

Future<void> loadQuran({
  1. int quranPages = QuranRepository.hafsPagesNumber,
})

Implementation

Future<void> loadQuran(
    {int quranPages = QuranRepository.hafsPagesNumber}) async {
  // حفظ آخر صفحة
  lastPage = _quranRepository.getLastPage() ?? 1;
  if (lastPage != 0) {
    jumpToPage(lastPage - 1);
  }
  // إذا كانت الصفحات لم تُملأ أو العدد غير متطابق
  if (staticPages.isEmpty || quranPages != staticPages.length) {
    // إنشاء صفحات فارغة
    staticPages.value = List.generate(
      quranPages,
      (index) => QuranPageModel(pageNumber: index + 1, ayahs: [], lines: []),
    );
    final quranJson = await _quranRepository.getQuran();
    int hizb = 1;
    int surahsIndex = 1;
    List<AyahModel> thisSurahAyahs = [];
    for (int i = 0; i < quranJson.length; i++) {
      // تحويل كل json إلى AyahModel
      final ayah = AyahModel.fromOriginalJson(quranJson[i]);
      if (ayah.surahNumber != surahsIndex) {
        surahs.last.endPage = ayahs.last.page;
        surahs.last.ayahs = thisSurahAyahs;
        surahsIndex = ayah.surahNumber!;
        thisSurahAyahs = [];
      }
      ayahs.add(ayah);
      thisSurahAyahs.add(ayah);
      staticPages[ayah.page - 1].ayahs.add(ayah);
      if (ayah.text.contains('۞')) {
        staticPages[ayah.page - 1].hizb = hizb++;
        quranStops.add(ayah.page);
      }
      if (ayah.text.contains('۩')) {
        staticPages[ayah.page - 1].hasSajda = true;
      }
      if (ayah.ayahNumber == 1) {
        ayah.text = ayah.text.replaceAll('۞', '');
        staticPages[ayah.page - 1].numberOfNewSurahs++;
        surahs.add(SurahModel(
          surahNumber: ayah.surahNumber!,
          englishName: ayah.englishName!,
          arabicName: ayah.arabicName!,
          ayahs: [],
          isDownloadedFonts: false,
        ));
        surahsStart.add(ayah.page - 1);
      }
    }
    surahs.last.endPage = ayahs.last.page;
    surahs.last.ayahs = thisSurahAyahs;
    // ملء الأسطر (lines) لكل صفحة
    for (QuranPageModel staticPage in staticPages) {
      List<AyahModel> ayas = [];
      for (AyahModel aya in staticPage.ayahs) {
        if (aya.ayahNumber == 1 && ayas.isNotEmpty) {
          ayas.clear();
        }
        if (aya.text.contains('\n')) {
          final lines = aya.text.split('\n');
          for (int i = 0; i < lines.length; i++) {
            bool centered = false;
            if ((aya.centered ?? false) && i == lines.length - 2) {
              centered = true;
            }
            final a = AyahModel.fromAya(
              ayah: aya,
              aya: lines[i],
              ayaText: lines[i],
              centered: centered,
            );
            ayas.add(a);
            if (i < lines.length - 1) {
              staticPage.lines.add(LineModel([...ayas]));
              ayas.clear();
            }
          }
        } else {
          ayas.add(aya);
        }
      }
      // إذا بقيت آيات في ayas بعد آخر سطر
      if (ayas.isNotEmpty) {
        staticPage.lines.add(LineModel([...ayas]));
      }
      ayas.clear();
    }
    update();
  }
}