From bf388526d72be584db43397cf19aeafd458481a2 Mon Sep 17 00:00:00 2001 From: xintaofei Date: Mon, 23 Mar 2026 16:21:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4/=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E6=97=B6=EF=BC=8C=E5=8F=B3=E4=BE=A7=E8=BE=B9=E6=A0=8F?= =?UTF-8?q?=E7=9A=84=E6=8F=90=E4=BA=A4=E5=88=97=E8=A1=A8=E5=AE=9E=E6=97=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9C=80=E6=96=B0=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layout/aux-panel-git-log-tab.tsx | 35 +++++++++++++++++++ src/components/layout/branch-dropdown.tsx | 5 ++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/components/layout/aux-panel-git-log-tab.tsx b/src/components/layout/aux-panel-git-log-tab.tsx index 1443c7f..6eddf32 100644 --- a/src/components/layout/aux-panel-git-log-tab.tsx +++ b/src/components/layout/aux-panel-git-log-tab.tsx @@ -75,6 +75,8 @@ import { CollapsibleTrigger, } from "@/components/ui/collapsible" import { Skeleton } from "@/components/ui/skeleton" +import { listen, type UnlistenFn } from "@tauri-apps/api/event" +import { disposeTauriListener } from "@/lib/tauri-listener" import { useFolderContext } from "@/contexts/folder-context" import { useWorkspaceContext } from "@/contexts/workspace-context" import { @@ -862,6 +864,39 @@ export function GitLogTab() { void fetchLog() }, [fetchLog]) + // Refresh branches & log on branch change, commit, or push + useEffect(() => { + if (!folder) return + + const events = [ + "folder://git-branch-changed", + "folder://git-commit-succeeded", + "folder://git-push-succeeded", + ] as const + + const unlistens: (UnlistenFn | null)[] = events.map(() => null) + + events.forEach((eventName, i) => { + listen<{ folder_id: number }>(eventName, (event) => { + if (event.payload.folder_id !== folder.id) return + void refreshBranches() + void fetchLog({ inline: true }) + }) + .then((fn) => { + unlistens[i] = fn + }) + .catch((err) => { + console.error(`[GitLogTab] failed to listen ${eventName}:`, err) + }) + }) + + return () => { + events.forEach((eventName, i) => { + disposeTauriListener(unlistens[i], `GitLogTab.${eventName}`) + }) + } + }, [folder, refreshBranches, fetchLog]) + const handleScroll = useCallback((e: UIEvent) => { const nextScrolled = e.currentTarget.scrollTop > 0 setScrolled((prev) => (prev === nextScrolled ? prev : nextScrolled)) diff --git a/src/components/layout/branch-dropdown.tsx b/src/components/layout/branch-dropdown.tsx index f27a868..347521b 100644 --- a/src/components/layout/branch-dropdown.tsx +++ b/src/components/layout/branch-dropdown.tsx @@ -1,7 +1,7 @@ "use client" import { useState, useRef, useCallback, useMemo, useEffect } from "react" -import { listen, type UnlistenFn } from "@tauri-apps/api/event" +import { emit, listen, type UnlistenFn } from "@tauri-apps/api/event" import { GitBranch, ChevronDown, @@ -245,6 +245,9 @@ export function BranchDropdown({ const successDescription = getSuccessDescription?.(result) updateTask(taskId, { status: "completed" }) onBranchChange() + void emit("folder://git-branch-changed", { + folder_id: folder?.id, + }) if (successDescription !== false) { toast.success( t("toasts.taskCompleted", { label }),