first commit
This commit is contained in:
commit
4890793ce5
1029 files changed
+5992
No files matched your search
@@ -0,0 +1,93 @@
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
import logging
|
||||
import customtkinter as ctk
|
||||
import threading
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
|
||||
from douyin_imbot.ui.main_window import MainWindow
|
||||
from douyin_imbot.config.settings import load_settings
|
||||
from douyin_imbot.utils.logger import setup_logger
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def ensure_playwright_browsers():
|
||||
"""确保Playwright浏览器已安装"""
|
||||
try:
|
||||
# 尝试导入playwright,检查是否已安装
|
||||
from playwright.sync_api import sync_playwright
|
||||
|
||||
# 检查是否已安装浏览器
|
||||
try:
|
||||
with sync_playwright() as p:
|
||||
# 尝试启动浏览器,如果失败则需要安装
|
||||
browser = p.chromium.launch()
|
||||
browser.close()
|
||||
logger.info("Playwright浏览器已安装")
|
||||
return True
|
||||
except Exception:
|
||||
logger.warning("Playwright浏览器未安装,正在安装...")
|
||||
|
||||
# 安装浏览器
|
||||
try:
|
||||
result = subprocess.run(
|
||||
[sys.executable, "-m", "playwright", "install", "chromium"],
|
||||
check=True,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
)
|
||||
logger.info("Playwright浏览器安装成功")
|
||||
return True
|
||||
except subprocess.CalledProcessError as e:
|
||||
logger.error(f"安装Playwright浏览器失败: {e.stderr}")
|
||||
return False
|
||||
except ImportError:
|
||||
logger.error("请先安装Playwright: pip install playwright")
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
"""应用程序主入口点."""
|
||||
# 设置日志记录器
|
||||
setup_logger()
|
||||
|
||||
# 确保Playwright浏览器已安装
|
||||
if not ensure_playwright_browsers():
|
||||
print("无法启动应用程序,请确保Playwright及其浏览器已正确安装")
|
||||
return
|
||||
|
||||
# 加载配置
|
||||
settings = load_settings()
|
||||
|
||||
# 获取要启动的浏览器数量(默认为1)
|
||||
browser_count = settings.get("browser_count", 1)
|
||||
|
||||
# 创建线程池用于管理浏览器实例
|
||||
settings["browser_executor"] = ThreadPoolExecutor(max_workers=browser_count)
|
||||
settings["browser_threads"] = []
|
||||
|
||||
logger.info(f"配置启动 {browser_count} 个浏览器实例")
|
||||
|
||||
# 设置 CustomTkinter 外观
|
||||
ctk.set_appearance_mode(settings.get("theme", "System")) # 系统模式,跟随系统主题
|
||||
ctk.set_default_color_theme(settings.get("color_theme", "blue")) # 默认颜色主题
|
||||
|
||||
# 创建并启动 CustomTkinter 应用
|
||||
app = MainWindow(settings)
|
||||
|
||||
# 添加线程管理和关闭钩子
|
||||
def on_closing():
|
||||
logger.info("正在关闭应用程序和所有浏览器实例...")
|
||||
# 关闭所有浏览器线程
|
||||
if "browser_executor" in settings:
|
||||
settings["browser_executor"].shutdown(wait=True)
|
||||
app.destroy()
|
||||
|
||||
app.protocol("WM_DELETE_WINDOW", on_closing)
|
||||
app.mainloop()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user