diff --git a/CloudSync/cloudsync/ui/sync_tab.py b/CloudSync/cloudsync/ui/sync_tab.py index 0e0a4fd..a5e53e3 100644 --- a/CloudSync/cloudsync/ui/sync_tab.py +++ b/CloudSync/cloudsync/ui/sync_tab.py @@ -276,9 +276,12 @@ class SyncTab: self.current_folder_var.set(folder_path) self.remote_dir_var.set(remote_path) - # 刷新文件预览 + # 刷新本地文件预览 self._refresh_local_tree(folder_path) + # 刷新远程文件预览 + self._refresh_remote_tree(remote_path) + # 更新访问记录 self.folder_manager.update_folder_access(folder_path) @@ -385,6 +388,91 @@ class SyncTab: except Exception as e: self.logger.error(f"Error refreshing local tree: {e}") + def _refresh_remote_tree(self, remote_path=None): + """刷新远程文件树""" + if remote_path is None: + remote_path = self.remote_dir_var.get() + + if not remote_path: + return + + # 清空现有项目 + self.remote_tree.delete(*self.remote_tree.get_children()) + + # 显示加载提示 + self.log_queue.put(f"🔄 正在加载远程文件: {remote_path}") + + def load_worker(): + try: + # 获取所有可用的云盘服务 + all_files = {} + + for cloud in self.clouds: + try: + self.log_queue.put(f" 正在从 {cloud.name} 获取文件列表...") + files = cloud.list_files(remote_path) + + if files: + all_files[cloud.name] = files + self.log_queue.put(f" ✅ {cloud.name}: 找到 {len(files)} 个文件") + else: + self.log_queue.put(f" ℹ️ {cloud.name}: 目录为空或不存在") + + except Exception as e: + self.logger.error(f"Failed to list files from {cloud.name}: {e}") + self.log_queue.put(f" ❌ {cloud.name}: 获取失败 - {str(e)[:50]}") + + # 在UI线程中更新树形视图 + def update_tree(): + if not all_files: + # 显示"无文件"提示 + self.remote_tree.insert("", "end", text="📭 远程目录为空或不存在") + return + + # 为每个云盘创建一个分类节点 + for cloud_name, files in all_files.items(): + cloud_node = self.remote_tree.insert("", "end", text=f"☁️ {cloud_name}", open=True) + + # 解析文件列表并添加到树中 + for file_info in files: + # bypy的输出格式可能是 "D 文件夹名" 或 "F 文件名 (大小)" + file_info = file_info.strip() + + if not file_info: + continue + + # 尝试解析文件类型和名称 + if file_info.startswith('D '): + # 目录 + name = file_info[2:].strip() + self.remote_tree.insert(cloud_node, "end", text=f"📁 {name}") + elif file_info.startswith('F '): + # 文件 + parts = file_info[2:].split('(') + name = parts[0].strip() + size = parts[1].rstrip(')').strip() if len(parts) > 1 else "" + display_text = f"📄 {name}" + (f" ({size})" if size else "") + self.remote_tree.insert(cloud_node, "end", text=display_text) + else: + # 未知格式,直接显示 + self.remote_tree.insert(cloud_node, "end", text=f"📄 {file_info}") + + self.log_queue.put("✅ 远程文件列表加载完成") + + self.frame.after(0, update_tree) + + except Exception as e: + self.logger.error(f"Error loading remote files: {e}") + self.log_queue.put(f"❌ 加载远程文件失败: {e}") + + def show_error(): + self.remote_tree.insert("", "end", text=f"❌ 加载失败: {str(e)[:50]}") + + self.frame.after(0, show_error) + + # 在后台线程中加载 + threading.Thread(target=load_worker, daemon=True).start() + def _browse_directory(self): """向后兼容的方法""" self._browse_and_add_folder()