type MyListAnime struct {
AID AID
- UnknownState misc.EpisodeList
- OnHDD misc.EpisodeList
- OnCD misc.EpisodeList
- Deleted misc.EpisodeList
+ EpisodesWithState MyListStateMap
WatchedEpisodes misc.EpisodeList
return nil
}
+
+type MyListStateMap map[MyListState]misc.EpisodeList
+
+func (sm MyListStateMap) MarshalJSON() ([]byte, error) {
+ generic := make(map[string]misc.EpisodeList, len(sm))
+ for k, v := range sm {
+ generic[strconv.Itoa(int(k))] = v
+ }
+ return json.Marshal(generic)
+}
+
+func (sm MyListStateMap) UnmarshalJSON(b []byte) error {
+ var generic map[string]misc.EpisodeList
+ if err := json.Unmarshal(b, &generic); err != nil {
+ return err
+ }
+ for k, v := range generic {
+ ik, err := strconv.ParseInt(k, 10, 32)
+ if err != nil {
+ return err
+ }
+
+ sm[MyListState(ik)] = v
+ }
+
+ return nil
+}
ep := <-adb.EpisodeByID(r.EID)
list := misc.EpisodeToList(&ep.Episode)
- switch r.MyListState {
- case MyListStateUnknown:
- entry.UnknownState = list
- case MyListStateHDD:
- entry.OnHDD = list
- case MyListStateCD:
- entry.OnCD = list
- case MyListStateDeleted:
- entry.Deleted = list
+ entry.EpisodesWithState = MyListStateMap{
+ r.MyListState: list,
}
if !r.DateWatched.IsZero() {
entry.WatchedEpisodes = list
}
- entry.EpisodesPerGroup = map[GID]misc.EpisodeList{
+ entry.EpisodesPerGroup = GroupEpisodes{
r.GID: list,
}
case 312:
}
return &MyListAnime{
- UnknownState: misc.ParseEpisodeList(parts[2]),
- OnHDD: misc.ParseEpisodeList(parts[3]),
- OnCD: misc.ParseEpisodeList(parts[4]),
- Deleted: misc.ParseEpisodeList(parts[5]),
+ EpisodesWithState: MyListStateMap{
+ MyListStateUnknown: misc.ParseEpisodeList(parts[2]),
+ MyListStateHDD: misc.ParseEpisodeList(parts[3]),
+ MyListStateCD: misc.ParseEpisodeList(parts[4]),
+ MyListStateDeleted: misc.ParseEpisodeList(parts[5]),
+ },
WatchedEpisodes: misc.ParseEpisodeList(parts[6]),