+ mu sync.RWMutex
+}
+
+type ClientFileTransferMgr struct {
+ transfers map[FileTransferType]map[FileTransferID]*FileTransfer
+
+ mu sync.RWMutex
+}
+
+func NewClientFileTransferMgr() ClientFileTransferMgr {
+ return ClientFileTransferMgr{
+ transfers: map[FileTransferType]map[FileTransferID]*FileTransfer{
+ FileDownload: {},
+ FileUpload: {},
+ FolderDownload: {},
+ FolderUpload: {},
+ BannerDownload: {},
+ },
+ }
+}
+
+func (cftm *ClientFileTransferMgr) Add(ftType FileTransferType, ft *FileTransfer) {
+ cftm.mu.Lock()
+ defer cftm.mu.Unlock()
+
+ cftm.transfers[ftType][ft.refNum] = ft
+}
+
+func (cftm *ClientFileTransferMgr) Get(ftType FileTransferType) []FileTransfer {
+ cftm.mu.Lock()
+ defer cftm.mu.Unlock()
+
+ fts := cftm.transfers[ftType]
+
+ var transfers []FileTransfer
+ for _, ft := range fts {
+ transfers = append(transfers, *ft)
+ }
+
+ return transfers