fix: harden OMDb/TVmaze fetchers and series fallback

TVmaze: drop trailing slash from base URL (was producing //shows/), send
season/number as plain ints (TVmaze rejects zero-padding), check HTTP
status before decoding so 404 bodies stop being decoded as episodes, and
fetch /shows/{id} separately for show name + IMDb mapping —
episodebynumber does not honor embed=show despite what the docs imply.

OMDb: check HTTP status, and include a body snippet when Response is
non-True with an empty Error field so rate-limit and HTML failure modes
are diagnosable.

Both: assert that the fields we actually depend on come back non-empty
after decode. Catches silent field rename/removal without making us
fragile to TVmaze adding new optional fields.

main.processFile: split the nometadata fallback by branch. Series uses
Collection (legitimate shows can have no IMDb mapping); movies keep the
IMDBID/Title check.
This commit is contained in:
Esa Kataja
2026-05-16 19:57:01 +03:00
parent 1dab2befbd
commit b95369168c
2 changed files with 81 additions and 27 deletions
+5 -4
View File
@@ -146,12 +146,13 @@ func processFile(inputPath string, cfg *types.Config, enc *encoder.Encoder, meta
outputPath := filepath.Join(outputDir, "output.mkv")
var outFilename string
if meta.IMDBID == "" || meta.Title == "Unknown" {
outFilename = fmt.Sprintf("%s.nometadata.mkv", generateRandomString(8))
} else if isSeries {
switch {
case isSeries && meta.Collection != "":
outFilename = fmt.Sprintf("%s.S%sE%s.mkv", sanitizeFilename(meta.Collection), season, episode)
} else {
case !isSeries && meta.IMDBID != "" && meta.Title != "Unknown":
outFilename = fmt.Sprintf("%s.%s.mkv", sanitizeFilename(meta.Title), meta.IMDBID)
default:
outFilename = fmt.Sprintf("%s.nometadata.mkv", generateRandomString(8))
}
finalOutput := filepath.Join(cfg.Paths.Output, outFilename)