Subsonic API support

As mentioned on Reddit, would it be possible to implement Subsonic support? I personally use Navidrome (which uses Subsonic) on a Raspberry Pi home server, and it would be great to have more app support for the default API

2 Likes

Many other apps use it, and here’s more info about the API

+1

Big thumbs up for this!
I almost went the airsonic/navidrome way myself

+1
Subsonic support would be awesome!

For those who have not seen it have been implemented.

3 Likes

Thank you for implementing Subsonic!!!

hello! i use navidrome, and on my android it doesn’t work. the library is fully updated but there are no songs on albums, so it’s actually empty. great desing though, comparing to other subsonic clients))

---- Technical details, do not remove ----
Symfonium: 0.9.10-565 [true/0/186/84]
Android: 12 - 31 [arm64-v8a,armeabi-v7a,armeabi]
Device: samsung - SM-G780F [r8sser - r8s]

Without proper logs there’s nothing I can do so please join the log file…

Is subsonic playlists supported?

I’m currently very happy with the app, but i miss having access to my navidrome playlists in the app.

Not yet it’s planned but Subsonic API implementation vastly differs between servers so I’m waiting a little to get more feedback about the one that works and those who don’t to see what I can support and what I won’t. (But since I do test here with Navidrome that works nicely there’s 99% chance that playlist support for Navidrome will be in)

Fair enough, and great to hear it’s planned!

Keep up the amazing work. :+1:

I can’t add my Navidrome server. I’m hosting it with Yunohost.

In other Subsonic Android apps (eg. DSub, Audinaut), server configuration doesn’t need port number and you can add HTTP(S) address as server address.

You don’t need either if you enter the whole url or need to enter the https port 443.

But without details and logs hard to tell more.

I think problem is that I have Navidrome installed in https://[redacted_server_address]/navidrome, based of logs it ignores the subfolder part and tries to go to https://[redacted_server_address] instead.

