mirror of
https://github.com/tailscale/tailscale.git
synced 2024-12-04 23:45:34 +00:00
66e4d843c1
This allows sending multiple files via Taildrop in one request. Progress is tracked via ipn.Notify. Updates tailscale/corp#18202 Signed-off-by: Percy Wegmann <percy@tailscale.com>
36 lines
941 B
Go
36 lines
941 B
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package ipnlocal
|
|
|
|
import (
|
|
"maps"
|
|
"slices"
|
|
"strings"
|
|
|
|
"tailscale.com/ipn"
|
|
)
|
|
|
|
// UpdateOutgoingFiles updates b.outgoingFiles to reflect the given updates and
|
|
// sends an ipn.Notify with the full list of outgoingFiles.
|
|
func (b *LocalBackend) UpdateOutgoingFiles(updates map[string]*ipn.OutgoingFile) {
|
|
b.mu.Lock()
|
|
if b.outgoingFiles == nil {
|
|
b.outgoingFiles = make(map[string]*ipn.OutgoingFile, len(updates))
|
|
}
|
|
maps.Copy(b.outgoingFiles, updates)
|
|
outgoingFiles := make([]*ipn.OutgoingFile, 0, len(b.outgoingFiles))
|
|
for _, file := range b.outgoingFiles {
|
|
outgoingFiles = append(outgoingFiles, file)
|
|
}
|
|
b.mu.Unlock()
|
|
slices.SortFunc(outgoingFiles, func(a, b *ipn.OutgoingFile) int {
|
|
t := a.Started.Compare(b.Started)
|
|
if t != 0 {
|
|
return t
|
|
}
|
|
return strings.Compare(a.Name, b.Name)
|
|
})
|
|
b.send(ipn.Notify{OutgoingFiles: outgoingFiles})
|
|
}
|