diff --git a/changelog.md b/changelog.md index d989dc6..741fd19 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,8 @@ ## [Unreleased] + - Add support for `series_title` and `episode_descriptor` in film meta + ## [0.17.10] - 2026-01-08 - Convert CRLF line endings to LF because blackfriday (markdown lib) doesn't diff --git a/kibble/api/films.go b/kibble/api/films.go index 2157b5d..d30bfc8 100644 --- a/kibble/api/films.go +++ b/kibble/api/films.go @@ -171,8 +171,10 @@ func (f filmV2) mapToModel(serviceConfig models.ServiceConfig, itemIndex models. Refs: models.FilmRefs{ LetterboxdID: f.Refs.LetterboxdID, }, - Subtitles: f.Subtitles, - CarouselFocus: f.CarouselFocus, + Subtitles: f.Subtitles, + CarouselFocus: f.CarouselFocus, + SeriesTitle: f.SeriesTitle, + EpisodeDescriptor: f.EpisodeDescriptor, } film.Images = models.ImageMapToImageSet(film.ImageMap) @@ -266,29 +268,31 @@ type filmV2 struct { Studio []struct { Name string `json:"name"` } `json:"studio"` - Overview string `json:"overview"` - Tagline string `json:"tagline"` - ReleaseDate string `json:"release_date,omitempty"` - Runtime float64 `json:"runtime"` - Countries []string `json:"countries"` - Languages []string `json:"languages"` - Genres []string `json:"genres"` - Tags []string `json:"tags"` - Title string `json:"title"` - CarouselFocus string `json:"carousel_focus"` - Slug string `json:"slug"` - FilmID int `json:"film_id"` - ID int `json:"id"` - ImageUrls map[string]string `json:"image_urls"` - Recommendations []string `json:"recommendations"` - Subtitles []string `json:"subtitles"` - SubtitleTracks []subtitleTrackV1 `json:"subtitle_tracks"` - Classifications map[string]classificationV1 `json:"classifications"` - SeoTitle string `json:"seo_title"` - SeoKeywords string `json:"seo_keywords"` - SeoDescription string `json:"seo_description"` - CustomFields map[string]interface{} `json:"custom"` - Refs struct { + Overview string `json:"overview"` + Tagline string `json:"tagline"` + ReleaseDate string `json:"release_date,omitempty"` + Runtime float64 `json:"runtime"` + Countries []string `json:"countries"` + Languages []string `json:"languages"` + Genres []string `json:"genres"` + Tags []string `json:"tags"` + Title string `json:"title"` + CarouselFocus string `json:"carousel_focus"` + Slug string `json:"slug"` + FilmID int `json:"film_id"` + ID int `json:"id"` + ImageUrls map[string]string `json:"image_urls"` + Recommendations []string `json:"recommendations"` + Subtitles []string `json:"subtitles"` + SubtitleTracks []subtitleTrackV1 `json:"subtitle_tracks"` + Classifications map[string]classificationV1 `json:"classifications"` + SeoTitle string `json:"seo_title"` + SeoKeywords string `json:"seo_keywords"` + SeoDescription string `json:"seo_description"` + SeriesTitle string `json:"series_title"` + EpisodeDescriptor string `json:"episode_descriptor"` + CustomFields map[string]interface{} `json:"custom"` + Refs struct { LetterboxdID string `json:"letterboxd_id"` } `json:"refs"` AwardCategories []struct { diff --git a/kibble/models/film.go b/kibble/models/film.go index 4b4e209..f8e0032 100644 --- a/kibble/models/film.go +++ b/kibble/models/film.go @@ -17,44 +17,46 @@ package models import ( "fmt" "sort" - "time" "strconv" + "time" "kibble/utils" ) // Film - all of the film bits type Film struct { - ID int - Slug string - Title string - TitleSlug string - Trailers []Trailer - Bonuses BonusContentCollection - Cast []CastMember - Crew CrewMembers - Studio []string - Overview string - Tagline string - ReleaseDate time.Time - Runtime Runtime - Countries StringCollection - Languages StringCollection - Genres StringCollection - AwardCategories []AwardCategory - Tags StringCollection - Seo Seo - Images ImageSet - ImageMap ImageMap - Prices PriceInfo - Available Period - Recommendations []GenericItem - Subtitles []string - SubtitleTracks []SubtitleTrack - CustomFields CustomFields - Refs FilmRefs - Classifications []Classification - CarouselFocus string + ID int + Slug string + Title string + TitleSlug string + Trailers []Trailer + Bonuses BonusContentCollection + Cast []CastMember + Crew CrewMembers + Studio []string + Overview string + Tagline string + ReleaseDate time.Time + Runtime Runtime + Countries StringCollection + Languages StringCollection + Genres StringCollection + AwardCategories []AwardCategory + Tags StringCollection + Seo Seo + Images ImageSet + ImageMap ImageMap + Prices PriceInfo + Available Period + Recommendations []GenericItem + Subtitles []string + SubtitleTracks []SubtitleTrack + CustomFields CustomFields + Refs FilmRefs + Classifications []Classification + CarouselFocus string + SeriesTitle string + EpisodeDescriptor string } // FilmCollection - all films @@ -63,7 +65,7 @@ type FilmCollection map[string]*Film // FindFilmByID - find film by id func (films *FilmCollection) FindFilmByID(filmID int) (*Film, bool) { coll := *films - if val, ok := coll["/film/" + strconv.Itoa(filmID)]; ok { + if val, ok := coll["/film/"+strconv.Itoa(filmID)]; ok { return val, true } return nil, false @@ -133,7 +135,7 @@ func (films *FilmCollection) MakeTitleSlugsUnique() { } // find the correct value to update, without making a copy - if val, ok := (*films)["/film/" + strconv.Itoa(group[j])]; ok { + if val, ok := (*films)["/film/"+strconv.Itoa(group[j])]; ok { val.TitleSlug = fmt.Sprintf("%s-%d", val.TitleSlug, j+1) } }