From 81a3981d186fed7162fdb8bd164f275d925e5798 Mon Sep 17 00:00:00 2001 From: Zvonimir Rudinski Date: Tue, 9 Dec 2025 19:57:22 +0100 Subject: [PATCH] add jellyfin part --- .gitignore | 3 +++ jellyfin.py | 41 +++++++++++++++++++++++++++++++++++++++++ main.mts | 1 - main.py | 9 +++++++++ package.json | 12 ------------ requirements.txt | 4 ++++ 6 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 .gitignore create mode 100644 jellyfin.py delete mode 100644 main.mts create mode 100644 main.py delete mode 100644 package.json create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7d76959 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.env +__pycache__/ +.venv diff --git a/jellyfin.py b/jellyfin.py new file mode 100644 index 0000000..0659f9f --- /dev/null +++ b/jellyfin.py @@ -0,0 +1,41 @@ +from jellyfin_apiclient_python import JellyfinClient +from getmac import get_mac_address +import os + +def get_client(): + server_address = os.getenv('JELLYFIN_ADDRESS') + username = os.getenv('JELLYFIN_USER') + password = os.getenv('JELLYFIN_PASSWORD') + host_mac = get_mac_address(hostname="localhost") + + client = JellyfinClient() + client.config.app('jellydisc', '0.0.1', os.uname().nodename, host_mac) + client.config.data['auth.ssl'] = True + + client.auth.connect_to_address(server_address) + client.auth.login(server_address, username, password) + + return client + +def get_active_media(client): + server_address = os.getenv('JELLYFIN_ADDRESS') + sessions = client.jellyfin.get_sessions() + active_media = [] + + for session in sessions: + media = session.get('NowPlayingItem') + if not media: + continue + + media_id = media.get('Id') + image = f"{server_address}/Items/{media_id}/Images/Primary?maxWidth=300&maxHeight=300" + + media_info = { + 'artist': media.get('AlbumArtist', 'Unknown Artist'), + 'title': media.get('Name', 'Unknown Title'), + 'image': image, + } + + active_media.append(media_info) + + return active_media diff --git a/main.mts b/main.mts deleted file mode 100644 index d82f25e..0000000 --- a/main.mts +++ /dev/null @@ -1 +0,0 @@ -console.log("Hello, TypeScript with .mts extension!"); diff --git a/main.py b/main.py new file mode 100644 index 0000000..aaeeddc --- /dev/null +++ b/main.py @@ -0,0 +1,9 @@ +from dotenv import load_dotenv +from jellyfin import get_client, get_active_media + +load_dotenv() + +client = get_client() +media_list = get_active_media(client) + +print(media_list) diff --git a/package.json b/package.json deleted file mode 100644 index cdbe8b2..0000000 --- a/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "jellydisc", - "version": "1.0.0", - "description": "Discord Presence for Jellyfin", - "scripts": { - "start": "node --experimental-strip-types main.mts" - }, - "keywords": [], - "author": "Zvonimir Rudinski ", - "license": "ISC", - "packageManager": "pnpm@10.13.1" -} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..5838864 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +jellyfin-apiclient-python==1.11.0 +python-dotenv==1.2.1 +getmac==0.9.5 +pypresence==4.6.1