main.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/usr/bin/env python3
  2. import sys
  3. import os
  4. import json
  5. from PySide6.QtWidgets import QApplication
  6. from qt_material import apply_stylesheet
  7. from hookvision.config_loader import load_config
  8. from hookvision.main_window_v2 import MainWindow
  9. import logging
  10. log_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "hookvision.log")
  11. logging.basicConfig(level=logging.WARNING, format='%(asctime)s - %(levelname)s - %(message)s',
  12. handlers=[logging.FileHandler(log_path, encoding='utf-8'), logging.StreamHandler()])
  13. def _autostart_diag():
  14. log = []
  15. log.append(f"sys.executable = {sys.executable}")
  16. log.append(f"sys.platform = {sys.platform}")
  17. log.append(f"frozen = {getattr(sys, 'frozen', False)}")
  18. config_dir = os.path.join(os.path.expanduser("~"), ".config", "HookVision")
  19. config_path = os.path.join(config_dir, "autostart.json")
  20. log.append(f"config_path = {config_path}")
  21. try:
  22. os.makedirs(config_dir, exist_ok=True)
  23. with open(config_path, "w", encoding="utf-8") as f:
  24. json.dump({"enabled": True}, f)
  25. with open(config_path, "r", encoding="utf-8") as f:
  26. data = json.load(f)
  27. log.append(f"JSON OK: {data}")
  28. os.remove(config_path)
  29. except Exception as e:
  30. log.append(f"JSON FAIL: {e}")
  31. if sys.platform != "win32":
  32. desktop_path = os.path.expanduser("~/.config/autostart/HookVision.desktop")
  33. log.append(f"Linux autostart path = {desktop_path}")
  34. msg = "\n".join(log)
  35. print(msg)
  36. with open("autostart_diag.txt", "w", encoding="utf-8") as f:
  37. f.write(msg)
  38. def main():
  39. if "--autostart-test" in sys.argv:
  40. _autostart_diag()
  41. return
  42. app = QApplication(sys.argv)
  43. apply_stylesheet(app, theme='dark_teal.xml')
  44. is_frozen = getattr(sys, 'frozen', False)
  45. config_name = "config.prod.ini" if is_frozen else "config.dev.ini"
  46. if "--prod" in sys.argv:
  47. config_name = "config.prod.ini"
  48. if "--dev" in sys.argv:
  49. config_name = "config.dev.ini"
  50. if is_frozen:
  51. # PyInstaller 打包后,优先读取可执行文件同目录的配置(部署目录)
  52. # 而不是临时解压目录 sys._MEIPASS(打包时嵌入的默认配置)
  53. app_dir = os.path.dirname(sys.executable)
  54. app_config = os.path.join(app_dir, config_name)
  55. if os.path.exists(app_config):
  56. config_path = app_config
  57. else:
  58. config_path = os.path.join(sys._MEIPASS, config_name)
  59. else:
  60. config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), config_name)
  61. config = load_config(config_path)
  62. window = MainWindow(config, config_path)
  63. window.show()
  64. sys.exit(app.exec())
  65. if __name__ == "__main__":
  66. main()