add: send files

This commit is contained in:
2026-02-04 17:57:56 +08:00
parent 68533dad31
commit 0e94ae3220
17 changed files with 725 additions and 315 deletions

View File

@@ -17,7 +17,7 @@ type Service struct {
savePath string // 默认下载目录
// pendingRequests 存储等待用户确认的通道
// Key: TransferID, Value: Transfer
// Key: TransferID, Value: *Transfer
transferList sync.Map
discoveryService *discovery.Service
@@ -63,21 +63,21 @@ func (s *Service) Start() {
}()
}
func (s *Service) GetTransferList() []Transfer {
var requests []Transfer
func (s *Service) GetTransferList() []*Transfer {
var requests []*Transfer
s.transferList.Range(func(key, value any) bool {
requests = append(requests, value.(Transfer))
requests = append(requests, value.(*Transfer))
return true
})
return requests
}
func (s *Service) GetTransfer(transferID string) (Transfer, bool) {
func (s *Service) GetTransfer(transferID string) (*Transfer, bool) {
val, ok := s.transferList.Load(transferID)
if !ok {
return Transfer{}, false
return nil, false
}
return val.(Transfer), true
return val.(*Transfer), true
}
func (s *Service) CancelTransfer(transferID string) {
@@ -87,8 +87,36 @@ func (s *Service) CancelTransfer(transferID string) {
t, ok := s.GetTransfer(transferID)
if ok {
t.Status = TransferStatusCanceled
s.transferList.Store(transferID, t)
s.app.Event.Emit("transfer:refreshList")
s.StoreTransferToList(t)
}
}
}
func (s *Service) StoreTransferToList(transfer *Transfer) {
s.transferList.Store(transfer.ID, transfer)
s.NotifyTransferListUpdate()
}
func (s *Service) NotifyTransferListUpdate() {
s.app.Event.Emit("transfer:refreshList")
}
// CleanTransferList 清理完成的 transfer
func (s *Service) CleanTransferList() {
s.transferList.Range(func(key, value any) bool {
task := value.(*Transfer)
if task.Status == TransferStatusCompleted ||
task.Status == TransferStatusError ||
task.Status == TransferStatusCanceled ||
task.Status == TransferStatusRejected {
s.transferList.Delete(key)
}
return true
})
s.NotifyTransferListUpdate()
}
func (s *Service) DeleteTransfer(transferID string) {
s.transferList.Delete(transferID)
s.NotifyTransferListUpdate()
}