]> git.lizzy.rs Git - go-anidb.git/commitdiff
anidb: Delete invalid cache data
authorDiogo Franco (Kovensky) <diogomfranco@gmail.com>
Mon, 15 Jul 2013 04:07:27 +0000 (01:07 -0300)
committerDiogo Franco (Kovensky) <diogomfranco@gmail.com>
Mon, 15 Jul 2013 04:07:27 +0000 (01:07 -0300)
If the API queries return errors specifically stating that requested
object doesn't exist, then delete the entry from the local cache.

animecache.go
episodecache.go
groupcache.go

index f185867ca384017826b20b6b4670820cb35a5950..4eff4b43736bcc1a39a8c92e090105d2b9a707ee 100644 (file)
@@ -121,6 +121,8 @@ func (adb *AniDB) AnimeByID(aid AID) <-chan *Anime {
                        case reply := <-udpChan:
                                if reply.Code() == 330 {
                                        cache.MarkInvalid(keys...)
+                                       // deleted AID?
+                                       cache.Delete(keys...)
 
                                        ok = false
                                        break Loop
index 0ed142e262b4f2062bb0a78132f0a82a3d92d5c3..00b2a405ec22243287504dd4a1bfa195bb79384d 100644 (file)
@@ -89,6 +89,7 @@ func (adb *AniDB) EpisodeByID(eid EID) <-chan *Episode {
                                        }
                                } else if reply.Code() == 340 {
                                        cache.MarkInvalid(keys...)
+                                       cache.Delete(keys...) // deleted EID?
                                } else {
                                        break
                                }
@@ -101,9 +102,26 @@ func (adb *AniDB) EpisodeByID(eid EID) <-chan *Episode {
                                e = ep
                                break
                        } else {
-                               // if this is somehow still a miss, then the EID<->AID map broke
-                               cache.Delete("aid", "by-eid", eid)
                                ok = false
+
+                               // check to see if we looked in the right AID
+                               found := false
+                               if a != nil {
+                                       for _, ep := range a.Episodes {
+                                               if eid == ep.EID {
+                                                       found = true
+                                                       break
+                                               }
+                                       }
+                               }
+
+                               // if found, then it's just that the anime is also stale (offline?)
+                               if found {
+                                       break
+                               } else {
+                                       // otherwise, the EID<->AID map broke
+                                       cache.Delete("aid", "by-eid", eid)
+                               }
                        }
                }
                intentMap.Notify(e, keys...)
index 65fe3339110d91ed34f54c8e336d6c03078e299f..a91ebf39470b985787c08be8ede16e406bd98bc4 100644 (file)
@@ -90,6 +90,7 @@ func (adb *AniDB) GroupByID(gid GID) <-chan *Group {
                        cache.Set(g, keys...)
                } else if reply.Code() == 350 {
                        cache.MarkInvalid(keys...)
+                       cache.Delete(keys...) // deleted group?
                }
 
                intentMap.Notify(g, keys...)
@@ -152,6 +153,8 @@ func (adb *AniDB) GroupByName(gname string) <-chan *Group {
                        cache.Set(g, "gid", gid)
                } else if reply.Code() == 350 {
                        cache.MarkInvalid(keys...)
+                       cache.Delete(keys...) // renamed group?
+                       cache.Delete(altKeys...)
                }
 
                intentMap.Notify(gid, keys...)