diffuse icon indicating copy to clipboard operation
diffuse copied to clipboard

Netherquark's bug reports/feature requests megathread

Open Netherquark opened this issue 4 years ago β€’ 6 comments

I am creating a GitHub issue with all the bug reports & feature requests instead of sending them to @icidasset 's Twitter so it's more easily trackable and he won't need to check social media while working lol I'll edit this issue and add other things as I find them or think of them

Bold ➑️ Easy to solve

EDIT by @icidasset: πŸ‘€ Will investigate βœ… Done πŸ₯Ά Not possible 🚫 Not going to do

Feature requests:

  • [ ] Mega support (#268)
  • [ ] Local file indexing support (ie. adding a local folder as a source)
  • [ ] Song details (mini)page
  • [ ] Data saver mode (might include a. Not syncing with the User Data layer, b. not processing sources c. Not updating diffuse d. Might be kind of hard, but transcoding to a lower bitrate on the go)
  • [ ] Subsonic API support
  • [ ] As you can see in the screen record, the twitter website turns off autocorrect by gboard when typing a password. Maybe there is some API call for this? Because otherwise gboard picks up the parts of the encryption key and even recommends the phrases in my password, which isn't secure
  • [ ] Listening history saved on user data layer; for continued playback after changing devices (saving timestamp, song name, previous song, next song, etc.)
  • [ ] Most music platforms sort artists as follows: The Chainsmokers are in the C section alphabetically, along with The Cranberries. ie. Articles are smartly ommited while sorting. Something of the sort could be implemented in Diffuse?
  • [ ] OpenWhyD support
  • [ ] libre.fm support
  • [ ] Some method to quickly access keyboard shortcuts instead of having to memorise/view the about page. Native applications usually show hints when Alt is pressed, so a similar approach could be used. Otherwise, it is also possible to list all the shortcuts in the Settings. Allowing custom keyboard shortcuts could also be an option.
  • [ ] Search functionality for playlists when using a phone
  • [ ] Explicit tag for songs which have the metadata stating theyre explicit
  • [ ] A Radio/autoplay feature? either based on metadata alone, or with an actual Neural Network, or using some API (eg last.fm)
  • [ ] Cached song management is very basic, could be greatly improved
  1. Caching progress
  2. Granular cache management
  3. Pie chart of which songs / albums / playlists are taking up how much space when cached
  4. Caching queue list
  • [ ] When caching tracks, Diffuse caches one song at a time, greatly lengthening the time required for it to finish caching everything. An implementation of the "download as a zip" function would help speed this up
  • [ ] Bitrate, song/album release date and other such information [Screenshot]
  • [ ] Custom background image
  • [ ] Album art preview in UI (eg. Spotify shows album art in the left bottom corner)
  • [ ] Sleep timer (ie stop playing music after 1 hour, 2 hours, etc)
  • [ ] Soundiiz implementation [Link] or alternative implementation to import data to and from other services

Solved

  • [x] 🚫 A genre filter akin to the one in Groove Music (Windows 10 default music player)
  • [x] #305
  • [x] 🚫 album art based dynamic theming (again, like groove music)
  • [x] πŸ₯Ά Serverless implementation of something similar to Spotify Connect
  • [x] 🚫 User layer only syncs on Diffuse startup, doesn't support live sync
  • [x] 🚫 Multiple Diffuse saves on one user layer account (eg. in Dropbox, multiple accounts in the Apps=>Diffuse folder with different encryption as per user need, and a sign-in page to choose one of the accounts that are already set up, or create a new account)
  • [x] πŸ₯Ά YT playback via last.fm? (Songs that aren't in the added sources are played back via the last.fm youtube api or youtube-dl headless or something like that)[might not be the smartest idea]
  • [x] 🚫 Light mode / dark mode manual toggle
  • [x] 🚫 Background image slideshow
  • [x] 🚫 Material Design / Fluent Design / Metro / Apple Design language depending on device in use
  • [x] 🚫 If the copy temporary URL is correctly working and that page is inevitable, is there any other way to share a link of a song in my Diffuse library? Currently, I just end up sharing a Spotify link whenever I want to share a song with a friend
  • [x] πŸ₯Ά Multicore processing when processing sources (#269)
  • [x] πŸ₯Ά View password option (eg. the eye button that can be used when logging into a Google, Microsoft, Github, etc account)
  • [x] 🚫 (EDIT: Sticking with current duplicate setting) Something similar to this
  • [x] πŸ₯Ά Common cache across various operating systems? [Eg. If I cache a bunch of songs while in Windows and boot Ubuntu those same songs should show up in cache]
  • [x] βœ… (EDIT: Use L key) Search functionality for playlists
  • [x] 🚫 Lyrics support (i guess .lrc format?)
  • [x] ~~live tile implementation in diffuse (documentation)~~ Live tile has been discontinued in Windows 11

Bugs:

Chrome

Chrome on Android 10/11

  • [ ] If I search for a song, and then long press it to add it to queue, say, the keyboard doesn't go away automatically and interferes. Maybe an auto keyboard lower API could be called or something? [Screen Record]

  • [ ] Diffuse lags while scrolling through the library on a midrange Android device

  • [ ] Diffuse doesn't scale to a display of less than 1600x1080p when using the split-screen feature in Android. The UI is scrollable if that is the case.

Chrome on Ubuntu 20.04/20.10/21.04

  • [ ] Caching does not work

Firefox

Firefox on Windows 10/11

  • [ ] If you do the following: Add song to playlist. Search for keyword. Use arrow keys to navigate to the last playlist, you can go beyond the last option. This is on 17/4/22 after the keyboard shortcuts update.
  • [ ] image

Firefox on Manjaro/Fedora

  • [ ] Also present on Manjaro. image
  • [ ] πŸ‘€ Inertia is sorta broken when searching through playlists. [Screen Record]
  • [ ] The setTimeout and Recalculate Style events seem to be causing hitches in audio for me (hitches are perfectly in sync with the drops in the graph). Especially noticeable with long (10+ min) tracks [EDIT: This doesn't happen on my desktop, which is comparatively faster, but does happen on my laptop(especially when in power saving mode), which is a 2c/4t machine] image

Firefox on Android 11

  • [ ] πŸ‘€ Its possible to use the pinch in and out gesture to zoom, which is disabled on chrome. Seems like an oversight.
  • [ ] Also, song name, artist, and ~album art~ (edit: actually visible, my bad) is also not visible. [ScreenRecord]
  • [ ] Diffuse randomly skips to the next song out of the blue, with nothing showing up in the console. Happens out of the blue, couldn't really debug it
  • [ ] πŸ‘€ This happens when using Diffuse as a normal website on Firefox on Android.

Miscellaneous (Universal/Chrome on Windows)

  • [ ] πŸ‘€ Diffuse gets stuck on Loading Application if the encryption key is wrong. [Instead, I feel it would be smarter to revert to the key entry webpage after a set time period, of say 30 seconds. Because it is practically not viable to expect the user to understand they've entered the wrong password, and further expect that they'll clear site data and re-enter credentials]
  • [ ] πŸ‘€ .wav files, which do not have metadata, don't get synced properly. They are displayed like: "1-TzObOIDrZc1xjtklhXb3Nbs83staYNv?name=Wintergatan - Wintergatan - 05 Biking Is Better". I used this album for reference. Its pay-what-you-want so testing should be easier.
  • [ ] πŸ‘€ If I have a song file, say "Alien Ant Farm - Smooth Criminal.mp3", and I delete that file from the drive, and replace it with "Alien Ant Farm - Smooth Criminal.mp3", but at a higher bitrate, as a part of upgrading my music library's bitrate. What happens is, Diffuse directs the old processed entry to this new file, while also processing the new file, resulting in duplicate entries. The only possible way to fix this is to export diffuse.json, edit it to remove all mentions of the duplicate file in question, import it into diffuse, and process the sources, where it just creates one valid entry.
  • [ ] πŸ‘€ If I have certain songs cached, and I make a backup of diffuse.json, restoring it as is, the JSON file does not contain which songs have been cached and so, Diffuse just deletes all the cached songs during a backup restore. It would be better if Diffuse would verify if the backup restore is for the same account that is logged in currently, and wipe the cache accordingly.
  • [ ] πŸ‘€ The Grammarly extension breaks the "Enter encryption key" page on Chrome
  • [ ] πŸ‘€ Diffuse shows "No Tracks" even if tracks are cached when offline while opening the app (#270)(#273)
  • [ ] πŸ‘€ Sometimes when using shuffle, a song repeats for seemingly forever before a different song is played (the queue is filled with multiple repetitions of the same song randomly)[Screen record][Screenshot]
Chrome:
Uncaught TypeError: Cannot set property 'currentTime' of null
    at Array.dt (ui.js:12)
    at Function.f (ui.elm.js:1)
    at b (ui.elm.js:1)
    at Object.b (ui.elm.js:1)
    at an (ui.elm.js:1)
    at un (ui.elm.js:1)
    at ui.elm.js:1
    at ui.elm.js:1
Firefox:
Uncaught TypeError: gt.audio is null
    $r https://nightly.diffuse.sh/ui.js:12
    c https://nightly.diffuse.sh/ui.elm.js:25
    v https://nightly.diffuse.sh/ui.elm.js:1
    c https://nightly.diffuse.sh/ui.elm.js:25
    I0 https://nightly.diffuse.sh/ui.elm.js:25
    Ls https://nightly.diffuse.sh/ui.elm.js:25
    c https://nightly.diffuse.sh/ui.elm.js:25
    a https://nightly.diffuse.sh/ui.elm.js:25

(#302)

  • [ ] πŸ‘€ If Diffuse can't play the song and it gives the "can't play this track because the browser doesn't support it" error, it also deregisters as a media source, and the user can't play a song till they click next in the Diffuse UI. Even the play button doesn't play the next song automatically.
  • [ ] πŸ‘€ If a batch cache is started (eg cache playlist, cache selected tracks) then if the cache isn't properly downloaded, Diffuse shows "can't play this track because the browser doesn't support it" until the song is manually removed from cache and readded to cache. This can easily be fixed by giving the "Leave this page? changes you made might not be saved" banner or by verifying the song integrity and recaching it if it is corrupted. In some cases, the corrupted tracks make Diffuse unresponsive entirely till Diffuse is reopened.
  • [ ] πŸ‘€ The attempts to fix the "no tracks screen when offline" bug slowed down Diffuse load times, which were already not as fast as a local app (IDK what might fix it)
  • [ ] UI unreadable in some cases (look at playlist name in Screenshot 1 and look at Tracks/Sources/Settings in Screenshot 2) [Screenshot #1][Screenshot #2](#270)
  • [ ] πŸ‘€ UI design optimisations:
  1. You cannot manage a playlist by caching it or renaming it etc while you're listening to it because of the βœ…
  2. If you play a song from your entire library, say, and then navigate to a playlist, then click on the song playing, the song isn't highlighted as it usually is. This is also applicable when you play a non-cached track and turn on the cached tracks only filter. This is a UI wide decision to make, whether to navigate and show the song, therefore exiting the playlist view, or to not do anything. Another solution that isn't as minimalistic is to make playlists, cache filters, queues, etc independent of the viewfinder, much like most of the available music streaming services, or even local players.
  3. The only way to view the album name of a song is to turn on autorotate [Chrome on Android]
  4. There is no way to go back or forward during the login process. For example, if I accidentally click Dropbox instead of Fission, I have to start all over by reloading, instead of being able to press a back button, returning to the Personal Data storage page.
  • [ ] Diffuse supports drag & drop to sort queues and playlists. But, it doesn't auto-scroll while dragging. This makes rearranging playlists much harder. [Screen Record]
  • [ ] πŸ‘€ You can't skip a song that isn't in cache until it has loaded, unlike cached tracks, which you can skip instantly. image
  • [ ] πŸ‘€ While playing a song that isn't cached, Diffuse deregisters as a media source till the song loads on both Chrome on Windows and Chrome on Android. Not a major issue, but still irksome.
  • [ ] πŸ‘€ If a song is played before the source it is from is processed, diffuse gives a "can't play this track because the browser doesn't support it" error. Maybe if the source is being processed, the stream task can be delayed till the processing is done? instead of showing the "can't play this track because the browser doesn't support it" error?
  • [ ] πŸ‘€ If I want to search for the song "[Reboot]", the phrase "Reboot" returns no results, while "[Reb" returns a song as the result. ie. the square brackets are interfering
  • [ ] πŸ‘€ Diffuse doesn't support sorting in playlists alphabetically according to the artist name, the song name, or the song album
  • [ ] πŸ‘€ As visible in the screen record linked, the next song doesn't always play on the first try. All these tracks in the queue are cached, so the internet is a non-constraint. [Screen Record] [Chrome on Android only]

Solved

  • [x] Maxing out the bass knob in EQ causes clipping regardless of the position of the other knobs. Clipping starts around 2/3rd of the way.
  • [x] πŸ‘€ When opened with no internet, Diffuse uses the default image background instead of the user-selected one, which opens whenever Diffuse is opened with the internet on
  • [x] The copy temporary URL function gives this page when the URL is opened: image
  • [x] πŸ‘€ After a certain point of time, Diffuse gives the "Can't play this track" error on every song that isn't cached till it is reopened. [Screenshot attached.] This happens even on a 250mb/s LAN connection, so it can't be related to internet issues. The same thing occurs on a very low-speed internet connection (1.5mbit/s)
  • [x] πŸ‘€ Better scaling of media buttons and other UI elements on mobile platforms; they are barely clickable at the moment.
  • [x] πŸ‘€ Cache this playlist function is broken; Diffuse registers the tracks as cached but doesn't actually cache them, resulting in a "Can't play this track" until the track is manually recached
  • [x] Maybe it would be better if the shortcuts for previous/next song are [ and ] along with { and } and the shortcuts to seek are , and . along with < and > because on a standard QWERTY keyboard, curly and angled brackets are secondary inputs, preceded by square brackets, and comma and period respectively. #306
  • [x] Currently, it is not possible to switch between the list and cover view using the keyboard. #306
  • [x] It is also not possible to toggle favourites-only using the keyboard. #306
  • [x] βœ… When a song from a playlist is directly played by double-clicking on it, Diffuse glitches out [Screen record]
  • [x] πŸ‘€ When processing new tracks, after a certain amount of time, the tracks show up as processed but the names and metadata is gibberish (a quick fix is alt right-clicking, but that is per track and doesn't work for all tracks at once) Comment by icidasset: I think this might be because of Google Drive API issues?
  • [x] πŸ‘€ Caching does not work
  • [x] πŸ‘€ Pressing esc in the playlists pane, should ideally return to the tracks pane in my opinion. However, presently pressing esc does nothing in the playlists pane.
  • [x] πŸ‘€ L does select the playlist to be played, but the behaviour is not equivalent to selecting a playlist from the playlists page. Using L keeps the user in the same view they were previously, with the playlist being selected. Whereas, selecting a playlist from the playlists page selects the playlist and also opens the tracks page, showing the playlist's contents.
  • [x] πŸ‘€ Right clicking in the History section shows the usual context menu (Open in New Tab, New Window, etc) instead of showing Diffuse's context menu (add to queue, play next, add to playlist, etc)
  • [x] πŸ₯Ά When a song was long pressed in Chrome on Android, the device used to vibrate for feedback. Don't know if this was intentional, but it was nice. Absent on Firefox. Not programmed by Diffuse.
  • [x] πŸ₯Ά Media controls are not available (not sure if this is a Firefox issue, or a PWA issue, or a Diffuse issue) [ScreenRecord] Firefox or OS issue.
  • [x] Some songs randomly show the following error: GET https://www.googleapis.com/drive/v3/files/1x6MWDRyjBnkDmwwkSJQbSmgx_F8GxWln?alt=media Status 403 Forbidden comment by icidasset: This is because Google Drive's API is rate limited. If you play music a lot this'll pop up once in a while. If you'd like to avoid this, consider switching to a different type of source, such as Amazon S3 or Azure, which are optimised for this.
  • [x] Album art is not visible in the Windows floating media control overlay (works with open.spotify.com, so Firefox isn't the problem)
  • [x] Alt + (1/2/3/4/5/6/7/8/9) can be used in Firefox to cycle through tabs. Say diffuse is the first tab I have open, and I want to go to the second tab. I'll press alt+2. But, diffuse also picks up the "2" keypress, and opens the playlist pane accordingly. Also happens with alt 1,3,4,8,9 #306
  • [x] Diffuse randomly skips to the next song out of the blue, with nothing showing up in the console. Happens out of the blue, couldn't really debug it
  • [x] Album art fetching doesn't seem to be functional with Firefox on Manjaro/Fedora
  • [x] Random error:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.googleapis.com/drive/v3/files/1oN43m0Oo8GO_vIDi2VJSp9iYMhjPNd2i?alt=media&access_token=ya29.a0ARrdaM8eEVB_0RoiIaViXznvUt7Hgudh8tK6FV2nx1CQ2kDPqlzMOTAbne7tmkS2scOU1tWEZn-wB_ZdXy-KpfNDiUUOlmELNCr-1uWlza9_-z-3DZsF-ka0YLeuFxEtDZwLO9TUF19ECDMPszzJbvZH5wE_8ws. (Reason: CORS request did not succeed).

Failed to load β€˜https://www.googleapis.com/drive/v3/files/1oN43m0Oo8GO_vIDi2VJSp9iYMhjPNd2i?alt=media&access_token=ya29.a0ARrdaM8eEVB_0RoiIaViXznvUt7Hgudh8tK6FV2nx1CQ2kDPqlzMOTAbne7tmkS2scOU1tWEZn-wB_ZdXy-KpfNDiUUOlmELNCr-1uWlza9_-z-3DZsF-ka0YLeuFxEtDZwLO9TUF19ECDMPszzJbvZH5wE_8ws’. A ServiceWorker passed a promise to FetchEvent.respondWith() that rejected with β€˜TypeError: NetworkError when attempting to fetch resource.’.
  • [x] Diffuse doesn't scale well on a 2400x1080p display [you can see the bottom area empty in the screenshot linked] [Screenshot)] (#270)
  • [x] Media control not supported now. Works on Chromium on Linux, but not on Chrome. Chrome doesn't expose media controls API. Bug seems similar to Firefox on Android. Chrome: image Chromium: image
  • [x] βœ… ~~I noticed last.fm wasn't tracking my scrobbles in Diffuse, so I logged out and logged in. Diffuse gave the following errors/warnings in console: Site cannot be installed: Page does not work offline. Starting in Chrome 93, the installability criteria is changing, and this site will not be installable. See https://goo.gle/improved-pwa-offline-detection for more information. ?action=authenticate/lastfm&token=QoM3pByZdhfls8jRTKtGSvffkrsnzY_6:1 The resource https://nightly.diffuse.sh/images/diffuse__icon-dark.svg was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriate as value and it is preloaded intentionally. ws.audioscrobbler.com/2.0?api_key=4f0fe85b67baef8bb7d008a8754a95e5&api_sig=eee7d6dcf513b358b62acf5a9ea68e3a&format=json&method=auth.getSession&token=QoM3pByZdhfls8jRTKtGSvffkrsnzY_6:1 Failed to load resource: net::ERR_BLOCKED_BY_CLIENT~~ UBlock Origin was too aggressive.
  • [x] βœ… When right-clicking/long-pressing on a UI element such as a song or a playlist to select an option such as download as a zip file, the element behind it is also clicked. Screenshot. [For example, in the screenshot linked, if I click download as a zip, it'll open Sleep or a struggle for bliss along with starting the download]
  • [x] βœ… Occasionally Diffuse gives a 502 Bad Gateway due to miscellaneous hosting issues and because of the offline no tracks bug, this renders the app unusable till the hosting issues are fixed
  • [x] βœ… (EDIT: Need to play halfway, required by last.fm) The last.fm integration shows songs being played but doesn't register them in the last.fm history unless they're played from start to end, without any skipping, etc.
  • [x] βœ… [Question] Will Diffuse still work on Chrome once the third party cookie support is removed? Cause I've noticed that user layer login credentials are stored in cookies [not sure though]
  • [x] Diffuse media playing with image metadata (album art) from another window [ie. Chrome on Windows supports image metadata][Screenshot]
  • [x] ~~last.fm scrobbling doesn't work on latest Chrome on Ubuntu 20.10~~ UBlock Origin again
  • [x] Diffuse load times very slow (>+30 seconds on a competent computer) when a game download is active in Steam
  • [x] πŸ₯Ά Windows taskbar (in hide automatically mode) interferes perfectly and overlaps the diffuse media controls
  • [x] πŸ₯Ά On Chrome on Android, the cached tracks don't show up under the app storage, they show up under the Chrome storage. [Screenshots]. However, this isn't the case on Chrome on Windows.
  • [x] 🚫 Syncing tags of multiple tracks at once isn't possible (by selecting using the shift click method)
  • [x] 🚫 Some parts of the UI are basic text elements so they can be selected as visible in the screenshot attached. This isn't very visually appealing or immersive, especially when other extensions such as the GTranslate extension are also in use image
  • [x] πŸ₯Ά If a USB keyboard is connected with Diffuse open in Chrome on Android, Diffuse reloads arbitrarily
  • [x] ~~In case some tracks do not have album metadata, my music source groups them together as [non-album tracks]. Diffuse groups them together as an album and applies album art of one of those tracks. [Screenshot]~~ No logical fix, other than me, the user editing metadata manually.

Netherquark avatar Mar 05 '21 07:03 Netherquark

Thanks for all the feedback! ☺️ I couldn't keep up anymore with the Twitter messages, so thanks for making a summary πŸ™

Few things:

  1. The last.fm scrobble only comes through if the track is played for 50%, unless your track is only 2 min long, or something like that. This is required by last.fm

  2. [Question] Will Diffuse still work on Chrome once the third party cookie support is removed? Cause I've noticed that user layer login credentials are stored in cookies [not sure though]

    I'm not using cookies in any way, so it should work just fine. What gave you the impression cookies are used? πŸ€”

icidasset avatar Mar 06 '21 19:03 icidasset

Thanks for all the feedback! ☺️

My pleasure!

Few things:

  1. The last.fm scrobble only comes through if the track is played for 50%, unless your track is only 2 min long, or something like that. This is required by last.fm

Ah okay

  1. [Question] Will Diffuse still work on Chrome once the third party cookie support is removed? Cause I've noticed that user layer login credentials are stored in cookies [not sure though]

    I'm not using cookies in any way, so it should work just fine. What gave you the impression cookies are used? πŸ€”

Clearing cookies & clearing storage is what I do usually if I want to reset diffuse (eg if I type in the wrong credentials). Also diffuse uses Google and dropbox cookies during login? It's always a good thing if diffuse doesn't need cookies tho

Netherquark avatar Mar 07 '21 03:03 Netherquark

If I have a song file, say "Alien Ant Farm - Smooth Criminal.mp3", and I delete that file from the drive, and replace it with "Alien Ant Farm - Smooth Criminal.mp3", but at a higher bitrate, as a part of upgrading my library bitrate. What happens is, diffuse directs the old processed entry to this new file, while also processing the new file, resulting in duplicate entries. The only possible way to fix this is to export diffuse.json, edit it to remove all mentions of the duplicate file in question, import it into diffuse, and process the sources, where it just creates one valid entry.

That's quite a special use case πŸ€” I can't really think of a great solution. But for now you can do one of the following:

  • Delete the files on your source/drive, click process, wait until finished, upload new files, process again.
  • Upload new files, alt + right click on each changed track, and choose "sync tags"

The tags (audio metadata) are different but same filename, right?

icidasset avatar Apr 04 '21 20:04 icidasset

After a certain point of time, Diffuse gives the "Can't play this track" error on every song that isn't cached till it is reopened. [Screenshot attached.] This happens even on a 250mb/s LAN connection, so it can't be related to internet issues. The same thing occurs on a very low-speed internet connection (1.5mbit/s)

Huh interesting, I guess there's a rate limit on Google Drive. I don't think there's much I can do about that, seeing that it's a limitation of Google Drive. I could show a message to the user however.

icidasset avatar Apr 04 '21 20:04 icidasset

That's quite a special use case πŸ€” I can't really think of a great solution. But for now, you can do one of the following:

  • Delete the files on your source/drive, click process, wait until finished, upload new files, process again.
  • Upload new files, alt + right-click on each changed track, and choose "sync tags"

The tags (audio metadata) are different but the same filename, right?

yep same file name different metadata (eg the higher-res version has album art, album metadata, genre, etc) i think the best solution to this would be to give the user a scan button, which would automatically look through for inconsistencies (eg multiple listings as per the Smooth Criminal example, tracks that show up as cached but aren't actually cached) because the best way I found of fixing the above issue on a per-song basis was to ctrl f the diffuse JSON with the song name, and remove all entries, so it was reprocessed.

Netherquark avatar Apr 05 '21 05:04 Netherquark

Subsonic API is already consumed in Jamstash, but I don't know if the logic can be extracted easily.

Glandos avatar Mar 06 '23 08:03 Glandos