X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=sidebyside;f=file.go;h=6606f23a73ea347cc4f86f6060bc1fe488a8db71;hb=c26286fdad60f98cfe170e8f6e00c3fff242e764;hp=738fa870e00563082a1ef9b5bcb7f50fca8dc062;hpb=59218ebf4cf9c2353dfa2cb416ee7d2542a3b9b9;p=go-anidb.git diff --git a/file.go b/file.go index 738fa87..6606f23 100644 --- a/file.go +++ b/file.go @@ -1,9 +1,11 @@ package anidb import ( + "encoding/json" "fmt" "github.com/Kovensky/go-anidb/misc" "image" + "strconv" "time" ) @@ -37,6 +39,10 @@ type File struct { AID AID EID EID GID GID + LID LIDMap + + EpisodeString string + EpisodeNumber misc.EpisodeList Incomplete bool @@ -62,7 +68,79 @@ type File struct { Source FileSource - OtherEpisodes misc.EpisodeList + // Map of related EIDs to percentages (range 0.0-1.0). + // The percentage indicates how much of the EID is covered by this file. + RelatedEpisodes RelatedEpisodes Cached time.Time } + +func (f *File) Anime() *Anime { + return f.AID.Anime() +} + +func (f *File) Episode() *Episode { + return f.EID.Episode() +} + +func (f *File) Group() *Group { + return f.GID.Group() +} + +func (f *File) MyList() { + _ = f.LID[0] +} + +type RelatedEpisodes map[EID]float32 + +func (er RelatedEpisodes) MarshalJSON() ([]byte, error) { + generic := make(map[string]float32, len(er)) + for k, v := range er { + generic[strconv.Itoa(int(k))] = v + } + return json.Marshal(generic) +} + +func (er RelatedEpisodes) UnmarshalJSON(b []byte) error { + var generic map[string]float32 + 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 + } + + er[EID(ik)] = v + } + + return nil +} + +type LIDMap map[UID]LID + +func (m LIDMap) MarshalJSON() ([]byte, error) { + generic := make(map[string]int, len(m)) + for k, v := range m { + generic[strconv.Itoa(int(k))] = int(v) + } + return json.Marshal(generic) +} + +func (m LIDMap) UnmarshalJSON(b []byte) error { + var generic map[string]int + 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 + } + + m[UID(ik)] = LID(v) + } + + return nil +}