feat(service): Add working database persistency
This commit is contained in:
@@ -1,50 +1,64 @@
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
|
||||
part 'anime.freezed.dart';
|
||||
part 'anime.g.dart';
|
||||
|
||||
/// The watch state of an anime
|
||||
enum AnimeTrackingState {
|
||||
watching,
|
||||
completed,
|
||||
planToWatch,
|
||||
dropped,
|
||||
watching, // 0
|
||||
completed, // 1
|
||||
planToWatch, // 2
|
||||
dropped, // 3
|
||||
}
|
||||
|
||||
extension AnimeTrackStateExtension on AnimeTrackingState {
|
||||
int toInteger() {
|
||||
switch (this) {
|
||||
case AnimeTrackingState.watching: return 0;
|
||||
case AnimeTrackingState.completed: return 1;
|
||||
case AnimeTrackingState.planToWatch: return 2;
|
||||
case AnimeTrackingState.dropped: return 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class AnimeTrackingStateConverter implements JsonConverter<AnimeTrackingState, int> {
|
||||
const AnimeTrackingStateConverter();
|
||||
|
||||
@override
|
||||
AnimeTrackingState fromJson(int json) {
|
||||
switch (json) {
|
||||
case 0: return AnimeTrackingState.watching;
|
||||
case 1: return AnimeTrackingState.completed;
|
||||
case 2: return AnimeTrackingState.planToWatch;
|
||||
case 3: return AnimeTrackingState.dropped;
|
||||
}
|
||||
|
||||
return AnimeTrackingState.planToWatch;
|
||||
}
|
||||
|
||||
@override
|
||||
int toJson(AnimeTrackingState state) => state.toInteger();
|
||||
}
|
||||
|
||||
/// Data about a tracked anime
|
||||
class AnimeTrackingData {
|
||||
const AnimeTrackingData(
|
||||
this.id,
|
||||
this.state,
|
||||
this.title,
|
||||
this.episodesWatched,
|
||||
this.episodesTotal,
|
||||
this.thumbnailUrl,
|
||||
);
|
||||
|
||||
/// The ID of the anime
|
||||
final String id;
|
||||
|
||||
/// The state of the anime
|
||||
final AnimeTrackingState state;
|
||||
|
||||
/// The title of the anime
|
||||
final String title;
|
||||
|
||||
/// Episodes in total.
|
||||
final int? episodesTotal;
|
||||
|
||||
/// Episodes watched.
|
||||
final int episodesWatched;
|
||||
|
||||
/// URL to the thumbnail/cover art for the anime.
|
||||
final String thumbnailUrl;
|
||||
|
||||
AnimeTrackingData copyWith(
|
||||
@freezed
|
||||
class AnimeTrackingData with _$AnimeTrackingData{
|
||||
factory AnimeTrackingData(
|
||||
/// The ID of the anime
|
||||
String id,
|
||||
/// The state of the anime
|
||||
@AnimeTrackingStateConverter() AnimeTrackingState state,
|
||||
/// The title of the anime
|
||||
String title,
|
||||
/// Episodes in total.
|
||||
int episodesWatched,
|
||||
) {
|
||||
return AnimeTrackingData(
|
||||
id,
|
||||
state,
|
||||
title,
|
||||
episodesWatched,
|
||||
episodesTotal,
|
||||
thumbnailUrl,
|
||||
);
|
||||
}
|
||||
/// Episodes watched.
|
||||
int? episodesTotal,
|
||||
/// URL to the thumbnail/cover art for the anime.
|
||||
String thumbnailUrl,
|
||||
) = _AnimeTrackingData;
|
||||
|
||||
/// JSON
|
||||
factory AnimeTrackingData.fromJson(Map<String, dynamic> json) => _$AnimeTrackingDataFromJson(json);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user