diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3fba76bb..ed0d3ea3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@ These changes are awaiting release:
- Show `Aired Date` for episodes.
- Import: Add `rating` column.
- Import(text list): Support parsing a rating (out of 10, supporting decimals) in square brackets.
+- Show `End Year` for TV Shows that have ended or been canceled.
## Changed
diff --git a/server/domain/media.go b/server/domain/media.go
index 6cded4ef..9b351d50 100644
--- a/server/domain/media.go
+++ b/server/domain/media.go
@@ -63,6 +63,9 @@ type Media struct {
// A link to the database we are using that lists all providers with max details.
// (especially for TMDB since it's data from JustWatch isn't available to us).
ProvidersFullListLink string `json:"providersFullListLink,omitempty"`
+ // Status of the media (released, ended, etc).
+ // Depending on media type, this will contain different values.
+ Status string `json:"status,omitempty"`
//
// Properties only for movies/tv.
@@ -78,6 +81,9 @@ type Media struct {
// details for the server to fetch fully/verify, i.e fetched full details from
// tmdb again to verify if show is anime itself, etc).
IsShowAnime bool `json:"isShowAnime,omitempty"`
+ // Last release date.
+ // Currently used for tv shows so frontend can display its end date.
+ ReleaseDateLast time.Time `json:"releaseDateLast,omitzero"`
//
// Properties only for Games
diff --git a/server/media/tmdb/structs.go b/server/media/tmdb/structs.go
index 285dd5ca..4f77e2b0 100644
--- a/server/media/tmdb/structs.go
+++ b/server/media/tmdb/structs.go
@@ -335,6 +335,7 @@ func (t *TMDBContentDetails) AsMedia() domain.Media {
Rating: uint(t.VoteAverage * 10),
RatingCount: uint(t.VoteCount),
Homepage: t.Homepage,
+ Status: t.Status,
}
// Genres
for _, g := range t.Genres {
@@ -534,6 +535,13 @@ func (t *TMDBShowDetails) AsMedia() domain.Media {
} else {
slog.Error("AsMedia: Failed to parse release date", "name", m.Name, "error", err)
}
+ if releaseDateLast, err := time.Parse("2006-01-02", t.LastAirDate); err == nil {
+ m.ReleaseDateLast = releaseDateLast
+ } else {
+ slog.Error("AsMedia: Failed to parse release date last",
+ "name", m.Name,
+ "error", err)
+ }
// IDS
m.IDs.IMDB = t.ExternalIds.ImdbID
m.IDs.Wikidata = t.ExternalIds.WikidataID
diff --git a/src/lib/content/Title.svelte b/src/lib/content/Title.svelte
index fb136062..773121e9 100644
--- a/src/lib/content/Title.svelte
+++ b/src/lib/content/Title.svelte
@@ -1,22 +1,30 @@
@@ -28,7 +36,13 @@
{titleSafe}
{/if}
{#if releaseYear}
- {releaseYear}
+
+
+ {releaseYear}{#if endYear && endYear != releaseYear}
+ -{endYear}
+ {/if}
+
{/if}
diff --git a/src/types.ts b/src/types.ts
index 8e10fab6..082585be 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -335,6 +335,8 @@ export interface Media {
watched?: Watched;
similar?: Media[];
releaseDate?: string;
+ releaseDateLast?: string;
+ status?: string;
extBackdropPath?: string;
genres?: MediaGenre[];
homepage?: string;