feat: dynamic source labels and enhanced connection testing
- Display "Apple Music" instead of "Spotify" in UI when iTunes is active source - Enhanced connection test messages to indicate Spotify config/auth status - Fixed similar artists requiring Spotify re-scan when Spotify becomes available - Fixed hero slider buttons failing for iTunes-only artists - Updated activity feed items to show correct source name dynamically
This commit is contained in:
parent
4cbb3c952b
commit
59848acaf3
3 changed files with 47 additions and 9 deletions
|
|
@ -1506,10 +1506,23 @@ def run_service_test(service, test_config):
|
|||
# 3. Run the test with the temporary config
|
||||
if service == "spotify":
|
||||
temp_client = SpotifyClient()
|
||||
|
||||
# Check if Spotify credentials are configured
|
||||
spotify_config = config_manager.get('spotify', {})
|
||||
spotify_configured = bool(spotify_config.get('client_id') and spotify_config.get('client_secret'))
|
||||
|
||||
if temp_client.is_authenticated():
|
||||
return True, "Spotify connection successful!"
|
||||
# Determine which source is active
|
||||
if temp_client.is_spotify_authenticated():
|
||||
return True, "Spotify connection successful!"
|
||||
else:
|
||||
# Using iTunes fallback
|
||||
if spotify_configured:
|
||||
return True, "Apple Music connection successful! (Spotify configured but not authenticated)"
|
||||
else:
|
||||
return True, "Apple Music connection successful! (Spotify not configured)"
|
||||
else:
|
||||
return False, "Spotify authentication failed. Check credentials and complete OAuth flow in browser if prompted."
|
||||
return False, "Music service authentication failed. Check credentials and complete OAuth flow in browser if prompted."
|
||||
elif service == "tidal":
|
||||
temp_client = TidalClient()
|
||||
if temp_client.is_authenticated():
|
||||
|
|
@ -1926,9 +1939,14 @@ def get_status():
|
|||
# Actually validate authentication (makes API call, but cached for 2 min)
|
||||
spotify_status = spotify_client.is_authenticated()
|
||||
spotify_response_time = (time.time() - spotify_start) * 1000
|
||||
|
||||
# Determine active music source (spotify or itunes)
|
||||
music_source = 'spotify' if spotify_client.is_spotify_authenticated() else 'itunes'
|
||||
|
||||
_status_cache['spotify'] = {
|
||||
'connected': spotify_status,
|
||||
'response_time': round(spotify_response_time, 1)
|
||||
'response_time': round(spotify_response_time, 1),
|
||||
'source': music_source
|
||||
}
|
||||
_status_cache_timestamps['spotify'] = current_time
|
||||
# else: use cached value
|
||||
|
|
@ -2365,7 +2383,7 @@ def test_connection_endpoint():
|
|||
|
||||
# Add activity for connection test
|
||||
if success:
|
||||
add_activity_item("✅", "Connection Test", f"{service.title()} connection successful", "Now")
|
||||
add_activity_item("✅", "Connection Test", message, "Now")
|
||||
else:
|
||||
add_activity_item("❌", "Connection Test", f"{service.title()} connection failed", "Now")
|
||||
|
||||
|
|
@ -2411,7 +2429,7 @@ def test_dashboard_connection_endpoint():
|
|||
|
||||
# Add activity for dashboard connection test (different from settings test)
|
||||
if success:
|
||||
add_activity_item("🎛️", "Dashboard Test", f"{service.title()} service verified", "Now")
|
||||
add_activity_item("🎛️", "Dashboard Test", message, "Now")
|
||||
else:
|
||||
add_activity_item("⚠️", "Dashboard Test", f"{service.title()} service check failed", "Now")
|
||||
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@
|
|||
<h4 class="status-title">Service Status</h4>
|
||||
<div class="status-indicator" id="spotify-indicator">
|
||||
<span class="status-dot disconnected"></span>
|
||||
<span class="status-name">Spotify</span>
|
||||
<span class="status-name" id="music-source-name">Spotify</span>
|
||||
</div>
|
||||
<div class="status-indicator" id="media-server-indicator">
|
||||
<span class="status-dot disconnected"></span>
|
||||
|
|
@ -175,7 +175,7 @@
|
|||
<div class="service-status-grid">
|
||||
<div class="service-card" id="spotify-service-card">
|
||||
<div class="service-card-header">
|
||||
<span class="service-card-title">Spotify</span>
|
||||
<span class="service-card-title" id="music-source-title">Spotify</span>
|
||||
<span class="service-card-indicator disconnected"
|
||||
id="spotify-status-indicator">●</span>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -2164,7 +2164,8 @@ async function testConnection(service) {
|
|||
const result = await response.json();
|
||||
|
||||
if (result.success) {
|
||||
showToast(`${service} connection successful`, 'success');
|
||||
// Use backend's message which contains dynamic source name (Spotify or Apple Music)
|
||||
showToast(result.message || `${service} connection successful`, 'success');
|
||||
|
||||
// Load music libraries after successful connection
|
||||
if (service === 'plex') {
|
||||
|
|
@ -2197,7 +2198,8 @@ async function testDashboardConnection(service) {
|
|||
const result = await response.json();
|
||||
|
||||
if (result.success) {
|
||||
showToast(`${service} service verified`, 'success');
|
||||
// Use backend's message which contains dynamic source name (Spotify or Apple Music)
|
||||
showToast(result.message || `${service} service verified`, 'success');
|
||||
} else {
|
||||
showToast(`${service} service check failed: ${result.error}`, 'error');
|
||||
}
|
||||
|
|
@ -23214,6 +23216,15 @@ function updateServiceStatus(service, statusData) {
|
|||
statusText.className = 'service-card-status-text disconnected';
|
||||
}
|
||||
}
|
||||
|
||||
// Update music source title (Spotify or Apple Music) based on active source
|
||||
if (service === 'spotify' && statusData.source) {
|
||||
const musicSourceTitleElement = document.getElementById('music-source-title');
|
||||
if (musicSourceTitleElement) {
|
||||
const sourceName = statusData.source === 'itunes' ? 'Apple Music' : 'Spotify';
|
||||
musicSourceTitleElement.textContent = sourceName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateSidebarServiceStatus(service, statusData) {
|
||||
|
|
@ -23238,6 +23249,15 @@ function updateSidebarServiceStatus(service, statusData) {
|
|||
mediaServerNameElement.textContent = serverName;
|
||||
}
|
||||
}
|
||||
|
||||
// Update music source name (Spotify or Apple Music) based on active source
|
||||
if (service === 'spotify' && statusData.source) {
|
||||
const musicSourceNameElement = document.getElementById('music-source-name');
|
||||
if (musicSourceNameElement) {
|
||||
const sourceName = statusData.source === 'itunes' ? 'Apple Music' : 'Spotify';
|
||||
musicSourceNameElement.textContent = sourceName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue