Files
navipy/navipy.py

82 lines
1.9 KiB
Python
Executable File

#!/usr/bin/env python3
"""
NaviPy - Accessible Navidrome Client
An accessible music player for Navidrome servers, built with PySide6
for full keyboard navigation and screen reader compatibility.
"""
import sys
import signal
import logging
from pathlib import Path
from PySide6.QtWidgets import QApplication
from PySide6.QtCore import Qt
# Add src to path for imports
srcPath = Path(__file__).parent / 'src'
sys.path.insert(0, str(srcPath.parent))
from src.main_window import MainWindow
from src.config.settings import getDataDir
def setupLogging():
"""Setup logging configuration"""
logDir = getDataDir()
logFile = logDir / 'navipy.log'
logging.basicConfig(
level=logging.INFO,
format='%(message)s [%(asctime)s]',
datefmt='%a %b %d %I:%M:%S %p %Z %Y',
handlers=[
logging.FileHandler(logFile, mode='w', encoding='utf-8'),
logging.StreamHandler(sys.stdout)
]
)
return logging.getLogger('navipy')
def signalHandler(sig, frame):
"""Handle interrupt signals for clean shutdown"""
logging.info("Received shutdown signal")
QApplication.quit()
def main():
"""Main entry point"""
logger = setupLogging()
logger.info("NaviPy starting")
# Setup signal handlers for clean shutdown
signal.signal(signal.SIGINT, signalHandler)
signal.signal(signal.SIGTERM, signalHandler)
# Create application
app = QApplication(sys.argv)
app.setApplicationName("NaviPy")
app.setApplicationVersion("0.1.0")
app.setOrganizationName("NaviPy")
# Enable accessibility
app.setAttribute(Qt.AA_UseHighDpiPixmaps)
# Create and show main window
window = MainWindow()
window.show()
logger.info("NaviPy started successfully")
# Run the application
exitCode = app.exec()
logger.info("NaviPy shutting down")
sys.exit(exitCode)
if __name__ == "__main__":
main()