]> git.lizzy.rs Git - go-anidb.git/blobdiff - file.go
anidb: Add EpisodeString field to File
[go-anidb.git] / file.go
diff --git a/file.go b/file.go
index 738fa870e00563082a1ef9b5bcb7f50fca8dc062..6606f23a73ea347cc4f86f6060bc1fe488a8db71 100644 (file)
--- 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
+}