Log
2022-04-17 18:24:21.051 Verbose/StateManager: New state (false): false-false-false 
2022-04-17 18:24:22.600 Verbose/StateManager: New state (true): true-false-false 
2022-04-17 18:24:44.173 Verbose/QueryBuilder: Query: SELECT providers._id,providers.name,providers.api,providers.ip,providers.port,providers.login,providers.password,providers.mac_address,providers.wifi_only,providers.subdirectory,providers.auto_detected,providers.auto_detected_name,providers.connection_type,providers.int_param_1,providers.int_param_2,providers.int_param_3,providers.int_param_4,providers.int_param_5,providers.string_param_1,providers.string_param_2,providers.string_param_3,providers.string_param_4,providers.string_param_5,providers.unique_id,providers.display_order,providers.auto_image_cache,providers.auto_file_cache,providers.libraries_excluded,providers.libraries_auto_cached FROM providers ORDER BY providers.display_order ASC ('') [1 in 1.94ms]
2022-04-17 18:24:45.743 Verbose/QueryBuilder: Query: SELECT providers._id,providers.name,providers.api,providers.ip,providers.port,providers.login,providers.password,providers.mac_address,providers.wifi_only,providers.subdirectory,providers.auto_detected,providers.auto_detected_name,providers.connection_type,providers.int_param_1,providers.int_param_2,providers.int_param_3,providers.int_param_4,providers.int_param_5,providers.string_param_1,providers.string_param_2,providers.string_param_3,providers.string_param_4,providers.string_param_5,providers.unique_id,providers.display_order,providers.auto_image_cache,providers.auto_file_cache,providers.libraries_excluded,providers.libraries_auto_cached FROM providers WHERE (providers.api='LocalDevice') ('') [1 in 1.53ms]
2022-04-17 18:24:49.760 Verbose/StateManager: New state (false): false-false-false 
2022-04-17 18:24:55.589 Verbose/StateManager: New state (true): true-false-false 
2022-04-17 18:25:04.165 Verbose/StateManager: New state (false): false-false-false 
2022-04-17 18:25:07.205 Verbose/StateManager: New state (true): true-false-false 
2022-04-17 18:25:10.332 Verbose/StateManager: New state (false): false-false-false 
2022-04-17 18:25:13.924 Verbose/StateManager: New state (true): true-false-false 
2022-04-17 18:25:20.337 Error/NetworkUtils: Error mac read, /proc/net/arp: open failed: EACCES (Permission denied)
2022-04-17 18:25:20.339 Error/NetworkUtils: Error mac not found for: [redacted_server_address]
2022-04-17 18:25:20.349 Verbose/SubsonicLogger: --> [325] GET https://[redacted_server_address]/rest/ping
2022-04-17 18:25:20.432 Verbose/SubsonicLogger: <-- [325] 200  https://[redacted_server_address]/yunohost/sso/?r=aHR0cHM6Ly9rcmlzdS5ub2hvc3QubWUvcmVzdC9waW5nP3Q9OGJkMTM5YjJjYWZkNjhiZGJlMmVkMjNmZDNhODA2MTYmZj1qc29uJnM9OTUxM2FhODUtMDcwOS00MjQwLWFkNjUtMTYyZmRiY2E1NjgzJnU9a3Jpc3Umdj0xLjE0LjAmYz1TeW1mb25pdW0= (79ms, unknown-length body)
2022-04-17 18:25:20.433 Verbose/SubsonicLogger: <-- [325] <!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>YunoHost Portal</title>

  <!-- Responsive -->
  <meta name="format-detection" content="telephone=no" />
  <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1" />

  <!-- Do not index SSOWat pages -->
  <meta name="robots" content="noindex, nofollow">

  <!-- Stylesheets -->
  <link rel="stylesheet" href="assets/css/ynh_portal.css">
  <link rel="stylesheet" href="assets/themes/default/custom_portal.css">

  <!-- Icons -->
  <link rel="shortcut icon" href="assets/icons/favicon.ico">
  <link rel="apple-touch-icon" sizes="57x57" href="assets/icons/apple-touch-icon-57x57.png">
  <link rel="apple-touch-icon" sizes="114x114" href="assets/icons/apple-touch-icon-114x114.png">
  <link rel="apple-touch-icon" sizes="72x72" href="assets/icons/apple-touch-icon-72x72.png">
  <link rel="apple-touch-icon" sizes="144x144" href="assets/icons/apple-touch-icon-144x144.png">
  <link rel="apple-touch-icon" sizes="60x60" href="assets/icons/apple-touch-icon-60x60.png">
  <link rel="apple-touch-icon" sizes="120x120" href="assets/icons/apple-touch-icon-120x120.png">
  <link rel="apple-touch-icon" sizes="76x76" href="assets/icons/apple-touch-icon-76x76.png">
  <link rel="apple-touch-icon" sizes="152x152" href="assets/icons/apple-touch-icon-152x152.png">
  <link rel="icon" type="image/png" href="assets/icons/favicon-196x196.png" sizes="196x196">
  <link rel="icon" type="image/png" href="assets/icons/favicon-160x160.png" sizes="160x160">
  <link rel="icon" type="image/png" href="assets/icons/favicon-96x96.png" sizes="96x96">
  <link rel="icon" type="image/png" href="assets/icons/favicon-16x16.png" sizes="16x16">
  <link rel="icon" type="image/png" href="assets/icons/favicon-32x32.png" sizes="32x32">
  <meta name="msapplication-TileColor" content="#41444f">
  <meta name="msapplication-TileImage" content="/mstile-144x144.png">
</head>
<body class="ynh-user-portal ">

  <div id="ynh-logo" class="ynh-logo">
    <span class="element-invisible">Yunohost</span>
  </div>

  <div class="content">


    <div class="wrapper messages info">Please log in to access to this content</div>
