package main import ( "encoding/json" "fmt" "strconv" "time" "github.com/gookit/color" "github.com/xujiajun/nutsdb" ) func Arbeiten() { for range time.Tick(time.Hour) { Arbeit() } } func Arbeit() { // season data _, bytes, err := GetSeasonDataAll() if err != nil { color.Errorln(err.Error()) logOut.WriteError(err) } else { err = seasoncache.Set(seasonApiJikan, bytes) if err != nil { color.Errorln(err.Error()) logOut.WriteError(err) } } // refresh animelist of users animesUsers, err := ReadAnimeUsers() if err != nil { if err != nutsdb.ErrBucketEmpty { color.Errorln(err.Error()) logOut.WriteError(err) } return } // iterate anime for _, a := range animesUsers { // iterate users for _, u := range a.Users { newProgress, updated, err := FetchProgress(a.Anime, u.MalID, u.Username, u.Progress) if err != nil { color.Errorln(err.Error()) logOut.WriteError(err) continue } if newProgress == u.Progress { continue } // update db color.Infof("%s progress von %d: %d -> %d\n", u.Username, a.Anime, u.Progress, newProgress) logOut.WriteLine(fmt.Sprintf("📜 %s progress von %d: %d -> %d", u.Username, a.Anime, u.Progress, newProgress)) err = UpdateUserAnimeProgress(a.Anime, u.MalID, newProgress, updated) if err != nil { color.Errorln(err.Error()) logOut.WriteError(err) } } } } func LangeArbeiten() { for range time.Tick(6 * time.Hour) { LangeArbeit() } } func LangeArbeit() { count := 0 // refresh user cache regUsers, err := ReadRegisteredUsers() if err != nil { // check if no users registered if err != nutsdb.ErrBucketEmpty { color.Errorln(err.Error()) logOut.WriteError(err) } } else { for _, u := range regUsers { _, _, err = GetUserData(u.Username) if err != nil { color.Errorln(err.Error()) logOut.WriteError(err) continue } count++ } } color.Infof("%d User aktualisiert\n", count) logOut.WriteLine(fmt.Sprintf("🔃 %d User aktualisiert", count)) count = 0 // refresh anime cache with watched animesUsers, err := ReadAnimeUsers() if err != nil { if err != nutsdb.ErrBucketEmpty { color.Errorln(err.Error()) logOut.WriteError(err) } } else { 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()) logOut.WriteError(err) continue } count++ } } color.Infof("%d Anime aktualisiert\n", count) logOut.WriteLine(fmt.Sprintf("🔃 %d Anime aktualisiert", count)) } func SehrLangeArbeiten() { for range time.Tick(time.Hour * 24) { err := DbClean() if err != nil { color.Errorln(err.Error()) logOut.WriteError(err) } } } 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 }