From 8fe7bf4d4bfc980cff6cc917c513914a1c1c1697 Mon Sep 17 00:00:00 2001 From: daru Date: Mon, 18 Apr 2022 01:46:45 +0200 Subject: [PATCH] Schedule refresh --- huso.go | 17 +++-------- praktikant.go | 82 ++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 76 insertions(+), 23 deletions(-) diff --git a/huso.go b/huso.go index 4645fef..30321f1 100644 --- a/huso.go +++ b/huso.go @@ -56,7 +56,7 @@ func main() { // cache init var err error - animeCache, err = bigcache.NewBigCache(bigcache.DefaultConfig(6 * time.Hour)) + animeCache, err = bigcache.NewBigCache(bigcache.DefaultConfig(7 * time.Hour)) if err != nil { log.Fatal(err) } @@ -85,9 +85,11 @@ func main() { } defer db.Close() - initSeason() + Arbeit() + LangeArbeit() go Arbeiten() + go LangeArbeiten() go RunWebserv() @@ -96,14 +98,3 @@ func main() { <-sc } - -func initSeason() { - _, bytes, err := GetSeasonDataAll() - if err != nil { - color.Errorln(err.Error()) - } - err = seasoncache.Set(seasonApiJikan, bytes) - if err != nil { - color.Errorln(err.Error()) - } -} diff --git a/praktikant.go b/praktikant.go index f80f88d..63a30e1 100644 --- a/praktikant.go +++ b/praktikant.go @@ -1,27 +1,68 @@ package main import ( + "encoding/json" + "strconv" "time" "github.com/gookit/color" + "github.com/xujiajun/nutsdb" ) func Arbeiten() { for range time.Tick(time.Hour) { - // Alle Daten - _, bytes, err := GetSeasonDataAll() - if err != nil { - color.Errorln(err.Error()) - } else { - err = seasoncache.Set(seasonApiJikan, bytes) - if err != nil { - color.Errorln(err.Error()) - } - } + Arbeit() } } +func Arbeit() { + // season data + _, bytes, err := GetSeasonDataAll() + if err != nil { + color.Errorln(err.Error()) + } else { + err = seasoncache.Set(seasonApiJikan, bytes) + if err != nil { + color.Errorln(err.Error()) + } + } + // refresh animelist of users + // TODO +} + func LangeArbeiten() { + for range time.Tick(6 * time.Hour) { + LangeArbeit() + } +} + +func LangeArbeit() { + // refresh anime cache with watched + animesUsers, err := ReadAnimeUsers() + if err != nil { + if err != nutsdb.ErrBucketEmpty { + color.Errorln(err.Error()) + } + return + } + count := 0 + for _, a := range animesUsers { + // search season first + _, err = SearchSeason(a.Anime) + if err != nil { + continue + } + err = refreshAnime(a.Anime) + if err != nil { + color.Errorln(err.Error()) + continue + } + count++ + } + color.Infof("%d Anime aktualisiert\n", count) +} + +func SehrLangeArbeiten() { for range time.Tick(time.Hour * 24) { err := DbClean() if err != nil { @@ -29,3 +70,24 @@ func LangeArbeiten() { } } } + +func refreshAnime(animeId int64) error { + key := strconv.FormatInt(animeId, 10) + dataMal, err := GetDataMal(animeApiMal + key + "?fields=id,title,main_picture,alternative_titles,start_date,end_date,synopsis,mean,rank,popularity,num_list_users,num_scoring_users,nsfw,media_type,status,genres,my_list_status,num_episodes,start_season,broadcast,source,average_episode_duration,rating,studios") + if err != nil { + return err + } + var animeMal AnimeDetailMal + err = json.Unmarshal(dataMal, &animeMal) + if err != nil { + return err + } + // convert to anime + anime := MalConvert(&animeMal) + data, err := json.Marshal(&anime) + if err != nil { + return err + } + animeCache.Set(key, data) + return nil +}