Files

56 lines
2.1 KiB
Go
Raw Permalink Normal View History

2026-08-06 22:33:56 +12:00
package api
import "strings"
// The lifecycle word a schedule card wears: whether the show is still being made, whether
// the film has actually come out.
//
// It is *arr's own vocabulary rather than a Memby one, and deliberately so — the household
// operator reads the same word in Sonarr or Radarr, and a card that said something else
// would be a second thing to reconcile. The gateway sends both halves: the slug is what the
// television colours by, the label is what it prints, so a status this build has never
// heard of still reads correctly on a TV that predates it.
type lifecycleTag struct {
Status string
Label string
}
// seriesLifecycleTag maps Sonarr's series status. Anything unrecognised carries no tag at
// all rather than an invented one: a card with no lifecycle is the honest answer when the
// only thing we know is that Sonarr said a word we do not have.
func seriesLifecycleTag(status string) lifecycleTag {
switch strings.ToLower(strings.TrimSpace(status)) {
case "continuing":
return lifecycleTag{Status: "continuing", Label: "CONTINUING"}
case "upcoming":
return lifecycleTag{Status: "upcoming", Label: "UPCOMING"}
case "ended":
return lifecycleTag{Status: "ended", Label: "ENDED"}
2026-08-23 13:20:54 +12:00
case "cancelled", "canceled":
return lifecycleTag{Status: "cancelled", Label: "CANCELLED"}
2026-08-06 22:33:56 +12:00
case "deleted":
return lifecycleTag{Status: "deleted", Label: "REMOVED"}
default:
return lifecycleTag{}
}
}
// movieLifecycleTag maps Radarr's movie status. "inCinemas" loses its capital on the wire
// because the slug is a lookup key on the television, not prose.
func movieLifecycleTag(status string) lifecycleTag {
switch strings.ToLower(strings.TrimSpace(status)) {
case "tba":
return lifecycleTag{Status: "tba", Label: "TBA"}
case "announced":
return lifecycleTag{Status: "announced", Label: "ANNOUNCED"}
case "incinemas":
return lifecycleTag{Status: "incinemas", Label: "IN CINEMAS"}
case "released":
return lifecycleTag{Status: "released", Label: "RELEASED"}
case "deleted":
return lifecycleTag{Status: "deleted", Label: "REMOVED"}
default:
return lifecycleTag{}
}
}