<div class="ynh-wrapper login">
<form class="login-form" name="input" action="" method="post">
  <div class="form-group">
    <label class="icon icon-user" for="user"><span class="element-invisible">Username</span></label>
    <input id="user" type="text" name="user" placeholder="Username" class="form-text" autocomplete="username" autofocus required>
  </div>
  <div class="form-group">
    <label class="icon icon-lock" for="password"><span class="element-invisible">Password</span></label>
    <input id="password" type="password" name="password" placeholder="Password" class="form-text" autocomplete="current-password" required>
  </div>
  <input type="submit" value="Log in" class="btn classic-btn large-btn">
</form>
</div>

  </div>

  <!-- Scripts -->
  <script src="assets/js/ynh_portal.js"></script>
  <script src="assets/themes/default/custom_portal.js"></script>
</body>
</html>


2022-04-17 18:25:20.434 Error/SubsonicLogger: Error
ze.a: Use JsonReader.setLenient(true) to accept malformed JSON at path $
	at ah.p.N(Unknown Source:26)
	at ah.q.O(Unknown Source:2)
	at ah.q.P(SourceFile:558)
	at ah.q.B(SourceFile:4)
	at ch.a.a(SourceFile:0)
	at e4.g.a(SourceFile:11)
	at m7.k.a(SourceFile:5)
	at e4.b.l(SourceFile:65)
	at e4.b.F(Unknown Source:12)
	at b3.s.D2(SourceFile:4)
	at xe.d0.c3(SourceFile:71)
	at e4.f.a(SourceFile:498)
	at e4.a.l(Unknown Source:13)
	at ai.a.n(SourceFile:5)
	at pi.k0.run(SourceFile:110)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at java.lang.Thread.run(Thread.java:923)

2022-04-17 18:25:36.410 Verbose/StateManager: New state (false): false-false-false 
2022-04-17 18:25:38.673 Verbose/StateManager: New state (true): true-false-false 
2022-04-17 18:25:39.366 Verbose/StateManager: New state (false): false-false-false 
2022-04-17 18:25:42.692 Verbose/StateManager: New state (true): true-false-false 
2022-04-17 18:25:43.624 Verbose/StateManager: New state (false): false-false-false

I always needs fulls logs to have the necessary versions and device info.

Anyway yes seems the path is not passed down for Subsonic hosts, will fix for next release.

TBH, I just didn’t know that there was logs and the info about what is needed for bug report isn’t easily available, at least I didn’t notice :confused: (and sitenote: you can’t get logs, when you’re still at second screen after the “start free trial”, which I was because I couldn’t complete the Subsonic setup until I just go with “local files” option.)

Just in case: version 0.9.13 (583), phone: OnePlus Nord 2, Android 12.

If you are after the address, sorry but I will never publicly share my personal server address.

When you create an issue there’s a template :wink: There’s [Wiki] How to gather logs the pinned post of the support forum is Symfonium help and support not talking about all the messages inside the app :slight_smile: (And the app propose to send logs after a few fails in the setup screen too).

As a side note I personally do not care about your url, but if you do not trust the devs with logs for debug then you should not use closed source apps either (and even open sources ones you should compile them yourself), you absolutely do not know what a dev can do with the information you enter in random apps on Play Store. Google validation is a joke I could easily send your urls and logging password to a server. But I obviously do not do that, I publish high rated apps since 11 years now on Play Store and hopefully gained user trusts with the work I’ve done so far.

Edit: Anyway I’ve checked and the subdirectory was effectively not passed (Well passed in the wrong field :p) will be fixed for next release.

I mean in the forum, at eyes of possibly thousands of people, publicly as I said. Is this clear now? I know what apps can get, I’m okay sharing it privately.

I should have done this via email, but I didn’t notice it before until I finished the setup and after forum post.

I didn’t think things through and I’m sorry for causing extra trouble.

No problem in the end there’s was enough info to find the issue after your investigation.

But when out of beta and many more users I also need to optimize my time and ensure to not have to ask millions times for logs and details. Else all I do is asking and never have time to fix and improve.
The joy of indie devs.

Great to hear it. I’m also waiting for the playlist support for Navidrome. Just purchased this app to support the dev(s).