import 'package:mangayomi/models/manga_history.dart'; import 'package:mangayomi/models/manga_reader.dart'; import 'package:mangayomi/models/model_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(MangaReaderModel mangaReaderModel) { final incognitoMode = ref.watch(incognitoModeStateProvider); if (!incognitoMode) { return ref .read(readerControllerProvider(mangaReaderModel: mangaReaderModel) .notifier) .getPageIndex(); } return 0; } setCurrentIndex(int currentIndex) { state = currentIndex; } } @riverpod class ReaderController extends _$ReaderController { @override void build({required MangaReaderModel mangaReaderModel}) {} ModelManga getModelManga() { return mangaReaderModel.modelManga; } 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 getChapterIndex() { return mangaReaderModel.index; } 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 getModelManga().name!; } String getSourceName() { return '${getModelManga().lang}-${getModelManga().source!}'; } String getChapterTitle() { return getModelManga().chapters.toList()[mangaReaderModel.index].name!; } }