]> git.lizzy.rs Git - go-anidb.git/blobdiff - mylistanimecache.go
anidb: Make (*AniDB).User() try harder to return a user
[go-anidb.git] / mylistanimecache.go
index c760bf33e866d59cff4d1d858e6d93a922e98afe..db75026be09264427bab1eeb4a693b02b39f9b8f 100644 (file)
@@ -30,6 +30,36 @@ func (uid UID) MyListAnime(aid AID) *MyListAnime {
        return nil
 }
 
+func (u *User) MyListAnime(aid AID) *MyListAnime {
+       if u != nil {
+               return u.UID.MyListAnime(aid)
+       }
+       return nil
+}
+
+func (a *Anime) MyList(adb *AniDB) <-chan *MyListAnime {
+       ch := make(chan *MyListAnime, 1)
+
+       if a == nil {
+               ch <- nil
+               close(ch)
+               return ch
+       }
+
+       go func() {
+               user := <-adb.GetCurrentUser()
+               if user == nil || user.UID < 1 {
+                       ch <- nil
+                       close(ch)
+                       return
+               }
+
+               ch <- <-adb.MyListAnime(a.AID)
+               close(ch)
+       }()
+       return ch
+}
+
 func (adb *AniDB) MyListAnime(aid AID) <-chan *MyListAnime {
        ch := make(chan *MyListAnime, 1)
 
@@ -48,7 +78,7 @@ func (adb *AniDB) MyListAnime(aid AID) <-chan *MyListAnime {
                }
                key := []fscache.CacheKey{"mylist-anime", user.UID, aid}
 
-               ic := make(chan notification, 1)
+               ic := make(chan notification, 2)
                go func() { ch <- (<-ic).(*MyListAnime); close(ch) }()
                if intentMap.Intent(ic, key...) {
                        return
@@ -77,22 +107,15 @@ func (adb *AniDB) MyListAnime(aid AID) <-chan *MyListAnime {
                        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:
@@ -173,10 +196,12 @@ func (adb *AniDB) parseMylistAnime(reply udpapi.APIReply) *MyListAnime {
        }
 
        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]),