| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #!/usr/bin/env python3
- import sys
- import os
- import json
- from PySide6.QtWidgets import QApplication
- from qt_material import apply_stylesheet
- from hookvision.config_loader import load_config
- from hookvision.main_window_v2 import MainWindow
- import logging
- log_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "hookvision.log")
- logging.basicConfig(level=logging.WARNING, format='%(asctime)s - %(levelname)s - %(message)s',
- handlers=[logging.FileHandler(log_path, encoding='utf-8'), logging.StreamHandler()])
- def _autostart_diag():
- log = []
- log.append(f"sys.executable = {sys.executable}")
- log.append(f"sys.platform = {sys.platform}")
- log.append(f"frozen = {getattr(sys, 'frozen', False)}")
- config_dir = os.path.join(os.path.expanduser("~"), ".config", "HookVision")
- config_path = os.path.join(config_dir, "autostart.json")
- log.append(f"config_path = {config_path}")
- try:
- os.makedirs(config_dir, exist_ok=True)
- with open(config_path, "w", encoding="utf-8") as f:
- json.dump({"enabled": True}, f)
- with open(config_path, "r", encoding="utf-8") as f:
- data = json.load(f)
- log.append(f"JSON OK: {data}")
- os.remove(config_path)
- except Exception as e:
- log.append(f"JSON FAIL: {e}")
- if sys.platform != "win32":
- desktop_path = os.path.expanduser("~/.config/autostart/HookVision.desktop")
- log.append(f"Linux autostart path = {desktop_path}")
- msg = "\n".join(log)
- print(msg)
- with open("autostart_diag.txt", "w", encoding="utf-8") as f:
- f.write(msg)
- def main():
- if "--autostart-test" in sys.argv:
- _autostart_diag()
- return
- app = QApplication(sys.argv)
- apply_stylesheet(app, theme='dark_teal.xml')
- is_frozen = getattr(sys, 'frozen', False)
- config_name = "config.prod.ini" if is_frozen else "config.dev.ini"
- if "--prod" in sys.argv:
- config_name = "config.prod.ini"
- if "--dev" in sys.argv:
- config_name = "config.dev.ini"
- if is_frozen:
- # PyInstaller 打包后,优先读取可执行文件同目录的配置(部署目录)
- # 而不是临时解压目录 sys._MEIPASS(打包时嵌入的默认配置)
- app_dir = os.path.dirname(sys.executable)
- app_config = os.path.join(app_dir, config_name)
- if os.path.exists(app_config):
- config_path = app_config
- else:
- config_path = os.path.join(sys._MEIPASS, config_name)
- else:
- config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), config_name)
- config = load_config(config_path)
- window = MainWindow(config, config_path)
- window.show()
- sys.exit(app.exec())
- if __name__ == "__main__":
- main()
|