Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
54 changes: 29 additions & 25 deletions kibble/api/films.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 {
Expand Down
68 changes: 35 additions & 33 deletions kibble/models/film.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)
}
}
Expand Down
Loading