feat(meta): Cleanup

This commit is contained in:
2023-02-06 15:19:55 +01:00
parent 8b17f68eed
commit 8712dbb9de
25 changed files with 384 additions and 378 deletions

View File

@@ -1,62 +1,9 @@
import 'package:anitrack/src/data/type.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'anime.freezed.dart';
part 'anime.g.dart';
/// The watch state of an anime
enum AnimeTrackingState {
watching, // 0
completed, // 1
planToWatch, // 2
dropped, // 3
/// This is a pseudo state, i.e. it should never be set
all, // -1
}
extension AnimeTrackStateExtension on AnimeTrackingState {
int toInteger() {
assert(this != AnimeTrackingState.all, 'AnimeTrackingState.all must not be serialized');
switch (this) {
case AnimeTrackingState.watching: return 0;
case AnimeTrackingState.completed: return 1;
case AnimeTrackingState.planToWatch: return 2;
case AnimeTrackingState.dropped: return 3;
case AnimeTrackingState.all: return -1;
}
}
String toNameString() {
assert(this != AnimeTrackingState.all, 'AnimeTrackingState.all must not be stringified');
switch (this) {
case AnimeTrackingState.watching: return 'Watching';
case AnimeTrackingState.completed: return 'Completed';
case AnimeTrackingState.planToWatch: return 'Plan to watch';
case AnimeTrackingState.dropped: return 'Dropped';
case AnimeTrackingState.all: return 'All';
}
}
}
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
@freezed
class AnimeTrackingData with _$AnimeTrackingData{
@@ -64,7 +11,7 @@ class AnimeTrackingData with _$AnimeTrackingData{
/// The ID of the anime
String id,
/// The state of the anime
@AnimeTrackingStateConverter() AnimeTrackingState state,
@MediumTrackingStateConverter() MediumTrackingState state,
/// The title of the anime
String title,
/// Episodes in total.