mangayomi-mirror/lib/modules/anime/providers/stream_controller_provider.dart
kodjomoustapha 35e5e2a015 New feature : add Anime
-add trackers support for anime
2023-07-27 19:24:18 +01:00

124 lines
3 KiB
Dart

import 'package:isar/isar.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/chapter.dart';
import 'package:mangayomi/models/history.dart';
import 'package:mangayomi/models/manga.dart';
import 'package:mangayomi/models/settings.dart';
class AnimeStreamController {
final Chapter episode;
AnimeStreamController({required this.episode});
Manga getAnime() {
return episode.manga.value!;
}
Chapter geAnime() {
return episode;
}
final incognitoMode = isar.settings.getSync(227)!.incognitoMode!;
Settings getIsarSetting() {
return isar.settings.getSync(227)!;
}
int getPrevEpisodeIndex() {
final episodes = getAnime().chapters.toList();
int? index;
for (var i = 0; i < episodes.length; i++) {
if (episodes[i].id == episode.id) {
index = i + 1;
}
}
return index!;
}
int getNextEpisodeIndex() {
final episodes = getAnime().chapters.toList();
int? index;
for (var i = 0; i < episodes.length; i++) {
if (episodes[i].id == episode.id) {
index = i - 1;
}
}
return index!;
}
Chapter getPrevEpisode() {
return getAnime().chapters.toList()[getPrevEpisodeIndex()];
}
Chapter getNextEpisode() {
return getAnime().chapters.toList()[getNextEpisodeIndex()];
}
int getChaptersLength() {
return getAnime().chapters.length;
}
Duration geTCurrentPosition() {
if (!incognitoMode) {
String position = episode.lastPageRead ?? "0";
return Duration(
milliseconds: episode.isRead!
? 0
: int.parse(position.isEmpty ? "0" : position));
}
return Duration.zero;
}
void setAnimeHistoryUpdate() {
if (!incognitoMode) {
isar.writeTxnSync(() {
Manga? manga = episode.manga.value;
manga!.lastRead = DateTime.now().millisecondsSinceEpoch;
isar.mangas.putSync(manga);
});
History? history;
final empty =
isar.historys.filter().mangaIdEqualTo(getAnime().id).isEmptySync();
if (empty) {
history = History(
mangaId: getAnime().id,
date: DateTime.now().millisecondsSinceEpoch.toString())
..chapter.value = episode;
} else {
history = (isar.historys
.filter()
.mangaIdEqualTo(getAnime().id)
.findFirstSync())!
..chapter.value = episode
..date = DateTime.now().millisecondsSinceEpoch.toString();
}
isar.writeTxnSync(() {
isar.historys.putSync(history!);
history.chapter.saveSync();
});
}
}
void setCurrentPosition(int duration) {
if (!incognitoMode) {
final chap = episode;
isar.writeTxnSync(() {
chap.lastPageRead = (duration).toString();
isar.chapters.putSync(chap);
});
}
}
String getAnimeName() {
return getAnime().name!;
}
String getSourceName() {
return getAnime().source!;
}
String getChapterTitle() {
return episode.name!;
}
}