feat(service): Add working database persistency

This commit is contained in:
2023-02-04 00:25:16 +01:00
parent 624c8bd78a
commit 432796d0c4
10 changed files with 538 additions and 67 deletions

View File

@@ -1,7 +1,9 @@
import 'dart:math';
import 'package:anitrack/src/data/anime.dart';
import 'package:anitrack/src/service/database.dart';
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:get_it/get_it.dart';
part 'anime_list_state.dart';
part 'anime_list_event.dart';
@@ -12,10 +14,13 @@ class AnimeListBloc extends Bloc<AnimeListEvent, AnimeListState> {
on<AnimeAddedEvent>(_onAnimeAdded);
on<AnimeEpisodeIncrementedEvent>(_onIncremented);
on<AnimeEpisodeDecrementedEvent>(_onDecremented);
on<AnimesLoadedEvent>(_onAnimesLoaded);
}
// TODO: Remove
Future<void> _onAnimeAdded(AnimeAddedEvent event, Emitter<AnimeListState> emit) async {
// Add the anime to the database
await GetIt.I.get<DatabaseService>().addAnime(event.data);
emit(
state.copyWith(
animes: List.from([
@@ -34,16 +39,18 @@ class AnimeListBloc extends Bloc<AnimeListEvent, AnimeListState> {
if (anime.episodesTotal != null && anime.episodesWatched + 1 > anime.episodesTotal!) return;
final newList = List<AnimeTrackingData>.from(state.animes);
newList[index] = anime.copyWith(
anime.episodesWatched + 1,
final newAnime = anime.copyWith(
episodesWatched: anime.episodesWatched + 1,
);
newList[index] = newAnime;
emit(
state.copyWith(
animes: newList,
),
);
print('${event.id} incremented');
await GetIt.I.get<DatabaseService>().updateAnime(newAnime);
}
Future<void> _onDecremented(AnimeEpisodeDecrementedEvent event, Emitter<AnimeListState> emit) async {
@@ -54,15 +61,25 @@ class AnimeListBloc extends Bloc<AnimeListEvent, AnimeListState> {
if (anime.episodesWatched - 1 < 0) return;
final newList = List<AnimeTrackingData>.from(state.animes);
newList[index] = anime.copyWith(
anime.episodesWatched - 1,
final newAnime = anime.copyWith(
episodesWatched: anime.episodesWatched - 1,
);
newList[index] = newAnime;
emit(
state.copyWith(
animes: newList,
),
);
print('${event.id} decremented');
await GetIt.I.get<DatabaseService>().updateAnime(newAnime);
}
Future<void> _onAnimesLoaded(AnimesLoadedEvent event, Emitter<AnimeListState> emit) async {
emit(
state.copyWith(
animes: await GetIt.I.get<DatabaseService>().loadAnimes(),
),
);
}
}

View File

@@ -22,3 +22,6 @@ class AnimeAddedEvent extends AnimeListEvent {
/// The anime to add.
final AnimeTrackingData data;
}
/// Triggered when animes are to be loaded from the database
class AnimesLoadedEvent extends AnimeListEvent {}