package dav import ( "path/filepath" "github.com/debridmediamanager.com/zurg/internal/torrent" "github.com/debridmediamanager.com/zurg/pkg/dav" ) // createMultiTorrentResponse creates a WebDAV response for a list of torrents func createMultiTorrentResponse(torrents []torrent.Torrent) (*dav.MultiStatus, error) { var responses []dav.Response responses = append(responses, dav.Directory("/torrents")) seen := make(map[string]bool) for _, item := range torrents { if item.Progress != 100 { continue } if _, exists := seen[item.Filename]; exists { continue } seen[item.Filename] = true path := filepath.Join("/torrents", item.Filename) responses = append(responses, dav.Directory(path)) } return &dav.MultiStatus{ XMLNS: "DAV:", Response: responses, }, nil } // createTorrentResponse creates a WebDAV response for torrents with the same name func createCombinedTorrentResponse(torrents []torrent.Torrent, t *torrent.TorrentManager) (*dav.MultiStatus, error) { var responses []dav.Response // initial response is the directory itself currentPath := filepath.Join("/torrents", torrents[0].Filename) responses = append(responses, dav.Directory(currentPath)) seen := make(map[string]bool) idx := 0 var torrentResponses []dav.Response for _, torrent := range torrents { info := t.GetInfo(torrent.ID) if info == nil { continue } for _, file := range info.SelectedFiles { filename := filepath.Base(file.Path) if _, exists := seen[filename]; exists { continue } seen[filename] = true filePath := filepath.Join(currentPath, filename) torrentResponses = append(torrentResponses, dav.File( filePath, file.Bytes, convertDate(info.Added), info.Links[idx], )) idx++ } } responses = append(responses, torrentResponses...) return &dav.MultiStatus{ XMLNS: "DAV:", Response: responses, }, nil }