fix: SFTP auto-refresh after file transfer

- Added program *tea.Program to SFTPBrowserTab and Model
- SetProgram() allows goroutines to send messages to Bubble Tea
- After transfer: program.Send(sftpRefreshMsg{}) triggers re-render
- Model stores program reference, passes to SFTP tab on creation
This commit is contained in:
swanadiva
2026-06-24 14:32:30 +07:00
parent 6b95385094
commit 55b5c7b5a0
4 changed files with 32 additions and 0 deletions
+16
View File
@@ -69,6 +69,8 @@ type SFTPBrowserTab struct {
transferring bool
transferMsg string
program *tea.Program
mu sync.Mutex
closeOnce sync.Once
}
@@ -98,6 +100,10 @@ func NewSFTPBrowserTab(host *models.Host, dataDir string) *SFTPBrowserTab {
func (t *SFTPBrowserTab) Name() string { return "SFTP: " + t.host.Name }
func (t *SFTPBrowserTab) SetProgram(p *tea.Program) {
t.program = p
}
func (t *SFTPBrowserTab) Init() tea.Cmd {
go t.connect()
go t.refreshLocal()
@@ -497,11 +503,21 @@ func (t *SFTPBrowserTab) copyFile(srcType, dstType paneType, srcPath, dstPath, n
t.refreshLocal()
}
// Trigger re-render in Bubble Tea
if t.program != nil {
t.program.Send(sftpRefreshMsg{})
}
// Clear success message after brief delay
time.Sleep(1 * time.Second)
t.mu.Lock()
t.transferMsg = ""
t.mu.Unlock()
// Trigger re-render again after clearing message
if t.program != nil {
t.program.Send(sftpRefreshMsg{})
}
}
func downloadFile(client *sftp.Client, remotePath, localPath string, progressFn func(int64)) error {