a6a175b3d7
Suppresses console window flicker for PyInstaller windowed applications by redirecting stdout and stderr in main.py. Updates logging setup to avoid console output in windowed mode and adds fallback error logging. Suppresses pkg_resources deprecation warnings to further reduce unwanted console output.
57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
import sys
|
|
import os
|
|
|
|
# Suppress console window for windowed applications (PyInstaller --windowed)
|
|
if getattr(sys, 'frozen', False):
|
|
# Running as compiled executable
|
|
if sys.stdout is None or sys.stderr is None:
|
|
# Windowed mode - redirect stdout/stderr to prevent console window flicker
|
|
import io
|
|
sys.stdout = io.StringIO()
|
|
sys.stderr = io.StringIO()
|
|
|
|
from PySide6.QtWidgets import QApplication, QMessageBox
|
|
|
|
from src.core.ytsage_logging import logger
|
|
from src.core.ytsage_yt_dlp import ( # Import the new yt-dlp setup functions
|
|
check_ytdlp_binary,
|
|
setup_ytdlp,
|
|
)
|
|
from src.gui.ytsage_gui_main import YTSageApp # Import the main application class from ytsage_gui_main
|
|
|
|
|
|
def show_error_dialog(message):
|
|
error_dialog = QMessageBox()
|
|
error_dialog.setIcon(QMessageBox.Icon.Critical)
|
|
error_dialog.setText("Application Error")
|
|
error_dialog.setInformativeText(message)
|
|
error_dialog.setWindowTitle("Error")
|
|
error_dialog.exec()
|
|
|
|
|
|
def main():
|
|
try:
|
|
logger.info("Starting YTSage application")
|
|
app = QApplication(sys.argv)
|
|
|
|
# Get the expected binary path and check if it exists
|
|
if not check_ytdlp_binary():
|
|
# No app-specific binary found, show setup dialog regardless of Python package
|
|
logger.warning("No yt-dlp binary found, starting setup process")
|
|
yt_dlp_path = setup_ytdlp()
|
|
if yt_dlp_path == "yt-dlp": # If user canceled or something went wrong
|
|
logger.warning("yt-dlp not configured properly")
|
|
|
|
window = YTSageApp() # Instantiate the main application class
|
|
window.show()
|
|
logger.info("Application window shown, entering main loop")
|
|
sys.exit(app.exec())
|
|
except Exception as e:
|
|
logger.critical(f"Critical application error: {e}", exc_info=True)
|
|
show_error_dialog(f"Critical error: {e}")
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|