jeffvli / feishin

A modern self-hosted music player.
https://feishin.vercel.app
GNU General Public License v3.0
2.5k stars 108 forks source link

Renderer error when viewing album pages (Subsonic) #773

Closed sharpened-ferret closed 4 days ago

sharpened-ferret commented 5 days ago

Expected Behavior

When clicking on an album, the page for that album will load

Current Behavior

When clicking to load an album page, the renderer fails, causing the entire application to display as a white box and requiring it to be closed and restarted. (See the below image, with devtools open) render failure

The network activity log shows two of the Subsonic API calls (for Artist and AlbumList2) not loaded, but they seem to have been cancelled rather than failed, and those resources are reachable on the media server, so I don't think that's the cause. network

The error from the JS console stack trace points to code referring to "AlbumDetailContent", so I assume it's erroring when processing the response to the subsonic "getAlbum" call. stacktrace error

Steps to Reproduce

  1. Add a Subsonic media server to a fresh install of Feishin
  2. Click on an album hosted on that server

Possible Solution

Given the error from startWith("disc-") in the JS renderer file, I assume some code is passing a non-string to a field that expects a string.

Context

No response

Application version

0.10.1

Operating System and version

WIndows 10 desktop

Server and Version

Funkwhale 1.4.0

Node Version (if developing locally)

No response

kgarner7 commented 5 days ago

Please share the output of getAlbum.view. My best guess is that the id returned for a song is misbehaving (or an entire song is null/undefined/etc).

sharpened-ferret commented 5 days ago

Sure. So far it's happened with all albums I've tried.

I hadn't looked at the getAlbum.view response in detail before, but Funkwhale seems to be using numbers for numeric values, compared to everything being wrapped as strings in the Subsonic API example. Not sure if that could be what's causing it?

getAlbum.view response

