TortugaPower / BookPlayer

Player for your DRM-free audiobooks
GNU General Public License v3.0
1.65k stars 197 forks source link

Jellyfin audiobook downloads #1205

Open lightswitch05 opened 1 month ago

lightswitch05 commented 1 month ago

Feature request

Jellyfin is a self-hosted media server that supports all kinds of media types - including audiobooks. It has as well documented API that can can provide a list of items in a collection, download files, and even get an audio stream.

Narrative

Initial feature: Add a new feature, similar to the existing "Download from URL" feature, called "Download from Jellyfin", that allows you to view a Jellyfin collection and download an audiobook to the device. I love having access to all my Audiobooks, but they take up a ton of device space. Integration with Jellyfin allows me to keep my collection well organized on a server, but still have easy access into this great app. There is some configuration required for this, inputting a Jellyfin URL, selecting a user, and logging in.

Potential feature iteration: Jellyfin support streaming audio. I have no idea if streaming is of any interest to this app. Personally, I'm not interested in streaming, I want things downloaded. However, the potential is there if interested.

Design

Frankly, I'm bad at UX, but I'm happy brainstorm if desired.

lightswitch05 commented 1 month ago

I can provide access to a Jellyfin server with some audiobooks on it to explore and consider the feature if that would be useful

lysanntranvouez commented 1 month ago

I think I'm going to give this a shot. I can't promise anything, but I would love the feature to exist, so I might as well try. I can test with my own server at home for now.

GianniCarlo commented 1 month ago

I forgot to comment, but is the Jellyfin connection, something that can be accomplished via the native Files app → 'Connect to Server' option? if you save that connection, then you could access that via BookPlayer since we have an integration to the Files app, and import the books like it was any other third party cloud

lysanntranvouez commented 1 month ago

With just "Connect to server" it doesn't work. I don't know what protocols that supports, but I don't think Jellyfin uses anything "standard".

It might be thinkable to add a File Provider extension to some Jellyfin app, which would make content show up like it was in some cloud storage. Chances are, if you're hosting your audiobooks on Jellyfin, you're also hosting other media there, like movies or music, and you likely have an app to access that stuff.

I popped a question into my preferred Jellyfin app's GitHub (Streamyfin), if that seems like a practical idea. Never hurts to ask. I imagine it would be more involved. But it would also be more versatile.

lysanntranvouez commented 3 weeks ago

There is a first draft here: https://github.com/TortugaPower/BookPlayer/compare/develop...lysanntranvouez:BookPlayer:feature/jellyfin-download

With varying quality of UX (most notably no download progress indicator), and zero error handling.

If anyone wants to give it a spin.

I should also mention that I'm basically having to learn SwiftUI, so I imagine there are a few blunders in the changes. Feedback would be appreciated.

GianniCarlo commented 3 weeks ago

@lysanntranvouez that is great news! Do you mind opening up a PR pointing to develop so I can leave feedback? I'll check it out later throughout the day

blipspings commented 1 week ago

I forgot to comment, but is the Jellyfin connection, something that can be accomplished via the native Files app → 'Connect to Server' option? if you save that connection, then you could access that via BookPlayer since we have an integration to the Files app, and import the books like it was any other third party cloud

into files.app: i don't think so… not impossible, but not straightforward. opensource, but not a standard protocol, but does provide web access from my understanding.

(if you're going to do this, would plex be too much? infuse.app accesses both jellyfin and plex (and i think emby, too), so i know it's doable.)