liuyuqi-cnb 3 months ago
parent
commit
78d53e89c0
1 changed files with 109 additions and 40 deletions
  1. 109 40
      gui_main.py

+ 109 - 40
gui_main.py

@@ -1,3 +1,11 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+'''
+@Contact :   liuyuqi.gov@msn.cn
+@Time    :   2023/04/27 02:55:59
+@License :   Copyright © 2017-2022 liuyuqi. All Rights Reserved.
+@Desc    :   repo_sync GUI入口
+'''
 import sys
 import sys
 import os
 import os
 import threading
 import threading
@@ -15,11 +23,46 @@ except ImportError:
     HAS_QT = False
     HAS_QT = False
     print("PyQt5 not installed, GUI mode not available")
     print("PyQt5 not installed, GUI mode not available")
 
 
-from repo_sync import RepoSync, __version__
-from dotenv import load_dotenv, set_key, find_dotenv, dotenv_values
+# 直接导入repo_sync模块
+sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
+try:
+    from repo_sync.repo_sync import RepoSync
+    from repo_sync.version import __version__
+except ImportError:
+    print("无法导入repo_sync模块,尝试直接导入...")
+    try:
+        from repo_sync import RepoSync
+        from repo_sync.version import __version__
+    except ImportError:
+        print("导入repo_sync模块失败,请确保repo_sync已正确安装")
+        __version__ = "未知"
+        
+        # 创建一个空的RepoSync类作为替代
+        class RepoSync:
+            def __init__(self, params):
+                self.params = params
+            def run(self):
+                print("RepoSync模块未找到,无法执行操作")
+
+try:
+    from dotenv import load_dotenv, set_key, find_dotenv, dotenv_values
+except ImportError:
+    print("python-dotenv未安装,请使用pip install python-dotenv安装")
+    sys.exit(1)
+    
 import json
 import json
 import uuid
 import uuid
 
 
+# 确保.env文件存在
+def ensure_env_file():
+    env_file = find_dotenv()
+    if not env_file:
+        # 创建空的.env文件
+        env_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), '.env')
+        with open(env_file, 'w') as f:
+            f.write("# repo_sync配置文件\n")
+    return env_file
+
 # Explorer路径获取
 # Explorer路径获取
 try:
 try:
     import win32com.client
     import win32com.client
@@ -334,6 +377,10 @@ class AddAccountDialog(QDialog):
 class SettingsTab(QWidget):
 class SettingsTab(QWidget):
     def __init__(self, parent=None):
     def __init__(self, parent=None):
         super().__init__(parent)
         super().__init__(parent)
+        # 确保.env文件存在
+        ensure_env_file()
+        # 初始化account_lists字典
+        self.account_lists = {}
         self.init_ui()
         self.init_ui()
 
 
     def init_ui(self):
     def init_ui(self):
@@ -368,7 +415,6 @@ class SettingsTab(QWidget):
             accounts_list_layout = QHBoxLayout()
             accounts_list_layout = QHBoxLayout()
             
             
             # 左侧:账户列表
             # 左侧:账户列表
-            self.account_lists = {}
             account_list = QListWidget()
             account_list = QListWidget()
             account_list.setMinimumWidth(200)
             account_list.setMinimumWidth(200)
             account_list.itemClicked.connect(lambda item, p=platform: self.select_account(p, item))
             account_list.itemClicked.connect(lambda item, p=platform: self.select_account(p, item))
@@ -425,7 +471,12 @@ class SettingsTab(QWidget):
         self.setLayout(layout)
         self.setLayout(layout)
         
         
         # 加载设置
         # 加载设置
-        self.load_settings()
+        try:
+            self.load_settings()
+        except Exception as e:
+            print(f"加载设置时出错: {e}")
+            import traceback
+            traceback.print_exc()
         
         
         # 连接标签页变更事件
         # 连接标签页变更事件
         self.platform_tabs.currentChanged.connect(self.tab_changed)
         self.platform_tabs.currentChanged.connect(self.tab_changed)
