X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=titlecache.go;h=a69a5e458ea92fc135b93b770f616ac8e641fd11;hb=b6d48bdc55ab772a7a4757d646fa278f259723de;hp=1100df085bc1eed4c4fa23863821e7529ce8dc7a;hpb=e54415863fb1aaa9a12d4a351557667f2d668c30;p=go-anidb.git diff --git a/titlecache.go b/titlecache.go index 1100df0..a69a5e4 100644 --- a/titlecache.go +++ b/titlecache.go @@ -1,21 +1,26 @@ package anidb import ( + "bytes" "github.com/Kovensky/go-anidb/titles" "io" + "log" "net/http" + "os" "time" ) var titlesDB = &titles.TitlesDatabase{} -// Reloads titles from the cache. +// Loads the database from anime-titles.dat.gz in the cache dir. func RefreshTitles() error { - flock := lockFile(cachePath("anime-titles.dat.gz")) - flock.Lock() - defer flock.Unlock() + if lock, err := Cache.Lock("anime-titles.dat.gz"); err != nil { + return err + } else { + defer lock.Unlock() + } - fh, err := cache.Open("anime-titles.dat.gz") + fh, err := Cache.Open("anime-titles.dat.gz") if err != nil { return err } @@ -32,34 +37,54 @@ func TitlesUpToDate() (ok bool) { // Downloads a new anime-titles database if the database is outdated. // -// Caches the contents on memory, which gets saved by DumpCaches. +// Saves the database as anime-titles.dat.gz in the cache dir. func UpdateTitles() error { // too new, no need to update if TitlesUpToDate() { return nil } - flock := lockFile(cachePath("anime-titles.dat.gz")) - flock.Lock() - defer flock.Unlock() + switch lock, err := Cache.Lock("anime-titles.dat.gz"); { + case os.IsNotExist(err): + // we're creating it now + case err == nil: + defer lock.Unlock() + default: + return err + } c := &http.Client{Transport: &http.Transport{DisableCompression: true}} + log.Printf("HTTP>>> %s", titles.DataDumpURL) + resp, err := c.Get(titles.DataDumpURL) if err != nil { + log.Printf("HTTP<<< %s", resp.Status) return err } defer resp.Body.Close() - fh, err := cache.Create("anime-titles.dat.gz") + buf := bytes.Buffer{} + log.Printf("HTTP--- %s", resp.Status) + + _, err = io.Copy(&buf, resp.Body) + if err != nil { + log.Printf("HTTP--- %v", err) + return err + } + + fh, err := Cache.Create("anime-titles.dat.gz") if err != nil { return err } - _, err = io.Copy(fh, resp.Body) + _, err = io.Copy(fh, &buf) if err != nil { return err } + defer func() { + log.Printf("HTTP<<< Titles version %s", titlesDB.UpdateTime) + }() return RefreshTitles() }