Author: Adam <git@apiote.tk>
watch whole season at once
db/db.go | 4 ++-- i18n/en-GB.toml | 1 + libamuse/account.go | 20 +++++++++++++------- libamuse/serie.go | 17 ++++++++++++----- templates/tvserie.html | 9 +++++++++ tmdb/serie.go | 25 +++++++------------------
diff --git a/db/db.go b/db/db.go index 978e7af9a3db4b9e12773756193e5ee4f3872f61..23bc3b4bcc70d409942b15ca35072482999fded8 100644 --- a/db/db.go +++ b/db/db.go @@ -373,7 +373,7 @@ return int(insertedRowsNumber - deletedRowsNumber), nil } -func SkipSpecials(username, itemId string, episodes []string, itemType datastructure.ItemType) (int, error) { +func WatchWholeSerie(username, itemId string, episodes []string, itemType datastructure.ItemType, datetime time.Time) (int, error) { db, err := sql.Open("sqlite3", utils.DataHome+"/amuse.db") if err != nil { fmt.Fprintf(os.Stderr, "DB open err\n") @@ -412,7 +412,7 @@ for _, episodeId := range episodes { if watched[episodeId] > 0 { continue } - _, err = tx.Exec(`insert into experiences values(?, ?, ?, ?)`, username, itemType, episodeId, "0001-01-01 00:00:00+00:00") + _, err = tx.Exec(`insert into experiences values(?, ?, ?, ?)`, username, itemType, episodeId, datetime) if err != nil { if err.Error()[:6] != "UNIQUE" { fmt.Fprintf(os.Stderr, "Insert err %v\n", err) diff --git a/i18n/en-GB.toml b/i18n/en-GB.toml index 8f70a295766f96b7652fdc304e473746c5f32090..a00330b30612f56ac18e93c672685b04ffa091ae 100644 --- a/i18n/en-GB.toml +++ b/i18n/en-GB.toml @@ -149,6 +149,7 @@ episodes = "Episodes" skipped = "Skipped" want_watch = "Want to watch" skip_specials = "Skip all specials" +watched_whole_season = "Watched whole season" [person] cast = "Cast" diff --git a/libamuse/account.go b/libamuse/account.go index 6ea4e11e15ff1a940609293684bd2bff59441021..0827924d75a7b20fbb100bb6ceb3cc7ce55fb7d9 100644 --- a/libamuse/account.go +++ b/libamuse/account.go @@ -163,7 +163,7 @@ id := strings.Split(itemId, "/") if len(id) > 1 && id[1][3] == 'A' { arg, err := gott. NewResult(gott.Tuple(args)). - Bind(getSeason0). + Bind(getSeason). Finish() if err == nil { args = arg.(gott.Tuple) @@ -186,11 +186,13 @@ id := strings.Split(itemId, "/") if len(id) > 1 && id[1][3] == 'A' { serie := result.result.(*tmdb.TvSerie) + var season int + fmt.Sscanf(id[1][1:3], "%d", &season) episodes := []string{} - for _, episode := range serie.Seasons[0].Episodes { + for _, episode := range serie.Seasons[season].Episodes { episodes = append(episodes, data.id+"/"+episode.Episode_code) } - refs, err = db.SkipSpecials(result.user.Username, id[0], episodes, datastructure.ItemType(itemType)) + refs, err = db.WatchWholeSerie(result.user.Username, id[0], episodes, datastructure.ItemType(itemType), t) } else { refs, err = db.AddToExperiences(result.user.Username, itemId, datastructure.ItemType(itemType), t) } @@ -213,11 +215,15 @@ var err error if len(id) > 1 && id[1][3] == 'A' { serie := result.result.(*tmdb.TvSerie) - episodes := []string{} - for _, episode := range serie.Seasons[0].Episodes { - episodes = append(episodes, data.id+"/"+episode.Episode_code) + var season int + fmt.Sscanf(id[1][1:3], "%d", &season) + if season == 0 { + episodes := []string{} + for _, episode := range serie.Seasons[0].Episodes { + episodes = append(episodes, data.id+"/"+episode.Episode_code) + } + err = db.ClearSpecials(result.user.Username, id[0], episodes, datastructure.ItemType(itemType)) } - err = db.ClearSpecials(result.user.Username, id[0], episodes, datastructure.ItemType(itemType)) } return gott.Tuple(args), err } diff --git a/libamuse/serie.go b/libamuse/serie.go index 521d830267da953390b8db839e9c2667c9cac83e..a62aa17095a8ba37621264f4c95977140a381a5c 100644 --- a/libamuse/serie.go +++ b/libamuse/serie.go @@ -2,11 +2,13 @@ package libamuse import ( "notabug.org/apiote/amuse/accounts" + "notabug.org/apiote/amuse/datastructure" "notabug.org/apiote/amuse/db" "notabug.org/apiote/amuse/tmdb" - "notabug.org/apiote/amuse/datastructure" + "fmt" "sort" + "strings" "notabug.org/apiote/gott" ) @@ -37,12 +39,17 @@ tvSerie.Seasons = seasons return gott.Tuple(args), err } -func getSeason0(args ...interface{}) (interface{}, error) { +func getSeason(args ...interface{}) (interface{}, error) { result := args[1].(*Result) + itemId := args[3].(string) + id := strings.Split(itemId, "/") + var seasonNumber int + fmt.Sscanf(id[1][1:3], "%d", &seasonNumber) tvSerie := result.result.(*tmdb.TvSerie) languages := result.languages - seasons, err := tmdb.GetSeason0(tvSerie, languages[0].String()) - tvSerie.Seasons = seasons + season, err := tmdb.GetSeason(tvSerie, languages[0].String(), seasonNumber) + tvSerie.Seasons = make([]tmdb.Season, seasonNumber+1) + tvSerie.Seasons[seasonNumber] = season return gott.Tuple(args), err } @@ -134,7 +141,7 @@ } watchedAndSkipped += 1 } if tvSerie.AllEpisodes > 0 { - tvSerie.Progress = min(watched * 100 / (tvSerie.AllEpisodes - skipped), 100) + tvSerie.Progress = min(watched*100/(tvSerie.AllEpisodes-skipped), 100) } tvSerie.WatchedEpisodes = watched tvSerie.SkippedEpisodes = skipped diff --git a/templates/tvserie.html b/templates/tvserie.html index 849c1f864aaff3bfba87c649f9f73af6e3edab75..25b568f5fb7d9d9a1e94d0830862b584cb61de92 100644 --- a/templates/tvserie.html +++ b/templates/tvserie.html @@ -188,6 +188,15 @@ <input type="checkbox" class="display-none" name="isOtherTime" value="true" checked /> <button type="submit" class="border-text hover-bg-grey padding-tb-_25 cursor-hand text font-1_5"><span class="padding-lr-_5 material-icon font-1_5"></span><span class="sans padding-lr-_5">{{$.Strings.Serie.skip_specials}}</span></button> </form> + {{else}} + <form action="/users/{{$.State.User.Username}}/experiences/" method="POST" class="flex flex-centre"> + <input type="hidden" name="itemId" value="{{$.Data.Id}}/S{{.Season_number_string}}A{{len .Episodes}}" /> + <input type="hidden" name="itemType" value="tvserie" /> + <input type="hidden" name="experiencedDate" value="0001-01-01"/> + <input type="hidden" name="experiencedTime" value="00:00"/> + <input type="checkbox" class="display-none" name="isOtherTime" value="true"/> + <button type="submit" class="border-text hover-bg-dark-accent cursor-hand text-black font-1_5"><span class="padding-lr-_5 material-icon font-1_5"></span><span class="sans padding-lr-_5">{{$.Strings.Serie.watched_whole_season}}</span></button> + </form> {{end}} {{range .Episodes}} <div class="flex margin-tb-1"> diff --git a/tmdb/serie.go b/tmdb/serie.go index 27e34f73b41f619abfa95dc6a7961f1346fb17db..1e86ff12fe45aa39e39d67201a922bb8cdd0b6fc 100644 --- a/tmdb/serie.go +++ b/tmdb/serie.go @@ -39,9 +39,10 @@ return i18n.FormatDateNice(e.Experiences[0], strings, timezone) } type Season struct { - Season_number int `json:"season_number"` - Episodes []Episode - Credits ShowCredits + Season_number int `json:"season_number"` + Season_number_string string + Episodes []Episode + Credits ShowCredits } type TvSerie struct { @@ -201,6 +202,7 @@ for i, episode := range season.Episodes { episode.Episode_code = fmt.Sprintf("S%02dE%02d", season.Season_number, episode.Episode_number) season.Episodes[i] = episode } + season.Season_number_string = fmt.Sprintf("%02d", season.Season_number) result.Result = season return gott.Tuple(args), err } @@ -241,7 +243,7 @@ return serie.(gott.Tuple)[1].(*network.Result).Result.(*TvSerie), nil } } -func getSeason(serie *TvSerie, language string, seasonNumber int) (Season, error) { +func GetSeason(serie *TvSerie, language string, seasonNumber int) (Season, error) { seasonNumberS := strconv.FormatInt(int64(seasonNumber), 10) s, err := gott. NewResult(gott.Tuple{&network.Request{Id: serie.Id, Language: language, Subid: seasonNumberS}, &network.Result{}}). @@ -260,24 +262,11 @@ season := *s.(gott.Tuple)[1].(*network.Result).Result.(*Season) return season, err } -func GetSeason0(serie *TvSerie, language string) ([]Season, error) { - seasons := []Season{} - var ( - err error - season Season - ) - if serie.Seasons[0].Season_number == 0 { - season, err = getSeason(serie, language, 0) - seasons = append(seasons, season) - } - return seasons, err -} - func GetSeasons(serie *TvSerie, language string) ([]Season, error) { var err error var seasons []Season for _, serieSeason := range serie.Seasons { - season, err2 := getSeason(serie, language, serieSeason.Season_number) + season, err2 := GetSeason(serie, language, serieSeason.Season_number) err = utils.Or(err, err2) seasons = append(seasons, season) }