@@ -443,44 +494,59 @@ class SettingsTab(QWidget):
 
 
     def load_settings(self):
     def load_settings(self):
         # 读取.env文件
         # 读取.env文件
-        env_values = dotenv_values(find_dotenv())
-        
-        # 为每个平台加载账户
-        for platform in self.platform_configs.keys():
-            account_list = self.account_lists[platform]
-            account_list.clear()
-            
-            # 查找该平台的所有账户
-            accounts = self.get_platform_accounts(platform, env_values)
-            
-            # 添加到列表
-            for account in accounts:
-                item = QListWidgetItem(account)
-                # 标记默认账户
-                if account == "default":
-                    item.setData(Qt.UserRole, "default")
-                    # 检查是否有其他账户被设为启用
-                    is_enabled = True
-                    for other_account in accounts:
-                        if other_account != "default" and self.is_account_enabled(platform, other_account, env_values):
-                            is_enabled = False
-                            break
-                    item.setData(Qt.UserRole + 1, is_enabled)
-                else:
-                    item.setData(Qt.UserRole, account)
-                    item.setData(Qt.UserRole + 1, self.is_account_enabled(platform, account, env_values))
-                
-                # 设置启用状态的显示
-                if item.data(Qt.UserRole + 1):
-                    item.setData(Qt.UserRole + 2, "true")
-                    item.setText(f"{account} (启用中)")
+        try:
+            env_file = find_dotenv()
+            if not env_file:
+                print("找不到.env文件,创建一个空的")
+                env_file = ensure_env_file()
                 
                 
-                account_list.addItem(item)
+            env_values = dotenv_values(env_file)
+            print(f"成功读取.env文件: {env_file}")
             
             
-            # 选择第一个账户
-            if account_list.count() > 0:
-                account_list.setCurrentRow(0)
-                self.select_account(platform, account_list.item(0))
+            # 为每个平台加载账户
+            for platform in self.platform_configs.keys():
+                if platform not in self.account_lists:
+                    print(f"警告: 找不到平台 {platform} 的账户列表")
+                    continue
+                    
+                account_list = self.account_lists[platform]
+                account_list.clear()
+                
+                # 查找该平台的所有账户
+                accounts = self.get_platform_accounts(platform, env_values)
+                
+                # 添加到列表
+                for account in accounts:
+                    item = QListWidgetItem(account)
+                    # 标记默认账户
+                    if account == "default":
+                        item.setData(Qt.UserRole, "default")
+                        # 检查是否有其他账户被设为启用
+                        is_enabled = True
+                        for other_account in accounts:
+                            if other_account != "default" and self.is_account_enabled(platform, other_account, env_values):
+                                is_enabled = False
+                                break
+                        item.setData(Qt.UserRole + 1, is_enabled)
+                    else:
+                        item.setData(Qt.UserRole, account)
+                        item.setData(Qt.UserRole + 1, self.is_account_enabled(platform, account, env_values))
+                    
+                    # 设置启用状态的显示
+                    if item.data(Qt.UserRole + 1):
+                        item.setData(Qt.UserRole + 2, "true")
+                        item.setText(f"{account} (启用中)")
+                    
+                    account_list.addItem(item)
+                
+                # 选择第一个账户
+                if account_list.count() > 0:
+                    account_list.setCurrentRow(0)
+                    self.select_account(platform, account_list.item(0))
+        except Exception as e:
+            print(f"加载设置时出错: {e}")
+            import traceback
+            traceback.print_exc()
 
 
     def is_account_enabled(self, platform, account, env_values=None):
     def is_account_enabled(self, platform, account, env_values=None):
         """检查账户是否被设为启用"""
         """检查账户是否被设为启用"""
@@ -739,6 +805,9 @@ def main():
         return
         return
         
         
     try:
     try:
+        # 确保.env文件存在
+        ensure_env_file()
+        
         app = QApplication(sys.argv)
         app = QApplication(sys.argv)
         window = RepoSyncMainWindow()
         window = RepoSyncMainWindow()
         window.show()
         window.show()