fix: auto save block ask process

fix: mark all pending transfers canceled when app exit
This commit is contained in:
2026-02-05 15:48:59 +08:00
parent 99c71f5179
commit d9db99946d
5 changed files with 29 additions and 6 deletions

View File

@@ -30,6 +30,7 @@
- [x] 系统通知 - [x] 系统通知
- [ ] 应用图标 - [ ] 应用图标
- [ ] 系统托盘(最小化到托盘) - [ ] 系统托盘(最小化到托盘)
- [ ] 清理历史
## 技术栈 ## 技术栈

View File

@@ -71,6 +71,11 @@ func (s *Service) SendFile(target *discovery.Peer, targetIP string, filePath str
task.Status = TransferStatusCanceled task.Status = TransferStatusCanceled
} else { } else {
// 如果请求发送失败,更新状态为 Error // 如果请求发送失败,更新状态为 Error
if errors.Is(err, io.EOF) {
// 接收方离线
task.Status = TransferStatusCanceled
return
}
task.Status = TransferStatusError task.Status = TransferStatusError
task.ErrorMsg = fmt.Sprintf("Failed to connect to receiver: %v", err) task.ErrorMsg = fmt.Sprintf("Failed to connect to receiver: %v", err)
} }
@@ -125,6 +130,11 @@ func (s *Service) SendFolder(target *discovery.Peer, targetIP string, folderPath
task.Status = TransferStatusCanceled task.Status = TransferStatusCanceled
} else { } else {
// 如果请求发送失败,更新状态为 Error // 如果请求发送失败,更新状态为 Error
if errors.Is(err, io.EOF) {
// 接收方离线
task.Status = TransferStatusCanceled
return
}
task.Status = TransferStatusError task.Status = TransferStatusError
task.ErrorMsg = fmt.Sprintf("Failed to connect to receiver: %v", err) task.ErrorMsg = fmt.Sprintf("Failed to connect to receiver: %v", err)
} }
@@ -180,6 +190,11 @@ func (s *Service) SendText(target *discovery.Peer, targetIP string, text string)
task.Status = TransferStatusCanceled task.Status = TransferStatusCanceled
} else { } else {
// 如果请求发送失败,更新状态为 Error // 如果请求发送失败,更新状态为 Error
if errors.Is(err, io.EOF) {
// 接收方离线
task.Status = TransferStatusCanceled
return
}
task.Status = TransferStatusError task.Status = TransferStatusError
task.ErrorMsg = fmt.Sprintf("Failed to connect to receiver: %v", err) task.ErrorMsg = fmt.Sprintf("Failed to connect to receiver: %v", err)
} }

View File

@@ -9,9 +9,16 @@ import (
) )
func (s *Service) SaveHistory() { func (s *Service) SaveHistory() {
// 将 pending 状态的任务改为 canceled
transferList := s.GetTransferList()
for _, task := range transferList {
if task.Status == TransferStatusPending {
task.Status = TransferStatusCanceled
}
}
configDir := config.GetConfigDir() configDir := config.GetConfigDir()
historyPath := filepath.Join(configDir, "history.json") historyPath := filepath.Join(configDir, "history.json")
historyJson, err := json.Marshal(s.GetTransferList()) historyJson, err := json.Marshal(transferList)
if err != nil { if err != nil {
return return
} }

View File

@@ -55,11 +55,10 @@ type TransferOption func(*Transfer)
func NewTransfer(id string, sender Sender, opts ...TransferOption) *Transfer { func NewTransfer(id string, sender Sender, opts ...TransferOption) *Transfer {
t := &Transfer{ t := &Transfer{
ID: id, ID: id,
CreateTime: time.Now().UnixMilli(), CreateTime: time.Now().UnixMilli(),
Sender: sender, Sender: sender,
Status: TransferStatusPending, // Default status Status: TransferStatusPending, // Default status
DecisionChan: make(chan Decision, 1),
} }
for _, opt := range opts { for _, opt := range opts {

View File

@@ -40,6 +40,7 @@ func (s *Service) handleAsk(c *gin.Context) {
// 存储请求 // 存储请求
task.Type = TransferTypeReceive task.Type = TransferTypeReceive
task.Status = TransferStatusPending task.Status = TransferStatusPending
task.DecisionChan = make(chan Decision, 1)
s.StoreTransferToList(&task) s.StoreTransferToList(&task)
if s.config.GetAutoAccept() { if s.config.GetAutoAccept() {