kagemomiji / airsonic-advanced

airsonic-advanced
GNU General Public License v3.0
142 stars 13 forks source link

[Feature Request]: OpenSubsonic support #184

Open Tolriq opened 1 year ago

Tolriq commented 1 year ago

Scope

RestfulAPI

What problem

This is by side effect related to https://github.com/kagemomiji/airsonic-advanced/issues/129

Due to limitations in Subsonic API after months of effort a group of Subsonic servers and clients are trying to build an extension to the Subsonic API to fix some issues and add the missing features to have a complete and more modern API.

See: https://github.com/opensubsonic/open-subsonic-api and https://opensubsonic.netlify.app/

Any server and clients are free to join and contribute to this project.

Feature

See above, and be part of the future.

Tolriq commented 9 months ago

@kagemomiji small bump, got more and more request from users to have a maintained Airsonic server working fast with Symfonium. (https://github.com/kagemomiji/airsonic-advanced/issues/129)

Would be nice if you were opened to quickly improve the situation with at least a small change to the search3 endpoint to support empty query and allow fast sync.

kagemomiji commented 9 months ago

@Tolriq I'm now working on #129. Could you try ghcr.io/kagemomiji/airsonic-advanced:pr-294 docker image. It supports empty query but I can not justify its behavior is correct or not.

Tolriq commented 9 months ago

Thanks, did a quick test and it works, but I've asked an user to test on a larger library to be sure there's no issue with the DB backend that might require a forced sort during pagination.

If you merge this can you also check https://opensubsonic.netlify.app/docs/responses/subsonic-response/ and return a type field in the "subsonic-response" so Symfonium can detect your server type and do not bug users about it not supporting fast sync?

Tolriq commented 9 months ago

So from the tests it works in all cases, no DB sort issues on his server. The only question @kagemomiji would be that the search3 query with songCount=500 & songOffset=20000 for example are quite slow (like 5 seconds on his server with 100K songs). Don't know if it's something you can check or not.

kagemomiji commented 9 months ago

@Tolriq I've confirmed the issue. In order to improve the speed, I need to modify the implementation of the search functionality.

nelsongraca commented 3 months ago

@kagemomiji

I have been running latest docker tag with symfonium, today I noticed it no longer worked, it may have been broken for quite a while now I can't pinpoint exact point in time. Moving to 11.1.3 works again.

The difference I found is that with 11.1.3 the path /rest/ping.action works while with latest only /rest/ping works, symfonium uses /rest/ping.action from the specification it seems that ping.action is the correct endpoint. I also skimmed through the commits but from that I can't really understand when it stopped working, I'll try to clone and run a bisect hopefully I can pinpoint where.

awsms commented 1 month ago

What's missing exactly for the API implementation to be 100% OpenSubsonic compatible? I thought it was done a while ago, but Symfonium still takes ages syncing a library

kagemomiji commented 1 month ago

@nelsongraca @awsms Due to the upgrade to SpringBoot3, the stricter API path matching is the cause of the issue with ping.action. In version 11.1.3, the path was matched with the string ping.?*, but currently, it is defined to match only ping and ping.view.

I believe the slow synchronization of the library is due to inefficient implementation of paging, but no fixes have been made to address this issue yet.