fix: prioritize local poster artwork

This commit is contained in:
ShukeBta
2026-05-29 09:52:16 +08:00
parent 12e12bfa28
commit dfe2b3f017
3 changed files with 205 additions and 22 deletions
+55 -2
View File
@@ -91,6 +91,10 @@ func TestReadLocalVarietyMetadataUsesLocalArtwork(t *testing.T) {
if err := os.WriteFile(filepath.Join(showDir, "哈哈哈哈哈.nfo"), []byte(`<tvshow><title>哈哈哈哈哈</title><genre>综艺</genre></tvshow>`), 0o644); err != nil {
t.Fatal(err)
}
showPoster := filepath.Join(showDir, "poster.jpg")
if err := os.WriteFile(showPoster, []byte("jpg"), 0o644); err != nil {
t.Fatal(err)
}
episodeThumb := filepath.Join(seasonDir, "哈哈哈哈哈 - S06E17-thumb.jpg")
if err := os.WriteFile(episodeThumb, []byte("jpg"), 0o644); err != nil {
t.Fatal(err)
@@ -110,14 +114,63 @@ func TestReadLocalVarietyMetadataUsesLocalArtwork(t *testing.T) {
if got.Title != "哈哈哈哈哈" || got.Genres != "综艺" {
t.Fatalf("unexpected metadata: %+v", got)
}
if got.PosterURL != episodeThumb {
t.Fatalf("PosterURL = %q, want %q", got.PosterURL, episodeThumb)
if got.PosterURL != showPoster {
t.Fatalf("PosterURL = %q, want show poster %q, not episode thumb %q", got.PosterURL, showPoster, episodeThumb)
}
if got.BackdropURL != backdrop {
t.Fatalf("BackdropURL = %q, want %q", got.BackdropURL, backdrop)
}
}
func TestReadLocalMetadataPrioritizesPosterOverThumbAndStills(t *testing.T) {
root := t.TempDir()
mediaPath := filepath.Join(root, "Movie.mkv")
if err := os.WriteFile(mediaPath, []byte("x"), 0o644); err != nil {
t.Fatal(err)
}
thumb := filepath.Join(root, "Movie-thumb.jpg")
if err := os.WriteFile(thumb, []byte("jpg"), 0o644); err != nil {
t.Fatal(err)
}
still := filepath.Join(root, "Movie-still.jpg")
if err := os.WriteFile(still, []byte("jpg"), 0o644); err != nil {
t.Fatal(err)
}
poster := filepath.Join(root, "poster.jpg")
if err := os.WriteFile(poster, []byte("jpg"), 0o644); err != nil {
t.Fatal(err)
}
got, err := ReadLocalMetadata(mediaPath, root, false)
if err != nil {
t.Fatal(err)
}
if got == nil || got.PosterURL != poster {
t.Fatalf("PosterURL = %q, want poster %q", got.PosterURL, poster)
}
}
func TestReadLocalMetadataIgnoresActorAndStillArtworkOnly(t *testing.T) {
root := t.TempDir()
mediaPath := filepath.Join(root, "SSIS-001.mp4")
if err := os.WriteFile(mediaPath, []byte("x"), 0o644); err != nil {
t.Fatal(err)
}
for _, name := range []string{"actor.jpg", "sample.jpg", "fanart.jpg"} {
if err := os.WriteFile(filepath.Join(root, name), []byte("jpg"), 0o644); err != nil {
t.Fatal(err)
}
}
got, err := ReadLocalMetadata(mediaPath, root, false)
if err != nil {
t.Fatal(err)
}
if got == nil || got.PosterURL != "" || got.BackdropURL == "" {
t.Fatalf("expected backdrop-only metadata without actor/still poster, got %+v", got)
}
}
func TestReadLocalMetadataWithoutNFOStillFindsArtwork(t *testing.T) {
root := t.TempDir()
mediaPath := filepath.Join(root, "Movie.mkv")