import 'package:mangayomi/models/chapter.dart'; import 'package:mangayomi/models/manga.dart'; import 'package:mangayomi/providers/hive_provider.dart'; import 'package:mangayomi/views/more/settings/providers/incognito_mode_state_provider.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:hive/hive.dart'; part 'reader_controller_provider.g.dart'; @HiveType(typeId: 5) enum ReaderMode { @HiveField(1) vertical, @HiveField(2) ltr, @HiveField(3) rtl, @HiveField(4) verticalContinuous, @HiveField(5) webtoon } @riverpod class CurrentIndex extends _$CurrentIndex { @override int build(Chapter chapter) { final incognitoMode = ref.watch(incognitoModeStateProvider); if (!incognitoMode) { return ref .read(readerControllerProvider(chapter: chapter).notifier) .getPageIndex(); } return 0; } setCurrentIndex(int currentIndex) { state = currentIndex; } } @riverpod class ReaderController extends _$ReaderController { @override void build({required Chapter chapter}) {} Manga getManga() { return chapter.manga.value!; } Chapter geChapter() { return chapter; } ReaderMode getReaderMode() { return ref.watch(hiveBoxReaderModeProvider).get( "${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue", defaultValue: null) != null ? ref.watch(hiveBoxReaderModeProvider).get( "${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue", )! : ref.watch(hiveBoxReaderModeProvider).get("globalMangaReaderModeValue", defaultValue: ReaderMode.vertical)!; } String getReaderModeValue(ReaderMode readerMode) { return readerMode == ReaderMode.vertical ? 'Vertical' : readerMode == ReaderMode.verticalContinuous ? 'Verical continuous' : readerMode == ReaderMode.ltr ? 'Left to Right' : readerMode == ReaderMode.rtl ? 'Right to Left' : 'Webtoon'; } void setReaderMode(ReaderMode newReaderMode) { ref.watch(hiveBoxReaderModeProvider).put( "${getSourceName()}/${getMangaName()}-singleMangaReaderModeValue", newReaderMode); } void setShowPageNumber(bool value) { final incognitoMode = ref.watch(incognitoModeStateProvider); if (!incognitoMode) { ref .watch(hiveBoxMangaInfoProvider) .put("${getSourceName()}/${getMangaName()}-showPagesNumber", value); } } bool getShowPageNumber() { final incognitoMode = ref.watch(incognitoModeStateProvider); if (!incognitoMode) { return ref.watch(hiveBoxMangaInfoProvider).get( "${getSourceName()}/${getMangaName()}-showPagesNumber", defaultValue: true); } return true; } void setMangaHistoryUpdate() { final incognitoMode = ref.watch(incognitoModeStateProvider); if (!incognitoMode) { // ref.watch(hiveBoxMangaHistoryProvider).put( // '${getModelManga().lang}-${getModelManga().link}', // MangaHistoryModel( // date: DateTime.now().toString(), modelManga: getModelManga())); } } void setChapterPageLastRead(int pageIndex) async { final incognitoMode = ref.watch(incognitoModeStateProvider); // if (!incognitoMode) { // List chapter = getModelManga().chapters!; // chapter[getChapterIndex()].lastPageRead = (pageIndex + 1).toString(); // getModelManga().save(); // } } void setChapterBookmarked() { final incognitoMode = ref.watch(incognitoModeStateProvider); // if (!incognitoMode) { // final isBookmarked = getChapterBookmarked(); // List chapter = getModelManga().chapters!; // chapter[getChapterIndex()].isBookmarked = !isBookmarked; // getModelManga().save(); // } } bool getChapterBookmarked() { return true; // ref // .watch(hiveBoxMangaProvider) // .get('${getModelManga().lang}-${getModelManga().link}', // defaultValue: getModelManga())! // .chapters![getChapterIndex()] // .isBookmarked; } int getNextChapterIndex() { final chapters = getManga().chapters.toList(); int? index; for (var i = 0; i < chapters.length; i++) { if (chapters[i].id == chapter.id) { index = i + 1; } } return index!; } int getPrevChapterIndex() { final chapters = getManga().chapters.toList(); int? index; for (var i = 0; i < chapters.length; i++) { if (chapters[i].id == chapter.id) { index = i - 1; } } return index!; } int getChapterIndex() { final chapters = getManga().chapters.toList(); int? index; for (var i = 0; i < chapters.length; i++) { if (chapters[i].id == chapter.id) { index = i; } } return index!; } Chapter getNextChapter() { return getManga().chapters.toList()[getNextChapterIndex()]; } Chapter getPrevChapter() { return getManga().chapters.toList()[getPrevChapterIndex()]; } int getChaptersLength() { return getManga().chapters.length; } void setChapterIndex() { final incognitoMode = ref.watch(incognitoModeStateProvider); if (!incognitoMode) { // ref.watch(hiveBoxMangaInfoProvider).put( // "${getSourceName()}/${getMangaName()}-chapter_index", // mangaReaderModel.index.toString()); } } int getPageIndex() { final incognitoMode = ref.watch(incognitoModeStateProvider); if (!incognitoMode) { return ref.watch(hiveBoxMangaInfoProvider).get( "${getSourceName()}/${getMangaName()}/${getChapterTitle()}-page_index", defaultValue: 0); } return 0; } int getPageLength(List incognitoPageLength) { final incognitoMode = ref.watch(incognitoModeStateProvider); if (!incognitoMode) { List page = ref.watch(hiveBoxMangaInfoProvider).get( "${getSourceName()}/${getMangaName()}/${getChapterTitle()}-pageurl", ); return page.length; } return incognitoPageLength.length; } void setPageIndex(int newIndex) { final incognitoMode = ref.watch(incognitoModeStateProvider); if (!incognitoMode) { ref.watch(hiveBoxMangaInfoProvider).put( "${getSourceName()}/${getMangaName()}/${getChapterTitle()}-page_index", newIndex); } } String getMangaName() { return getManga().name!; } String getSourceName() { return '${getManga().lang}-${getManga().source!}'; } String getChapterTitle() { return chapter.name!; } }