Delete on completed and fetch on hold

This commit is contained in:
daru
2022-05-18 21:29:46 +02:00
parent be1419bfa7
commit 95294eb344
3 changed files with 47 additions and 35 deletions

View File

@@ -549,7 +549,13 @@ func processUpdateReq(ctx *fasthttp.RequestCtx, update bool) {
if update { if update {
// anime exitsts => save // anime exitsts => save
// get watch progress // get watch progress
progress, updated, _ := FetchProgress(anime.Anime, userId, username, 0) progress, updated, listState, _ := FetchProgress(anime.Anime, userId, username, 0)
// anime is already completed big baka user
if listState == malApiStatusC {
ctx.WriteString("Du hast schon fertig geschaut bro")
ctx.SetStatusCode(fasthttp.StatusConflict)
return
}
animeData, err = AddUserToAnime(username, userId, anime.Anime, progress, updated) animeData, err = AddUserToAnime(username, userId, anime.Anime, progress, updated)
} else { } else {
// anime exitsts => delete // anime exitsts => delete

View File

@@ -30,7 +30,7 @@ func Arbeit() {
for _, a := range animesUsers { for _, a := range animesUsers {
// iterate users // iterate users
for _, u := range a.Users { for _, u := range a.Users {
newProgress, updated, err := FetchProgress(a.Anime, u.MalID, u.Username, u.Progress) newProgress, updated, listState, err := FetchProgress(a.Anime, u.MalID, u.Username, u.Progress)
if err != nil { if err != nil {
color.Errorln(err.Error()) color.Errorln(err.Error())
logOut.WriteError(err) logOut.WriteError(err)
@@ -41,21 +41,17 @@ func Arbeit() {
} }
color.Infof("%s progress von %d: %d -> %d\n", u.Username, a.Anime, u.Progress, newProgress) 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)) logOut.WriteLine(fmt.Sprintf("📜 %s progress von %d: %d -> %d", u.Username, a.Anime, u.Progress, newProgress))
animeData, err := SearchAnime(a.Anime) // check if user set anime as completed
if err != nil { if listState == malApiStatusC {
color.Errorln(err.Error()) color.Infof("%s finished %d\n", u.Username, a.Anime)
logOut.WriteError(err) logOut.WriteLine(fmt.Sprintf("📜 %s finished %d !", u.Username, a.Anime))
} else { // delete user from anime
if animeData.Episodes != 0 && newProgress >= animeData.Episodes { _, err = DeleteUserFromAnime(u.Username, u.MalID, a.Anime)
color.Infof("%s finished %d\n", u.Username, a.Anime) if err != nil {
logOut.WriteLine(fmt.Sprintf("📜 %s finished %d !", u.Username, a.Anime)) color.Errorln(err.Error())
_, err = DeleteUserFromAnime(u.Username, u.MalID, a.Anime) logOut.WriteError(err)
if err != nil {
color.Errorln(err.Error())
logOut.WriteError(err)
}
continue
} }
continue
} }
// update db // update db
err = UpdateUserAnimeProgress(a.Anime, u.MalID, newProgress, updated) err = UpdateUserAnimeProgress(a.Anime, u.MalID, newProgress, updated)

View File

@@ -145,24 +145,37 @@ func SearchAnime(animeId int64) (*Anime, error) {
return anime, err return anime, err
} }
func FetchProgress(animeId, userId int64, username string, progress int) (int, time.Time, error) { func FetchProgress(animeId, userId int64, username string, progress int) (int, time.Time, string, error) {
// check watching first // check watching first
list, _, err := GetUserAnimeListData(username, malApiStatusW) newProgress, updated, err := fetchProgressOnState(animeId, userId, progress, username, malApiStatusW)
if err != nil { if err != nil {
return 0, time.Time{}, err return newProgress, updated, "", err
} }
for _, a := range list.Data { if newProgress != -1 {
// check if found return newProgress, updated, malApiStatusW, err
if a.Node.ID == animeId { }
// check if progress changed // check on hold
if progress != a.ListStatus.NumEpisodesWatched { newProgress, updated, err = fetchProgressOnState(animeId, userId, progress, username, malApiStatusH)
return a.ListStatus.NumEpisodesWatched, a.ListStatus.UpdatedAt, nil if err != nil {
} return newProgress, updated, "", err
return progress, a.ListStatus.UpdatedAt, nil }
} if newProgress != -1 {
return newProgress, updated, malApiStatusH, err
} }
// check completed // check completed
list, _, err = GetUserAnimeListData(username, malApiStatusC) newProgress, updated, err = fetchProgressOnState(animeId, userId, progress, username, malApiStatusC)
if err != nil {
return newProgress, updated, "", err
}
if newProgress != -1 {
return newProgress, updated, malApiStatusC, err
}
// has no progress or dropped
return 0, updated, "", nil
}
func fetchProgressOnState(animeId, userId int64, progress int, username, malStatus string) (int, time.Time, error) {
list, _, err := GetUserAnimeListData(username, malStatus)
if err != nil { if err != nil {
return 0, time.Time{}, err return 0, time.Time{}, err
} }
@@ -170,14 +183,11 @@ func FetchProgress(animeId, userId int64, username string, progress int) (int, t
// check if found // check if found
if a.Node.ID == animeId { if a.Node.ID == animeId {
// check if progress changed // check if progress changed
if progress != a.ListStatus.NumEpisodesWatched { return a.ListStatus.NumEpisodesWatched, a.ListStatus.UpdatedAt, nil
return a.ListStatus.NumEpisodesWatched, a.ListStatus.UpdatedAt, nil
}
return progress, a.ListStatus.UpdatedAt, nil
} }
} }
// has no progress or dropped/hold // no progess found
return 0, time.Now(), nil return -1, time.Now(), nil
} }
func AddToChat(old, new, user string) string { func AddToChat(old, new, user string) string {