jmshrv / finamp

A Jellyfin music client for mobile
Mozilla Public License 2.0
1.86k stars 121 forks source link

Sychronize app settings through Jellyfin server #859

Open Sp4rky001 opened 3 weeks ago

Sp4rky001 commented 3 weeks ago

Is there a mechanism within Jellyfin to store custom information such as Finamp settings?

It would be a nice feature to have a toggle that downloads the Finamp settings from the Jellyfin server. I have the app installed in multiple places and I need to manually set up my preferences on ever device.

Settings such as storage location would have to be ignored, of course, but UI preferences should be synchronized.

Chaphasilor commented 3 weeks ago

Hey, Jellyfin sadly doesn't have such a feature. Only regular Jellyfin user settings can be used for this, but most of these don't apply to Finamp at all.

However, sharing settings (e.g. via a file) would be a nice additon, also for bug reports. I was planning to include the settings when sharing logs, but sharing just the settings of course makes sense as well!

Sp4rky001 commented 2 weeks ago

So this has been knocking around in my head and I thought that there might be an easy way to make it work. I whipped up a quick and dirty Jellyfin plugin that creates an API endpoint in the Jellyfin API. My thinking is that settings, along with the modification date can be serialized into JSON and posted to the endpoint. The plugin would save the json to a file somewhere (in the Jellyfin config folder, for instance) instead of trying to find some place in the database to store it. Beyond that, it would need to be worked out when and how often to check for settings changes.

In the screenshot, I created a /Finamp/Settings endpoint with a post and get method:

image

Chaphasilor commented 2 weeks ago

Oh sweet! I don't have enough disk space to set up a Jellyfin dev environment, but I did mean to look into plugin development eventually, since that would be useful for Jellyfin Rewind. So I'm really excited that you're going this route!

As for the settings, some kind of serialization has been panned for a while now, since that would enable us to include the current settings when sharing logs. JSON would be fine for that I guess. A DB file like SQLite or Hive should also work, and would be nicer for querying logs though. Uploading that file to the server shouldn't be an issue either, I guess.

As for synchronizing settings, we could just do that on startup. If there's mismatch, we could prompt the user, since some settings require a restart to apply, so doing it in the background is not an option.
We can also use websockets for real-time synchronization, this is the works anyway as part of the remote control functionality (#850)

We should have a way to opt in or out of sync though. I was thinking of a "profile" feature, where you can have different settings profile channels on the server, and keep in sync with any one of them, or none (a local profile).

Having a server plugin specifically for Finamp would of course enable some additional functionality, like synchronizing the queue state.

Sp4rky001 commented 2 weeks ago

wow, it sounds ambitious. I guess it needs some direction and planning rather than just jumping in and making a feature that may not fit into the roadmap. I just wanted to give my ideas here and if you have something specific, and if I can handle it, I'd be happy to help.

Chaphasilor commented 2 weeks ago

Hey don't get me wrong, I think your attempt so far is amazing! Please keep on playing around with it, maybe create some proof of concept? 😁

The details aren't terribly important, just make sure to not put in too much work ^^
Feel free to focus on just the settings for now, ignoring what I said about logs :P

Sp4rky001 commented 2 weeks ago

ha ha, will do.