Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Better handling of albums with multiple CDs #1671

Open
Lucki opened this issue Aug 15, 2024 · 5 comments
Open

Better handling of albums with multiple CDs #1671

Lucki opened this issue Aug 15, 2024 · 5 comments
Labels
enhancement This thread requests an enhancement to be implemented.

Comments

@Lucki
Copy link
Contributor

Lucki commented Aug 15, 2024

When an album has multiple CDs the current display of them is a bit visually unpleasing.
All tracks are displayed in a list where multiple tracks have the same number:

Screenshot

grafik

Possible improvements I can imagine:

  • Keep a single list and prepend the CD number to the track number, maybe something like this: 1#01
  • One list for each CD

Lollypop example using multiple lists

grafik

@Lucki Lucki added the enhancement This thread requests an enhancement to be implemented. label Aug 15, 2024
@nukeop
Copy link
Owner

nukeop commented Aug 15, 2024

Thanks for providing examples and describing this in detail.

Here's an example of what musicbrainz returns when we're looking up this album.

So for every release group there's an array under the key "media" (pasted below). Each element of this array is a separate disc, so it's possible to keep this information in Nuclear and display it appropriately, we just need to change the internal release schema. Other metadata providers, like Discogs and Spotify also return this information.

[
    {
        "track-offset": 0,
        "position": 1,
        "title": "Viscera Cleanup Detail: The Soundtrack",
        "track-count": 15,
        "format-id": "907a28d9-b3b2-3ef6-89a8-7b18d91d4794",
        "tracks": [
            {
                "title": "Bongo in the Congo",
                "number": "1",
                "recording": {
                    "title": "Bongo in the Congo",
                    "id": "272d4382-3245-4973-bf28-b15733a3bb1b",
                    "genres": [],
                    "video": false,
                    "length": 137000,
                    "disambiguation": "",
                    "first-release-date": "2015-07-17"
                },
                "id": "68b219c3-bbbe-485d-875e-83ff24cb9415",
                "length": 137000,
                "position": 1
            },
            {
                "position": 2,
                "length": 139000,
                "id": "03d05dff-9759-467c-a32d-376c2ce3a43d",
                "recording": {
                    "disambiguation": "",
                    "genres": [],
                    "video": false,
                    "length": 139000,
                    "first-release-date": "2015-07-17",
                    "id": "2779a924-d901-430d-b353-bf951a0c99ff",
                    "title": "Squeaky Clean"
                },
                "title": "Squeaky Clean",
                "number": "2"
            },
            {
                "length": 125000,
                "position": 3,
                "title": "Goo",
                "number": "3",
                "id": "ded0055f-dba1-4498-a5a1-f07224e790e7",
                "recording": {
                    "first-release-date": "2015-07-17",
                    "length": 125000,
                    "genres": [],
                    "video": false,
                    "disambiguation": "",
                    "title": "Goo",
                    "id": "c4fecb5e-e133-4de2-81af-0acd85eb94ca"
                }
            },
            {
                "position": 4,
                "length": 124000,
                "recording": {
                    "disambiguation": "",
                    "video": false,
                    "genres": [],
                    "length": 124000,
                    "first-release-date": "2015-07-17",
                    "id": "daf619b7-cd81-4882-bba6-b1906571ca9d",
                    "title": "Monkeyfire"
                },
                "id": "462d8c3c-431a-4fc0-bcbb-6bbf13b91ecf",
                "number": "4",
                "title": "Monkeyfire"
            },
            {
                "recording": {
                    "id": "dcdbc181-3483-4391-9a4c-6475c6a1b587",
                    "title": "Shrieker",
                    "disambiguation": "",
                    "genres": [],
                    "video": false,
                    "length": 127000,
                    "first-release-date": "2015-07-17"
                },
                "id": "34437ee6-dcca-4280-a6cc-6c9c21b99a00",
                "title": "Shrieker",
                "number": "5",
                "position": 5,
                "length": 127000
            },
            {
                "length": 137000,
                "position": 6,
                "number": "6",
                "title": "Spaced Out",
                "id": "7fbb0798-b9c6-4ab9-9207-8dc27b90eb03",
                "recording": {
                    "title": "Spaced Out",
                    "id": "0b496a40-80aa-4181-8650-4b39e6e3be4e",
                    "length": 137000,
                    "genres": [],
                    "video": false,
                    "disambiguation": "",
                    "first-release-date": "2015-07-17"
                }
            },
            {
                "recording": {
                    "title": "Polka 2180",
                    "id": "8520d0e5-d8fb-473e-98df-728d0770f02b",
                    "first-release-date": "2015-07-17",
                    "length": 141000,
                    "genres": [],
                    "video": false,
                    "disambiguation": ""
                },
                "id": "22071ee7-97a6-485c-a59e-c0fc4feb00e5",
                "number": "7",
                "title": "Polka 2180",
                "position": 7,
                "length": 141000
            },
            {
                "length": 130000,
                "position": 8,
                "title": "The Ballad of Rick Rodney; Space-Pirate",
                "number": "8",
                "recording": {
                    "title": "The Ballad of Rick Rodney; Space-Pirate",
                    "id": "00ee4fa7-f90f-4c21-bad3-b749b386e1b0",
                    "first-release-date": "2015-07-17",
                    "genres": [],
                    "video": false,
                    "length": 130000,
                    "disambiguation": ""
                },
                "id": "b557a3e8-3e8a-4f06-9b4a-e853929da359"
            },
            {
                "id": "65c248b5-6924-4cd6-9acf-443bd4cfa986",
                "recording": {
                    "disambiguation": "",
                    "genres": [],
                    "video": false,
                    "length": 137000,
                    "first-release-date": "2015-07-17",
                    "id": "82075e0b-2fb4-4f20-a401-ac12b843387a",
                    "title": "Chemical Roach"
                },
                "title": "Chemical Roach",
                "number": "9",
                "position": 9,
                "length": 137000
            },
            {
                "title": "Karoshi Ghost",
                "number": "10",
                "id": "fcd1c83d-166b-44eb-add6-658df54a3190",
                "recording": {
                    "length": 133000,
                    "genres": [],
                    "video": false,
                    "disambiguation": "",
                    "first-release-date": "2015-07-17",
                    "title": "Karoshi Ghost",
                    "id": "46031554-3cc5-4644-8f15-0051ba1d1823"
                },
                "length": 133000,
                "position": 10
            },
            {
                "title": "Cleanup Menu",
                "number": "11",
                "recording": {
                    "disambiguation": "",
                    "length": 189000,
                    "genres": [],
                    "video": false,
                    "first-release-date": "2015-07-17",
                    "id": "c0b685d5-ba94-42ba-9cc1-b5609e75592e",
                    "title": "Cleanup Menu"
                },
                "id": "fd012f50-dd50-4695-b8d8-9963183b9ff1",
                "length": 189000,
                "position": 11
            },
            {
                "length": 161000,
                "position": 12,
                "title": "Darkwash",
                "number": "12",
                "recording": {
                    "disambiguation": "",
                    "genres": [],
                    "video": false,
                    "length": 161000,
                    "first-release-date": "2015-07-17",
                    "id": "f73ed66c-e25b-42b7-aab1-f54e79866873",
                    "title": "Darkwash"
                },
                "id": "5b008897-122c-410d-9162-5fd62d4e60ab"
            },
            {
                "length": 136000,
                "position": 13,
                "number": "13",
                "title": "Booom!",
                "id": "55ab2099-e466-4aca-b780-02997305c75c",
                "recording": {
                    "title": "Booom!",
                    "id": "3ea9a270-530c-411a-a91d-7622647ca32b",
                    "first-release-date": "2015-07-17",
                    "video": false,
                    "genres": [],
                    "length": 136000,
                    "disambiguation": ""
                }
            },
            {
                "position": 14,
                "length": 140000,
                "id": "98bdf531-77d4-4c19-b482-ac2147e32ded",
                "recording": {
                    "id": "278cb277-cb9f-40a4-914d-89f5f6ac35fa",
                    "title": "PowahPlant",
                    "disambiguation": "",
                    "video": false,
                    "genres": [],
                    "length": 140000,
                    "first-release-date": "2015-07-17"
                },
                "title": "PowahPlant",
                "number": "14"
            },
            {
                "position": 15,
                "length": 139000,
                "recording": {
                    "video": false,
                    "genres": [],
                    "length": 139000,
                    "disambiguation": "",
                    "first-release-date": "2015-07-17",
                    "title": "Neutronium Sandwich",
                    "id": "4fbe45d7-025f-40ad-a7ae-4cf6750c48c7"
                },
                "id": "f6c294a3-4370-45fd-8ac6-82d28406aa87",
                "number": "15",
                "title": "Neutronium Sandwich"
            }
        ],
        "format": "Digital Media"
    },
    {
        "track-count": 5,
        "format-id": "907a28d9-b3b2-3ef6-89a8-7b18d91d4794",
        "tracks": [
            {
                "position": 1,
                "length": 79000,
                "recording": {
                    "first-release-date": "2015-07-17",
                    "disambiguation": "",
                    "length": 79000,
                    "genres": [],
                    "video": false,
                    "id": "361859c1-85a8-4933-97ec-6782979d3bda",
                    "title": "Workshop Cleanup"
                },
                "id": "8ec41900-68a1-43ed-92eb-1c99d726a45b",
                "title": "Workshop Cleanup",
                "number": "1"
            },
            {
                "length": 98000,
                "position": 2,
                "number": "2",
                "title": "March of the Elves",
                "id": "0f3e75c5-5c48-4b78-a323-fde562e7e872",
                "recording": {
                    "title": "March of the Elves",
                    "id": "79191f8e-f815-4181-bde2-a09416d2fef7",
                    "first-release-date": "2015-07-17",
                    "length": 98000,
                    "genres": [],
                    "video": false,
                    "disambiguation": ""
                }
            },
            {
                "length": 102000,
                "position": 3,
                "title": "Whiskey and a Shotgun",
                "number": "3",
                "recording": {
                    "id": "e714c6d1-bdf4-4e2e-902f-04776534394e",
                    "title": "Whiskey and a Shotgun",
                    "disambiguation": "",
                    "length": 102000,
                    "genres": [],
                    "video": false,
                    "first-release-date": "2015-07-17"
                },
                "id": "ce5902e0-6f6a-4ef8-990e-1f4373a5bd17"
            },
            {
                "position": 4,
                "length": 119000,
                "id": "b78f63ed-bb0b-436e-b8cb-2852c1b8c959",
                "recording": {
                    "title": "Red Snow",
                    "id": "6fff9c27-be19-4196-b1db-3274e0a667ba",
                    "length": 119000,
                    "genres": [],
                    "video": false,
                    "disambiguation": "",
                    "first-release-date": "2015-07-17"
                },
                "number": "4",
                "title": "Red Snow"
            },
            {
                "number": "5",
                "title": "Ghost of Christmas SLASHED!",
                "recording": {
                    "title": "Ghost of Christmas SLASHED!",
                    "id": "49667117-e30d-448d-8a6f-e0ecacc0e800",
                    "first-release-date": "2015-07-17",
                    "length": 118000,
                    "video": false,
                    "genres": [],
                    "disambiguation": ""
                },
                "id": "b52683c6-452f-43cc-a4ec-2307f824f6c8",
                "length": 118000,
                "position": 5
            }
        ],
        "format": "Digital Media",
        "track-offset": 0,
        "position": 2,
        "title": "Viscera Cleanup Detail: Santa’s Rampage"
    },
    {
        "format-id": "907a28d9-b3b2-3ef6-89a8-7b18d91d4794",
        "track-count": 6,
        "tracks": [
            {
                "number": "1",
                "title": "Grave of Maggots",
                "recording": {
                    "video": false,
                    "genres": [],
                    "length": 156000,
                    "disambiguation": "",
                    "first-release-date": "2015-07-17",
                    "title": "Grave of Maggots",
                    "id": "09e4aa6e-4471-4e0c-a060-3961006d3f60"
                },
                "id": "b101f77a-fb6b-428d-9f76-5a2636507048",
                "length": 156000,
                "position": 1
            },
            {
                "title": "Zombie Horde",
                "number": "2",
                "id": "1ba0dfcf-8d7f-41b9-aacd-c484388d5308",
                "recording": {
                    "first-release-date": "2015-07-17",
                    "disambiguation": "",
                    "video": false,
                    "genres": [],
                    "length": 147000,
                    "id": "aa53e395-f89c-40d0-a215-f696e82c380a",
                    "title": "Zombie Horde"
                },
                "length": 147000,
                "position": 2
            },
            {
                "position": 3,
                "length": 136000,
                "id": "b95a88f5-2fa7-472a-83ff-0586dc4c0b5c",
                "recording": {
                    "first-release-date": "2015-07-17",
                    "video": false,
                    "genres": [],
                    "length": 136000,
                    "disambiguation": "",
                    "title": "Bonesong",
                    "id": "7aaee690-34d5-4fe4-8388-7da550054cad"
                },
                "number": "3",
                "title": "Bonesong"
            },
            {
                "position": 4,
                "length": 127000,
                "recording": {
                    "title": "The Final Destination",
                    "id": "b8caab4f-3503-4327-ba4b-c902b47467ef",
                    "video": false,
                    "genres": [],
                    "length": 127000,
                    "disambiguation": "",
                    "first-release-date": "2015-07-17"
                },
                "id": "72b1ee81-7dd6-4bd1-9860-618f57010593",
                "title": "The Final Destination",
                "number": "4"
            },
            {
                "length": 141000,
                "position": 5,
                "title": "It Came From the Pumpkin Patch",
                "number": "5",
                "recording": {
                    "disambiguation": "",
                    "length": 141000,
                    "video": false,
                    "genres": [],
                    "first-release-date": "2015-07-17",
                    "id": "85458eb5-df7c-4804-9edf-d8aa32eab43d",
                    "title": "It Came From the Pumpkin Patch"
                },
                "id": "74254745-10ce-45b3-bd7a-35e428ec5015"
            },
            {
                "length": 161000,
                "position": 6,
                "title": "Hell’s Bell’s",
                "number": "6",
                "recording": {
                    "title": "Hell’s Bell’s",
                    "id": "e64347c2-a87b-41b8-89e8-2fde4f75bbf4",
                    "genres": [],
                    "video": false,
                    "length": 161000,
                    "disambiguation": "",
                    "first-release-date": "2015-07-17"
                },
                "id": "aa7dc4f1-6213-42ba-af7b-5d7ffc3bd0d5"
            }
        ],
        "format": "Digital Media",
        "position": 3,
        "track-offset": 0,
        "title": "Viscera Cleanup Detail Presents: House of Horror"
    },
    {
        "title": "Viscera Cleanup Detail Presents: The Vulcan Affair",
        "track-offset": 0,
        "position": 4,
        "format": "Digital Media",
        "format-id": "907a28d9-b3b2-3ef6-89a8-7b18d91d4794",
        "track-count": 8,
        "tracks": [
            {
                "length": 162000,
                "position": 1,
                "number": "1",
                "title": "The D# is for Danger",
                "id": "2a3821c3-6f93-4cfd-9a52-e5fdc7f53d32",
                "recording": {
                    "id": "dbe4485f-e3e4-4c21-b224-dd89df176f8d",
                    "title": "The D# is for Danger",
                    "disambiguation": "",
                    "length": 162000,
                    "genres": [],
                    "video": false,
                    "first-release-date": "2015-07-17"
                }
            },
            {
                "position": 2,
                "length": 153000,
                "id": "2e0cc9d2-c3e9-473a-8c5c-63227e6d2482",
                "recording": {
                    "first-release-date": "2015-07-17",
                    "length": 153000,
                    "genres": [],
                    "video": false,
                    "disambiguation": "",
                    "title": "Oil Drums",
                    "id": "7de33d72-9139-4109-9fc4-7192866ed9dd"
                },
                "title": "Oil Drums",
                "number": "2"
            },
            {
                "length": 166000,
                "position": 3,
                "title": "Water Re-Tension",
                "number": "3",
                "id": "216d600d-8d70-4a38-a263-f6c657505745",
                "recording": {
                    "title": "Water Re-Tension",
                    "id": "da735097-a2f9-488b-aa6f-f90b361299e7",
                    "first-release-date": "2015-07-17",
                    "length": 166000,
                    "video": false,
                    "genres": [],
                    "disambiguation": ""
                }
            },
            {
                "position": 4,
                "length": 148000,
                "id": "d44972eb-e896-46bc-8778-a09e2ac4a95f",
                "recording": {
                    "title": "Running Man",
                    "id": "77b6fc1f-186a-4867-8116-abf5c1fd26ac",
                    "length": 148000,
                    "video": false,
                    "genres": [],
                    "disambiguation": "",
                    "first-release-date": "2015-07-17"
                },
                "number": "4",
                "title": "Running Man"
            },
            {
                "number": "5",
                "title": "Shaken. Stirred. Blended. Consumed.",
                "recording": {
                    "id": "65157209-4016-4072-9913-169654117251",
                    "title": "Shaken. Stirred. Blended. Consumed.",
                    "disambiguation": "",
                    "genres": [],
                    "video": false,
                    "length": 138000,
                    "first-release-date": "2015-07-17"
                },
                "id": "6d6878c6-6536-4054-b71c-b3277a6834a3",
                "length": 138000,
                "position": 5
            },
            {
                "length": 149000,
                "position": 6,
                "number": "6",
                "title": "Spy in the Ointment",
                "id": "7738ad0b-825a-4bbf-9be6-70929e40e487",
                "recording": {
                    "title": "Spy in the Ointment",
                    "id": "ba11a56a-6056-49f6-85c6-7affb72d3b71",
                    "first-release-date": "2015-07-17",
                    "length": 149000,
                    "genres": [],
                    "video": false,
                    "disambiguation": ""
                }
            },
            {
                "position": 7,
                "length": 147000,
                "id": "5aafabf0-16c8-4fcd-b1d3-9e3e1b893d6c",
                "recording": {
                    "first-release-date": "2015-07-17",
                    "disambiguation": "",
                    "length": 147000,
                    "video": false,
                    "genres": [],
                    "id": "5266a1d3-e7b0-4605-a803-785d38539c99",
                    "title": "String Theory"
                },
                "title": "String Theory",
                "number": "7"
            },
            {
                "id": "87baed9d-181f-4c0f-9cce-6cbd25340133",
                "recording": {
                    "id": "7f7313a9-eed7-4e90-b0e2-ab2d03e04259",
                    "title": "Master of the Rodents",
                    "disambiguation": "",
                    "length": 160000,
                    "genres": [],
                    "video": false,
                    "first-release-date": "2015-07-17"
                },
                "title": "Master of the Rodents",
                "number": "8",
                "position": 8,
                "length": 160000
            }
        ]
    }
]

@Lucki
Copy link
Contributor Author

Lucki commented Aug 16, 2024

Looking at the structure, it looks like an "album" is just "a collection of playlists". Maybe there's some possibility to recycle existing $things. Although this a rather naive view without code-insight or particular deep music knowledge.

@kedij777
Copy link
Contributor

kedij777 commented Nov 12, 2024

May I work on this?

@nukeop
Copy link
Owner

nukeop commented Nov 12, 2024

What's your idea for this?

@kedij777
Copy link
Contributor

@rishiral and I see two methods:

  1. Display tracks under a "Disc #" heading like the example Lucki provided - "Lollypop example using multiple lists". We prefer this method as it's aesthetically appealing.
  2. Just increment the track number and treat all tracks as if they are part of one disc (this seems to be the way that iTuenesMusic and playlist are handling in the source code). An example screenshot of this can be found below
    image

The disc number is provided directly in the Spotify API response. For MusicBrainz and other APIs, however, we may need to implement a workaround, as they don’t provide it directly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement This thread requests an enhancement to be implemented.
Projects
None yet
Development

No branches or pull requests

3 participants