{
    "subsonic-response": {
        "album": {
            "id": 335,
            "artistId": 282,
            "name": "Punisher",
            "artist": "Phoebe Bridgers",
            "created": "2024-09-21T23:53:02.000Z",
            "duration": 2437,
            "playCount": 72,
            "coverArt": "al-335",
            "genre": "",
            "year": 2020,
            "songCount": 11,
            "song": [
                {
                    "id": 1324,
                    "isDir": "false",
                    "title": "DVD Menu",
                    "album": "Punisher",
                    "artist": "Phoebe Bridgers",
                    "track": 1,
                    "discNumber": 1,
                    "contentType": "audio/ogg",
                    "suffix": "ogg",
                    "path": "Phoebe Bridgers/Punisher/1 - DVD Menu.ogg",
                    "duration": 69,
                    "created": "2024-09-22T00:35:48.000Z",
                    "albumId": 335,
                    "artistId": 282,
                    "type": "music",
                    "coverArt": "al-335",
                    "bitrate": 160,
                    "size": 1227749,
                    "year": 2020
                },
                {
                    "id": 1321,
                    "isDir": "false",
                    "title": "Garden Song",
                    "album": "Punisher",
                    "artist": "Phoebe Bridgers",
                    "track": 2,
                    "discNumber": 1,
                    "contentType": "audio/ogg",
                    "suffix": "ogg",
                    "path": "Phoebe Bridgers/Punisher/2 - Garden Song.ogg",
                    "duration": 219,
                    "created": "2024-09-21T23:53:02.000Z",
                    "albumId": 335,
                    "artistId": 282,
                    "type": "music",
                    "coverArt": "al-335",
                    "bitrate": 320,
                    "size": 6879818,
                    "year": 2020
                },
                {
                    "id": 1325,
                    "isDir": "false",
                    "title": "Kyoto",
                    "album": "Punisher",
                    "artist": "Phoebe Bridgers",
                    "track": 3,
                    "discNumber": 1,
                    "contentType": "audio/ogg",
                    "suffix": "ogg",
                    "path": "Phoebe Bridgers/Punisher/3 - Kyoto.ogg",
                    "duration": 184,
                    "created": "2024-09-22T00:35:49.000Z",
                    "albumId": 335,
                    "artistId": 282,
                    "type": "music",
                    "coverArt": "al-335",
                    "bitrate": 160,
                    "size": 3358400,
                    "year": 2020
                },
                {
                    "id": 1323,
                    "isDir": "false",
                    "title": "Punisher",
                    "album": "Punisher",
                    "artist": "Phoebe Bridgers",
                    "track": 4,
                    "discNumber": 1,
                    "contentType": "audio/ogg",
                    "suffix": "ogg",
                    "path": "Phoebe Bridgers/Punisher/4 - Punisher.ogg",
                    "duration": 189,
                    "created": "2024-09-22T00:30:59.000Z",
                    "albumId": 335,
                    "artistId": 282,
                    "type": "music",
                    "coverArt": "al-335",
                    "bitrate": 160,
                    "size": 3156693,
                    "year": 2020
                },
                {
                    "id": 1326,
                    "isDir": "false",
                    "title": "Halloween",
                    "album": "Punisher",
                    "artist": "Phoebe Bridgers",
                    "track": 5,
                    "discNumber": 1,
                    "contentType": "audio/ogg",
                    "suffix": "ogg",
                    "path": "Phoebe Bridgers/Punisher/5 - Halloween.ogg",
                    "duration": 271,
                    "created": "2024-09-22T00:49:09.000Z",
                    "albumId": 335,
                    "artistId": 282,
                    "type": "music",
                    "coverArt": "al-335",
                    "bitrate": 160,
                    "size": 4544669,
                    "year": 2020
                },
                {
                    "id": 1328,
                    "isDir": "false",
                    "title": "Chinese Satellite",
                    "album": "Punisher",
                    "artist": "Phoebe Bridgers",
                    "track": 6,
                    "discNumber": 1,
                    "contentType": "audio/ogg",
                    "suffix": "ogg",
                    "path": "Phoebe Bridgers/Punisher/6 - Chinese Satellite.ogg",
                    "duration": 217,
                    "created": "2024-09-22T00:49:11.000Z",
                    "albumId": 335,
                    "artistId": 282,
                    "type": "music",
                    "coverArt": "al-335",
                    "bitrate": 160,
                    "size": 3828197,
                    "year": 2020
                },
                {
                    "id": 1327,
                    "isDir": "false",
                    "title": "Moon Song",
                    "album": "Punisher",
                    "artist": "Phoebe Bridgers",
                    "track": 7,
                    "discNumber": 1,
                    "contentType": "audio/ogg",
                    "suffix": "ogg",
                    "path": "Phoebe Bridgers/Punisher/7 - Moon Song.ogg",
                    "duration": 277,
                    "created": "2024-09-22T00:49:10.000Z",
                    "albumId": 335,
                    "artistId": 282,
                    "type": "music",
                    "coverArt": "al-335",
                    "bitrate": 320,
                    "size": 9483919,
                    "year": 2020
                },
                {
                    "id": 1329,
                    "isDir": "false",
                    "title": "Savior Complex",
                    "album": "Punisher",
                    "artist": "Phoebe Bridgers",
                    "track": 8,
                    "discNumber": 1,
                    "contentType": "audio/ogg",
                    "suffix": "ogg",
                    "path": "Phoebe Bridgers/Punisher/8 - Savior Complex.ogg",
                    "duration": 241,
                    "created": "2024-09-22T00:49:12.000Z",
                    "albumId": 335,
                    "artistId": 282,
                    "type": "music",
                    "coverArt": "al-335",
                    "bitrate": 320,
                    "size": 8746347,
                    "year": 2020
                },
                {
                    "id": 1330,
                    "isDir": "false",
                    "title": "ICU",
                    "album": "Punisher",
                    "artist": "Phoebe Bridgers",
                    "track": 9,
                    "discNumber": 1,
                    "contentType": "audio/ogg",
                    "suffix": "ogg",
                    "path": "Phoebe Bridgers/Punisher/9 - ICU.ogg",
                    "duration": 190,
                    "created": "2024-09-22T00:49:13.000Z",
                    "albumId": 335,
                    "artistId": 282,
                    "type": "music",
                    "coverArt": "al-335",
                    "bitrate": 320,
                    "size": 6965118,
                    "year": 2020
                },
                {
                    "id": 1331,
                    "isDir": "false",
                    "title": "Graceland Too",
                    "album": "Punisher",
                    "artist": "Phoebe Bridgers",
                    "track": 10,
                    "discNumber": 1,
                    "contentType": "audio/ogg",
                    "suffix": "ogg",
                    "path": "Phoebe Bridgers/Punisher/10 - Graceland Too.ogg",
                    "duration": 236,
                    "created": "2024-09-22T00:49:14.000Z",
                    "albumId": 335,
                    "artistId": 282,
                    "type": "music",
                    "coverArt": "al-335",
                    "bitrate": 320,
                    "size": 8672227,
                    "year": 2020
                },
                {
                    "id": 1322,
                    "isDir": "false",
                    "title": "I Know the End",
                    "album": "Punisher",
                    "artist": "Phoebe Bridgers",
                    "track": 11,
                    "discNumber": 1,
                    "contentType": "audio/ogg",
                    "suffix": "ogg",
                    "path": "Phoebe Bridgers/Punisher/11 - I Know the End.ogg",
                    "duration": 344,
                    "created": "2024-09-22T00:05:53.000Z",
                    "albumId": 335,
                    "artistId": 282,
                    "type": "music",
                    "coverArt": "al-335",
                    "bitrate": 160,
                    "size": 6244536,
                    "year": 2020
                }
            ]
        },
        "funkwhaleVersion": "1.4.0",
        "status": "ok",
        "type": "funkwhale",
        "version": "1.16.0"
    }
}
kgarner7 commented 5 days ago

That would be why, yes. OpenSubsonic formalized this such that the ids are expected to be strings https://opensubsonic.netlify.app/docs/responses/child/ I can look into converting numbers to strings but ultimately I'd say Funkwhale is doing it wrong.

sharpened-ferret commented 5 days ago

Okay, thanks. I'll chuck an issue their way in the meantime.

kgarner7 commented 4 days ago

https://github.com/jeffvli/feishin/commit/b3b810c62c804d91ffb283b0784025ea8d3ef297. Try on https://feishin.vercel.app

sharpened-ferret commented 4 days ago

Thanks, that looks good