diff --git a/anime/anime_test.go b/anime/anime_test.go index 99e905e..128c68d 100644 --- a/anime/anime_test.go +++ b/anime/anime_test.go @@ -44,6 +44,42 @@ func TestSearch(t *testing.T) { }) assert.Nil(t, err) assert.Len(t, result.Results, 1, result) + mia := result.Results[0] + + fmt.Println("Title:", result.Results[0].Title) + fmt.Println("Request Cached?", result.RequestCached) + + result, err = Search( + Query{Q: "Full Metal Alchemist", + Limit: 1, + Genre: GenreAdventure, + }) + assert.Nil(t, err) + assert.Len(t, result.Results, 1, result) + + fmt.Println("Title:", result.Results[0].Title) + fmt.Println("Request Cached?", result.RequestCached) + + result, err = Search( + Query{Q: "Naruto", + Limit: 1, + Genre: GenreAdventure, + }) + assert.Nil(t, err) + assert.Len(t, result.Results, 1, result) + + fmt.Println("Title:", result.Results[0].Title) + fmt.Println("Request Cached?", result.RequestCached) + + result, err = Search( + Query{Q: "made in abyss", + Limit: 1, + Genre: GenreAdventure, + }) + assert.Nil(t, err) + assert.Len(t, result.Results, 1, result) + + assert.Equal(t, result.Results[0].MalID, mia.MalID) fmt.Println("Title:", result.Results[0].Title) fmt.Println("Request Cached?", result.RequestCached) diff --git a/anime/search.go b/anime/search.go index 08511ca..d443342 100644 --- a/anime/search.go +++ b/anime/search.go @@ -15,7 +15,7 @@ func Search(q Query) (SearchResult, error) { q.Page = 1 } - request, err := req.Get(utils.Config.AppendAPIf("/search/anime"), q.ToParam()) + request, err := utils.CachedReqGet(utils.Config.AppendAPIf("/search/anime"), q.ToParam()) if err != nil { return SearchResult{}, err } diff --git a/manga/search.go b/manga/search.go index 3fc3cdf..7b8479b 100644 --- a/manga/search.go +++ b/manga/search.go @@ -14,7 +14,7 @@ func Search(q Query) (SearchResult, error) { q.Page = 1 } - request, err := req.Get(utils.Config.AppendAPIf("/search/manga"), q.ToParam()) + request, err := utils.CachedReqGet(utils.Config.AppendAPIf("/search/manga"), q.ToParam()) if err != nil { return SearchResult{}, err } diff --git a/user/user_test.go b/user/user_test.go index a7846de..54564e5 100644 --- a/user/user_test.go +++ b/user/user_test.go @@ -20,6 +20,12 @@ func TestGetAnimeList(t *testing.T) { naux, err := GetUser(User{Username: "naux"}) assert.Nil(t, err) + _, err = GetUser(User{Username: "nekomata1037"}) + assert.Nil(t, err) + + _, err = GetUser(User{Username: "naux"}) + assert.Nil(t, err) + nauxlist, err := GetAnimeList(naux, AllList) assert.Nil(t, err) diff --git a/utils/cached_requests.go b/utils/cached_requests.go index 3acf3d9..d5e62a0 100644 --- a/utils/cached_requests.go +++ b/utils/cached_requests.go @@ -15,6 +15,8 @@ import ( "github.com/imroc/req" ) +var lastUncachedRequest = time.Now() + type CachedRequest struct { Data []byte RequestedOn time.Time @@ -60,7 +62,14 @@ func readCache(reqhash string) (*CachedRequest, error) { } func CachedReqGet(url string, v ...interface{}) (*CachedRequest, error) { - requestHash := hash(strings.ReplaceAll(url, Config.API, "")) + ttl := time.Now().Sub(lastUncachedRequest) + if ttl < time.Millisecond*500 { + sleepTime := (time.Millisecond * 500) - ttl + log.Println("Sleeping for", sleepTime) + time.Sleep(sleepTime) + } + + requestHash := hash(strings.ReplaceAll(url, Config.API, "") + fmt.Sprintf("%v", v)) cr := &CachedRequest{} if !cacheExists(requestHash) { @@ -89,6 +98,11 @@ func CachedReqGet(url string, v ...interface{}) (*CachedRequest, error) { cr.RequestedOn = time.Now() cr.ETag = data.Response().Header.Get("ETag") + if strings.Contains(string(cr.Data), "\"request_cached\": false") { + log.Println("uncached request, setting timeout for next call") + lastUncachedRequest = time.Now() + } + err = writeCache(requestHash, cr) if err != nil { return nil, fmt.Errorf("[%v] Failed to write cache: %v\n", requestHash, err) @@ -125,6 +139,10 @@ func CachedReqGet(url string, v ...interface{}) (*CachedRequest, error) { cache.ETag = data.Response().Header.Get("ETag") } cache.RequestedOn = time.Now() + if strings.Contains(string(cr.Data), "\"request_cached\": false") { + log.Println("uncached request, setting timeout for next call") + lastUncachedRequest = time.Now() + } // Write the cache err = writeCache(requestHash, cache)