Add UDP broadcast and Qt6 discovery functionality

- Add UDP broadcast component that sends server info every 30 seconds
- Create Qt6 discovery application for LAN server detection
- Fix Migration 012 column count mismatch by adding missing status column
- Suppress Chromium sandbox warnings when running as root
- Add PyInstaller specs for Linux and Windows executables
- Update requirements.txt with netifaces dependency
- Create comprehensive documentation and setup scripts

Features:
- Automatic server discovery on local network
- Cross-platform support (Linux/Windows)
- System tray integration
- Auto-open browser functionality
- SSL detection and support
- Standalone executable builds
parent 52f1a5b6
...@@ -658,6 +658,15 @@ class Migration_012_RemoveFixtureIdUniqueConstraint(DatabaseMigration): ...@@ -658,6 +658,15 @@ class Migration_012_RemoveFixtureIdUniqueConstraint(DatabaseMigration):
"""Remove UNIQUE constraint from fixture_id column""" """Remove UNIQUE constraint from fixture_id column"""
try: try:
with db_manager.engine.connect() as conn: with db_manager.engine.connect() as conn:
# Debug: Check actual column count and names
result = conn.execute(text("PRAGMA table_info(matches)"))
old_columns = result.fetchall()
logger.info(f"Old matches table has {len(old_columns)} columns: {[col[1] for col in old_columns]}")
# Log each column with details
for col in old_columns:
logger.info(f"Column {col[1]}: {col[2]} {'PRIMARY KEY' if col[5] else ''}")
# SQLite doesn't support ALTER TABLE DROP CONSTRAINT directly # SQLite doesn't support ALTER TABLE DROP CONSTRAINT directly
# We need to recreate the table without the UNIQUE constraint # We need to recreate the table without the UNIQUE constraint
...@@ -675,6 +684,7 @@ class Migration_012_RemoveFixtureIdUniqueConstraint(DatabaseMigration): ...@@ -675,6 +684,7 @@ class Migration_012_RemoveFixtureIdUniqueConstraint(DatabaseMigration):
result VARCHAR(255) NULL, result VARCHAR(255) NULL,
done BOOLEAN DEFAULT FALSE NOT NULL, done BOOLEAN DEFAULT FALSE NOT NULL,
running BOOLEAN DEFAULT FALSE NOT NULL, running BOOLEAN DEFAULT FALSE NOT NULL,
status VARCHAR(20) DEFAULT 'pending' NOT NULL,
fixture_active_time INTEGER NULL, fixture_active_time INTEGER NULL,
filename VARCHAR(1024) NOT NULL, filename VARCHAR(1024) NOT NULL,
......
...@@ -170,6 +170,12 @@ class OverlayWebView(QWebEngineView): ...@@ -170,6 +170,12 @@ class OverlayWebView(QWebEngineView):
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground, True) self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground, True)
self.setAttribute(Qt.WidgetAttribute.WA_TransparentForMouseEvents, True) self.setAttribute(Qt.WidgetAttribute.WA_TransparentForMouseEvents, True)
# Suppress Chromium sandbox warnings when running as root
import os
if os.geteuid() == 0: # Running as root
os.environ['QTWEBENGINE_DISABLE_SANDBOX'] = '1'
logger.info("Disabled Qt WebEngine sandbox for root user")
# Configure page settings # Configure page settings
page = self.page() page = self.page()
page.setBackgroundColor(QColor(0, 0, 0, 0)) # Transparent background page.setBackgroundColor(QColor(0, 0, 0, 0)) # Transparent background
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment