Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
767cca7
Add mediaserver\ampache
lachlan-00 Jul 27, 2026
87cd639
Update test_provider_migration_integration.py
lachlan-00 Jul 27, 2026
e1a5d96
Merge branch 'main' into AmpacheConnector
NeptuneHub Jul 29, 2026
29bd88b
Complete Ampache support: fix dispatcher contract bugs, register it i…
NeptuneHub Jul 29, 2026
e6013fd
Fix 13 Ampache backend defects: library-picker shape, API-key-only au…
NeptuneHub Jul 29, 2026
c44c0f8
SonarCloud fix
NeptuneHub Jul 29, 2026
64cc792
Merge branch 'main' into AmpacheConnector
NeptuneHub Jul 29, 2026
cd855c3
issues, docs and tests
lachlan-00 Jul 29, 2026
199266a
gate on API8+. Albums carry catalogs now
lachlan-00 Jul 29, 2026
e928514
Read tracks from a mounted library instead of downloading them
lachlan-00 Jul 30, 2026
bb3a411
Merge branch 'LocalFileAccess' into Ampache+localfile
lachlan-00 Jul 30, 2026
8941afe
stop handshaking all the time
lachlan-00 Jul 30, 2026
aa29c44
Merge branch 'AmpacheConnector' into Ampache+localfile
lachlan-00 Jul 30, 2026
c527433
use APIkey bearer token if possible first
lachlan-00 Jul 30, 2026
c97a9af
Merge branch 'AmpacheConnector' into Ampache+localfile
lachlan-00 Jul 30, 2026
618c2ee
allow larger page sizes
lachlan-00 Jul 30, 2026
66a25bc
Merge branch 'AmpacheConnector' into Ampache+localfile
lachlan-00 Jul 30, 2026
eee7d41
reduce lyrics calls using the album_songs call
lachlan-00 Jul 30, 2026
6744507
Merge branch 'AmpacheConnector' into Ampache+localfile
lachlan-00 Jul 30, 2026
9f9fc0d
simplify id lookup with browse
lachlan-00 Jul 30, 2026
4b51147
simplify id lookup with browse
lachlan-00 Jul 30, 2026
81ab481
Merge branch 'Ampache+localfile' into AmpacheConnector
lachlan-00 Jul 30, 2026
576d222
Revert "Read tracks from a mounted library instead of downloading them"
lachlan-00 Jul 30, 2026
3621258
sonarcube issues
lachlan-00 Jul 30, 2026
9043273
tests codestyle
lachlan-00 Jul 30, 2026
a217afb
test scripts (will remove)
lachlan-00 Jul 30, 2026
f27149b
Revert "test scripts (will remove)"
lachlan-00 Jul 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app_music_servers.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@

music_servers_bp = Blueprint('music_servers_bp', __name__)

_SUPPORTED_TYPES = ('jellyfin', 'emby', 'navidrome', 'lyrion', 'plex')
_SUPPORTED_TYPES = ('jellyfin', 'emby', 'navidrome', 'lyrion', 'plex', 'ampache')


def _setup_in_progress():
Expand Down
2 changes: 1 addition & 1 deletion app_provider_migration.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ def __getattr__(self, name):
# Supported target providers (what the tool knows how to talk to)
# ---------------------------------------------------------------------------

_SUPPORTED_TARGETS = frozenset({'jellyfin', 'navidrome', 'emby', 'lyrion', 'plex'})
_SUPPORTED_TARGETS = frozenset({'jellyfin', 'navidrome', 'emby', 'lyrion', 'plex', 'ampache'})


# ---------------------------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions app_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ def _plex_pin_headers(client_id):
"JELLYFIN_TOKEN",
"EMBY_TOKEN",
"NAVIDROME_PASSWORD",
"AMPACHE_PASSWORD",
"PLEX_TOKEN",
"JWT_SECRET",
"AI_CHAT_DB_USER_PASSWORD",
Expand Down
9 changes: 9 additions & 0 deletions config.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,13 @@ def _compute_headers():
NAVIDROME_USER = os.environ.get("NAVIDROME_USER", "")
NAVIDROME_PASSWORD = os.environ.get("NAVIDROME_PASSWORD", "") # Use the password directly

# --- Ampache Constants ---
# These are used only if MEDIASERVER_TYPE is "ampache". AMPACHE_PASSWORD takes either the
# account password or an API key; the handshake tries both, so no separate key field exists.
AMPACHE_URL = os.environ.get("AMPACHE_URL", "") # e.g. http://your-ampache-server
AMPACHE_USER = os.environ.get("AMPACHE_USER", "")
AMPACHE_PASSWORD = os.environ.get("AMPACHE_PASSWORD", "")

# --- Lyrion (LMS) Constants ---
# These are used only if MEDIASERVER_TYPE is "lyrion".
LYRION_URL = os.environ.get("LYRION_URL", "")
Expand All @@ -105,6 +112,7 @@ def _compute_headers():
'lyrion': ['LYRION_URL'],
'emby': ['EMBY_URL', 'EMBY_USER_ID', 'EMBY_TOKEN'],
'plex': ['PLEX_URL', 'PLEX_TOKEN'],
'ampache': ['AMPACHE_URL', 'AMPACHE_USER', 'AMPACHE_PASSWORD'],
}

MEDIASERVER_OBSOLETE_FIELDS_BY_TYPE = {
Expand All @@ -128,6 +136,7 @@ def _compute_headers():
'NAVIDROME_URL': 'url', 'NAVIDROME_USER': 'user', 'NAVIDROME_PASSWORD': 'password',
'LYRION_URL': 'url',
'PLEX_URL': 'url', 'PLEX_TOKEN': 'token',
'AMPACHE_URL': 'url', 'AMPACHE_USER': 'user', 'AMPACHE_PASSWORD': 'password',
}

# The ONLY persistent home of these settings is the music_servers registry
Expand Down
2 changes: 1 addition & 1 deletion tasks/mediaserver/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

logger = logging.getLogger(__name__)

_PROVIDER_NAMES = ('jellyfin', 'navidrome', 'lyrion', 'emby', 'plex')
_PROVIDER_NAMES = ('jellyfin', 'navidrome', 'lyrion', 'emby', 'plex', 'ampache')
_warned_unsupported = set()

_PLAYLIST_NAME_REQUIRED = "Playlist name is required."
Expand Down
Loading