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

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

View File

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

View File

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

View File

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