Skip to content

Commit ec554ec

Browse files
authored
fix: album directory parsing with album versions (#1683)
1 parent 9c800b0 commit ec554ec

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

music_assistant/server/providers/filesystem_local/helpers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def get_album_dir(track_dir: str, album_name: str) -> str | None:
7979
if compare_strings(album_name, dirname.split(" - ")[-1], False):
8080
# account for ArtistName - AlbumName format in the directory name
8181
return parentdir
82-
if compare_strings(album_name, dirname.split("(")[0], False):
82+
if compare_strings(album_name, dirname.split(" - ")[-1].split("(")[0], False):
8383
# account for ArtistName - AlbumName (Version) format in the directory name
8484
return parentdir
8585
if compare_strings(album_name.split("(")[0], dirname, False):

tests/server/providers/filesystem/test_helpers.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
"""Tests for utility/helper functions."""
22

3+
import pytest
4+
35
from music_assistant.server.providers.filesystem_local import helpers
46

57
# ruff: noqa: S108
@@ -31,3 +33,59 @@ def test_get_artist_dir() -> None:
3133
album_path = "/tmp/Antonin Dvorak/Album"
3234
artist_name = "Antonín Dvořák"
3335
assert helpers.get_artist_dir(artist_name, album_path) == "/tmp/Antonin Dvorak"
36+
37+
38+
@pytest.mark.parametrize(
39+
("album_name", "track_dir", "expected"),
40+
[
41+
# Test literal match
42+
(
43+
"Selected Ambient Works 85-92",
44+
"/home/user/Music/Aphex Twin/Selected Ambient Works 85-92",
45+
"/home/user/Music/Aphex Twin/Selected Ambient Works 85-92",
46+
),
47+
# Test artist - album format
48+
(
49+
"Selected Ambient Works 85-92",
50+
"/home/user/Music/Aphex Twin - Selected Ambient Works 85-92",
51+
"/home/user/Music/Aphex Twin - Selected Ambient Works 85-92",
52+
),
53+
# Test artist - album (version) format
54+
(
55+
"Selected Ambient Works 85-92",
56+
"/home/user/Music/Aphex Twin - Selected Ambient Works 85-92 (Remastered)",
57+
"/home/user/Music/Aphex Twin - Selected Ambient Works 85-92 (Remastered)",
58+
),
59+
# Test artist - album (version) format
60+
(
61+
"Selected Ambient Works 85-92",
62+
"/home/user/Music/Aphex Twin - Selected Ambient Works 85-92 (Remastered) - WEB",
63+
"/home/user/Music/Aphex Twin - Selected Ambient Works 85-92 (Remastered) - WEB",
64+
),
65+
# Test album (version) format
66+
(
67+
"Selected Ambient Works 85-92",
68+
"/home/user/Music/Aphex Twin/Selected Ambient Works 85-92 (Remastered)",
69+
"/home/user/Music/Aphex Twin/Selected Ambient Works 85-92 (Remastered)",
70+
),
71+
# Test album name in dir
72+
(
73+
"Selected Ambient Works 85-92",
74+
"/home/user/Music/RandomDirWithSelected Ambient Works 85-92InIt",
75+
"/home/user/Music/RandomDirWithSelected Ambient Works 85-92InIt",
76+
),
77+
# Test no match
78+
(
79+
"NonExistentAlbumName",
80+
"/home/user/Music/Aphex Twin/Selected Ambient Works 85-92",
81+
None,
82+
),
83+
# Test empty album name
84+
("", "/home/user/Music/Aphex Twin/Selected Ambient Works 85-92", None),
85+
# Test empty track dir
86+
("Selected Ambient Works 85-92", "", None),
87+
],
88+
)
89+
def test_get_album_dir(album_name: str, track_dir: str, expected: str) -> None:
90+
"""Test the extraction of an album dir."""
91+
assert helpers.get_album_dir(track_dir, album_name) == expected

0 commit comments

Comments
 (0)