feat(t98): 托盤「立刻同步」——訊號檔法零 IPC,跨平台
leo:「無法知道到底同步了沒,可以在 daemon 上加一個立刻同步?」 tray 點擊寫 ~/.arcrun-rag/sync-now+短暫顯示「同步中…」;collector 主迴圈 1 秒輪詢 訊號檔、有就立刻跑一輪刪檔,無則照 PollSec 排程;完成後 status.json 更新自然刷新托盤。 測試:collector+supervisor+tray 三模組全綠(總管親跑)。 (實作=子 CC;驗證+commit=總管)
This commit is contained in:
@@ -132,6 +132,10 @@ func appDir() string {
|
||||
return filepath.Join(home, ".arcrun-rag")
|
||||
}
|
||||
|
||||
// syncNowSignalPath 回傳立刻同步訊號檔路徑(~/.arcrun-rag/sync-now)。
|
||||
// tray 寫入此檔,collector 的主迴圈(1 秒間隔)偵測到後立刻跑一輪同步並刪除它(t98)。
|
||||
func syncNowSignalPath() string { return filepath.Join(appDir(), "sync-now") }
|
||||
|
||||
func configPath() string { return filepath.Join(appDir(), "config.json") }
|
||||
|
||||
// defaultWatchFolder 預設 ~/ArcrunRAG——**刻意避開 ~/Documents**:macOS launchd 背景程序碰
|
||||
@@ -640,6 +644,24 @@ func main() {
|
||||
}, win)
|
||||
}
|
||||
|
||||
// t98:立刻同步——寫訊號檔觸發 collector 立即跑一輪,無需等下一個定時週期。
|
||||
// syncNowItem 宣告在 rebuildTray 外,確保 click handler 的 goroutine 能還原標籤後重建選單。
|
||||
var syncNowItem *fyne.MenuItem
|
||||
syncNowItem = fyne.NewMenuItem("立刻同步", func() {
|
||||
_ = os.MkdirAll(appDir(), 0o755)
|
||||
_ = os.WriteFile(syncNowSignalPath(), []byte{}, 0o644)
|
||||
syncNowItem.Label = "同步中…"
|
||||
syncNowItem.Disabled = true
|
||||
rebuildTray()
|
||||
// 還原標籤:8 秒後 collector 已完成本輪(含狀態檔更新),順手刷新一次 tray 讓時間戳更新。
|
||||
go func() {
|
||||
time.Sleep(8 * time.Second)
|
||||
syncNowItem.Label = "立刻同步"
|
||||
syncNowItem.Disabled = false
|
||||
rebuildTray()
|
||||
}()
|
||||
})
|
||||
|
||||
var pauseItem *fyne.MenuItem
|
||||
pauseItem = fyne.NewMenuItem("暫停看守", func() {
|
||||
st := sup.Status()
|
||||
@@ -714,6 +736,7 @@ func main() {
|
||||
fyne.NewMenuItem("+ 建立新資料夾並看守…", newFolderAction), // t17
|
||||
fyne.NewMenuItem("🔗 連上知識庫…(換帳號/重新連線)", func() { showConnectWizard() }), // t54
|
||||
fyne.NewMenuItemSeparator(),
|
||||
syncNowItem, // t98:立刻同步
|
||||
pauseItem,
|
||||
// 版本列(leo 2026-07-27:「daemon 要加上版本編號」):停用態=純顯示不可點。
|
||||
// 放在「結束」正上方——使用者要回報問題時,眼睛已經在選單底部這一區。
|
||||
|
||||
Reference in New Issue
Block a user