Audiobookshelf support mostly working.
This commit is contained in:
@@ -65,6 +65,10 @@ class OptionsMenu:
|
||||
showText = self.config.get_show_text()
|
||||
showTextLabel = "Show Text Display: On" if showText else "Show Text Display: Off"
|
||||
|
||||
# Add Audiobookshelf setup status
|
||||
absConfigured = self.config.is_abs_configured()
|
||||
absLabel = "Audiobookshelf: Configured" if absConfigured else "Audiobookshelf: Not Configured"
|
||||
|
||||
menuItems.extend([
|
||||
{
|
||||
'label': showTextLabel,
|
||||
@@ -74,6 +78,10 @@ class OptionsMenu:
|
||||
'label': "Speech Rate Settings",
|
||||
'action': 'speech_rate'
|
||||
},
|
||||
{
|
||||
'label': absLabel,
|
||||
'action': 'audiobookshelf_setup'
|
||||
},
|
||||
{
|
||||
'label': "Back",
|
||||
'action': 'back'
|
||||
@@ -124,6 +132,8 @@ class OptionsMenu:
|
||||
return self._toggle_show_text()
|
||||
elif action == 'speech_rate':
|
||||
return self._speech_rate_info()
|
||||
elif action == 'audiobookshelf_setup':
|
||||
return self._audiobookshelf_setup()
|
||||
elif action == 'back':
|
||||
self.speechEngine.speak("Closing options menu")
|
||||
return False
|
||||
@@ -483,6 +493,96 @@ class OptionsMenu:
|
||||
if menuItems and self.currentSelection < len(menuItems):
|
||||
self.speechEngine.speak(menuItems[self.currentSelection]['label'])
|
||||
|
||||
def _audiobookshelf_setup(self):
|
||||
"""Setup Audiobookshelf server connection"""
|
||||
from src.ui import get_input
|
||||
|
||||
self.speechEngine.speak("Audiobookshelf setup starting.")
|
||||
|
||||
# Show current settings if configured
|
||||
currentUrl = ""
|
||||
currentUser = ""
|
||||
if self.config.is_abs_configured():
|
||||
currentUrl = self.config.get_abs_server_url()
|
||||
currentUser = self.config.get_abs_username()
|
||||
self.speechEngine.speak(f"Current server: {currentUrl}. Current username: {currentUser}. Leave fields blank to keep current values.")
|
||||
|
||||
# Get server URL
|
||||
serverUrlPrompt = "Enter Audiobookshelf server URL. Example: https colon slash slash abs dot example dot com"
|
||||
serverUrl = get_input(self.speechEngine, serverUrlPrompt, currentUrl)
|
||||
|
||||
if serverUrl is None:
|
||||
self.speechEngine.speak("Setup cancelled.")
|
||||
return True
|
||||
|
||||
serverUrl = serverUrl.strip()
|
||||
|
||||
if not serverUrl and self.config.is_abs_configured():
|
||||
serverUrl = currentUrl
|
||||
self.speechEngine.speak(f"Using current URL: {serverUrl}")
|
||||
elif not serverUrl:
|
||||
self.speechEngine.speak("Server URL required. Setup cancelled.")
|
||||
return True
|
||||
|
||||
# Validate URL format
|
||||
if not serverUrl.startswith(('http://', 'https://')):
|
||||
self.speechEngine.speak("Invalid URL. Must start with http or https. Setup cancelled.")
|
||||
return True
|
||||
|
||||
# Get username
|
||||
usernamePrompt = "Enter Audiobookshelf username"
|
||||
username = get_input(self.speechEngine, usernamePrompt, currentUser)
|
||||
|
||||
if username is None:
|
||||
self.speechEngine.speak("Setup cancelled.")
|
||||
return True
|
||||
|
||||
username = username.strip()
|
||||
|
||||
if not username and self.config.is_abs_configured():
|
||||
username = currentUser
|
||||
self.speechEngine.speak(f"Using current username: {username}")
|
||||
elif not username:
|
||||
self.speechEngine.speak("Username required. Setup cancelled.")
|
||||
return True
|
||||
|
||||
# Get password
|
||||
passwordPrompt = "Enter password for testing connection. Note: Password is NOT saved, only the authentication token."
|
||||
password = get_input(self.speechEngine, passwordPrompt, "")
|
||||
|
||||
if password is None:
|
||||
self.speechEngine.speak("Setup cancelled.")
|
||||
return True
|
||||
|
||||
if not password:
|
||||
self.speechEngine.speak("Password required. Setup cancelled.")
|
||||
return True
|
||||
|
||||
# Test connection
|
||||
self.speechEngine.speak("Testing connection. Please wait.")
|
||||
|
||||
# Import here to avoid circular dependency
|
||||
from src.audiobookshelf_client import AudiobookshelfClient
|
||||
|
||||
# Create temporary client to test
|
||||
testClient = AudiobookshelfClient(serverUrl, None)
|
||||
|
||||
if not testClient.login(username, password):
|
||||
self.speechEngine.speak("Login failed. Check server URL, username, and password. Make sure the server is reachable and credentials are correct.")
|
||||
return True
|
||||
|
||||
# Login successful - get token
|
||||
authToken = testClient.authToken
|
||||
|
||||
# Save settings
|
||||
self.config.set_abs_server_url(serverUrl)
|
||||
self.config.set_abs_username(username)
|
||||
self.config.set_abs_auth_token(authToken)
|
||||
|
||||
self.speechEngine.speak("Setup successful. Audiobookshelf configured. You can now press a to browse your Audiobookshelf library.")
|
||||
|
||||
return True
|
||||
|
||||
def exit_menu(self):
|
||||
"""Exit the menu"""
|
||||
self.inMenu = False
|
||||
|
||||
Reference in New Issue
Block a user