diff --git a/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart b/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart index bf391d7..2ffd011 100644 --- a/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart +++ b/lib/modules/manga/detail/providers/update_manga_detail_providers.g.dart @@ -6,7 +6,7 @@ part of 'update_manga_detail_providers.dart'; // RiverpodGenerator // ************************************************************************** -String _$updateMangaDetailHash() => r'82c52aa8760fb455e6558be925d05f5f0703af98'; +String _$updateMangaDetailHash() => r'a86fe8fea46e411203182287c970cd80cc9a1a0c'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/modules/manga/detail/widgets/chapter_list_tile_widget.dart b/lib/modules/manga/detail/widgets/chapter_list_tile_widget.dart index 4338ec7..2316bcd 100644 --- a/lib/modules/manga/detail/widgets/chapter_list_tile_widget.dart +++ b/lib/modules/manga/detail/widgets/chapter_list_tile_widget.dart @@ -97,7 +97,10 @@ class ChapterListTileWidget extends ConsumerWidget { int.parse(chapter.lastPageRead!)) .toString() .substringBefore(".")) - : l10n.page(chapter.lastPageRead!), + : l10n.page(chapter.manga.value!.itemType == + ItemType.manga + ? chapter.lastPageRead! + : "${((double.tryParse(chapter.lastPageRead!) ?? 0) * 100).toStringAsFixed(0)} %"), style: TextStyle( fontSize: 11, color: context.isLight diff --git a/lib/modules/manga/download/providers/download_provider.g.dart b/lib/modules/manga/download/providers/download_provider.g.dart index 9504b9d..4ae49a4 100644 --- a/lib/modules/manga/download/providers/download_provider.g.dart +++ b/lib/modules/manga/download/providers/download_provider.g.dart @@ -6,7 +6,7 @@ part of 'download_provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$downloadChapterHash() => r'44f8aeae592a90e0c657da0263276997afbbe433'; +String _$downloadChapterHash() => r'de8e2d5b952071bc0d014fc3aa5c9b0714fbcee0'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/modules/manga/reader/widgets/btn_chapter_list_dialog.dart b/lib/modules/manga/reader/widgets/btn_chapter_list_dialog.dart index a9c95a6..6d7c50a 100644 --- a/lib/modules/manga/reader/widgets/btn_chapter_list_dialog.dart +++ b/lib/modules/manga/reader/widgets/btn_chapter_list_dialog.dart @@ -137,7 +137,7 @@ class _ChapterListTileState extends State { if (!chapter.isRead!) if (chapter.lastPageRead!.isNotEmpty && chapter.lastPageRead != "1") - if (chapter.scanlator!.isNotEmpty) + if (chapter.scanlator != null && chapter.scanlator!.isNotEmpty) Row( children: [ const Text(' • '), diff --git a/lib/modules/novel/novel_reader_controller_provider.dart b/lib/modules/novel/novel_reader_controller_provider.dart index 0cb110d..621106e 100644 --- a/lib/modules/novel/novel_reader_controller_provider.dart +++ b/lib/modules/novel/novel_reader_controller_provider.dart @@ -1,5 +1,3 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:isar/isar.dart'; import 'package:mangayomi/main.dart'; import 'package:mangayomi/models/chapter.dart'; @@ -7,25 +5,9 @@ import 'package:mangayomi/models/download.dart'; import 'package:mangayomi/models/history.dart'; import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/models/settings.dart'; -import 'package:mangayomi/models/track.dart'; -import 'package:mangayomi/models/track_preference.dart'; -import 'package:mangayomi/modules/manga/detail/providers/track_state_providers.dart'; -import 'package:mangayomi/modules/more/settings/track/providers/track_providers.dart'; -import 'package:mangayomi/utils/chapter_recognition.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'novel_reader_controller_provider.g.dart'; -BoxFit getBoxFit(ScaleType scaleType) { - return switch (scaleType) { - ScaleType.fitHeight => BoxFit.fitHeight, - ScaleType.fitWidth => BoxFit.fitWidth, - ScaleType.fitScreen => BoxFit.contain, - ScaleType.originalSize => BoxFit.cover, - ScaleType.smartFit => BoxFit.contain, - _ => BoxFit.cover - }; -} - @riverpod class NovelReaderController extends _$NovelReaderController { @override @@ -115,7 +97,7 @@ class NovelReaderController extends _$NovelReaderController { } } if (index == null) { - final chapters = getManga().chapters.toList().reversed.toList(); + final chapters = getManga().chapters.toList().toList(); for (var i = 0; i < chapters.length; i++) { if (chapters[i].id == chapter.id) { index = i + 1; @@ -135,7 +117,7 @@ class NovelReaderController extends _$NovelReaderController { } } if (index == null) { - final chapters = getManga().chapters.toList().reversed.toList(); + final chapters = getManga().chapters.toList().toList(); for (var i = 0; i < chapters.length; i++) { if (chapters[i].id == chapter.id) { index = i - 1; @@ -155,7 +137,7 @@ class NovelReaderController extends _$NovelReaderController { } } if (index == null) { - final chapters = getManga().chapters.toList().reversed.toList(); + final chapters = getManga().chapters.toList().toList(); for (var i = 0; i < chapters.length; i++) { if (chapters[i].id == chapter.id) { index = i; @@ -170,14 +152,14 @@ class NovelReaderController extends _$NovelReaderController { final prevChapIdx = getPrevChapterIndex(); return prevChapIdx.$2 ? getManga().getFilteredChapterList()[prevChapIdx.$1] - : getManga().chapters.toList().reversed.toList()[prevChapIdx.$1]; + : getManga().chapters.toList().toList()[prevChapIdx.$1]; } Chapter getNextChapter() { final nextChapIdx = getNextChapterIndex(); return nextChapIdx.$2 ? getManga().getFilteredChapterList()[nextChapIdx.$1] - : getManga().chapters.toList().reversed.toList()[nextChapIdx.$1]; + : getManga().chapters.toList().toList()[nextChapIdx.$1]; } int getChaptersLength(bool isInFilterList) { @@ -199,59 +181,9 @@ class NovelReaderController extends _$NovelReaderController { } } -extension ChapterExtensions on Chapter { - void updateTrackChapterRead(dynamic ref) { - if (!(ref is WidgetRef || ref is Ref)) return; - final updateProgressAfterReading = - ref.watch(updateProgressAfterReadingStateProvider); - if (!updateProgressAfterReading) return; - final manga = this.manga.value!; - final chapterNumber = - ChapterRecognition().parseChapterNumber(manga.name!, name!); - - final tracks = isar.tracks - .filter() - .idIsNotNull() - .isMangaEqualTo(manga.itemType == ItemType.manga) - .mangaIdEqualTo(manga.id!) - .findAllSync(); - - if (tracks.isEmpty) return; - for (var track in tracks) { - final service = isar.trackPreferences - .filter() - .syncIdIsNotNull() - .syncIdEqualTo(track.syncId) - .findFirstSync(); - if (!(service == null || chapterNumber <= (track.lastChapterRead ?? 0))) { - if (track.status != TrackStatus.completed) { - track.lastChapterRead = chapterNumber; - if (track.lastChapterRead == track.totalChapter && - (track.totalChapter ?? 0) > 0) { - track.status = TrackStatus.completed; - track.finishedReadingDate = DateTime.now().millisecondsSinceEpoch; - } else { - track.status = manga.itemType == ItemType.manga - ? TrackStatus.reading - : TrackStatus.watching; - if (track.lastChapterRead == 1) { - track.startedReadingDate = DateTime.now().millisecondsSinceEpoch; - } - } - } - ref - .read(trackStateProvider( - track: track, isManga: manga.itemType == ItemType.manga) - .notifier) - .updateManga(); - } - } - } -} - extension MangaExtensions on Manga { List getFilteredChapterList() { - final data = this.chapters.toList().reversed.toList(); + final data = this.chapters.toList().toList(); final filterUnread = (isar.settings .getSync(227)! .chapterFilterUnreadList! diff --git a/lib/modules/novel/novel_reader_controller_provider.g.dart b/lib/modules/novel/novel_reader_controller_provider.g.dart index 9229468..0d0d48b 100644 --- a/lib/modules/novel/novel_reader_controller_provider.g.dart +++ b/lib/modules/novel/novel_reader_controller_provider.g.dart @@ -7,7 +7,7 @@ part of 'novel_reader_controller_provider.dart'; // ************************************************************************** String _$novelReaderControllerHash() => - r'9ac937ab7fcc82a99088128f0f12f1aaad7fa1e8'; + r'2eec885b858de8195e31a2d0b70feb56c1dc4268'; /// Copied from Dart SDK class _SystemHash { diff --git a/lib/modules/novel/novel_reader_view.dart b/lib/modules/novel/novel_reader_view.dart index cbc768f..79ff04b 100644 --- a/lib/modules/novel/novel_reader_view.dart +++ b/lib/modules/novel/novel_reader_view.dart @@ -217,72 +217,86 @@ class _NovelWebViewState extends ConsumerState child: SingleChildScrollView( controller: _scrollController, physics: const BouncingScrollPhysics(), - child: Column( - children: [ - HtmlWidget( - htmlContent, - customStylesBuilder: (element) { - switch (backgroundColor) { - case BackgroundColor.black: - return { - 'background-color': 'black', - }; - default: - return { - 'background-color': '#F0F0F0', - }; - } - }, - onTapUrl: (url) { - context.push("/mangawebview", - extra: {'url': url, 'title': url}); - return true; - }, - renderMode: RenderMode.column, - textStyle: TextStyle( - color: backgroundColor == - BackgroundColor.white - ? Colors.black - : Colors.white, - fontSize: 14), - ), - Center( - child: IconButton( - padding: const EdgeInsets.all(5), - onPressed: () => - pushReplacementMangaReaderView( - context: context, - chapter: - _readerController.getPrevChapter(), - ), - icon: Icon( - Icons.arrow_back, - color: backgroundColor == - BackgroundColor.white - ? Colors.black - : Colors.white, + child: GestureDetector( + behavior: HitTestBehavior.translucent, + onTap: () { + _isViewFunction(); + }, + child: Column( + children: [ + HtmlWidget( + htmlContent, + customStylesBuilder: (element) { + switch (backgroundColor) { + case BackgroundColor.black: + return { + 'background-color': 'black', + }; + default: + return { + 'background-color': '#F0F0F0', + }; + } + }, + onTapUrl: (url) { + context.push("/mangawebview", + extra: {'url': url, 'title': url}); + return true; + }, + renderMode: RenderMode.column, + textStyle: TextStyle( + color: backgroundColor == + BackgroundColor.white + ? Colors.black + : Colors.white, + fontSize: 14), + ), + Center( + heightFactor: 2, + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + spacing: 5, + children: [ + IconButton( + padding: const EdgeInsets.all(5), + onPressed: () => + pushReplacementMangaReaderView( + context: context, + chapter: _readerController + .getPrevChapter(), + ), + icon: Icon( + size: 32, + Icons.arrow_back, + color: backgroundColor == + BackgroundColor.white + ? Colors.black + : Colors.white, + ), + ), + IconButton( + padding: const EdgeInsets.all(5), + onPressed: () => + pushReplacementMangaReaderView( + context: context, + chapter: _readerController + .getNextChapter(), + ), + icon: Icon( + size: 32, + Icons.arrow_forward, + color: backgroundColor == + BackgroundColor.white + ? Colors.black + : Colors.white, + ), + ), + ], ), ), - ), - Center( - child: IconButton( - padding: const EdgeInsets.all(5), - onPressed: () => - pushReplacementMangaReaderView( - context: context, - chapter: - _readerController.getNextChapter(), - ), - icon: Icon( - Icons.arrow_forward, - color: backgroundColor == - BackgroundColor.white - ? Colors.black - : Colors.white, - ), - ), - ), - ], + ], + ), ), ), ); @@ -296,8 +310,8 @@ class _NovelWebViewState extends ConsumerState )), ], ), - _gestureRightLeft(), - _gestureTopBottom(), + //_gestureRightLeft(), + //_gestureTopBottom(), _appBar(), ], ), diff --git a/lib/services/get_chapter_pages.g.dart b/lib/services/get_chapter_pages.g.dart index 62e0dda..02af665 100644 --- a/lib/services/get_chapter_pages.g.dart +++ b/lib/services/get_chapter_pages.g.dart @@ -6,7 +6,7 @@ part of 'get_chapter_pages.dart'; // RiverpodGenerator // ************************************************************************** -String _$getChapterPagesHash() => r'8a2606a6640046cb006b24516bf88512f3204aca'; +String _$getChapterPagesHash() => r'5b18b20360abecf1125f27c32b10977dd18f1831'; /// Copied from Dart SDK class _SystemHash {