package dav import ( "fmt" "path/filepath" "sort" "strings" "github.com/debridmediamanager/zurg/internal/torrent" "github.com/debridmediamanager/zurg/pkg/dav" "go.uber.org/zap" ) func HandleListDirectories(t *torrent.TorrentManager) (*string, error) { davDoc := "" davDoc += dav.BaseDirectory("", "") directories := t.DirectoryMap.Keys() sort.Strings(directories) for _, directory := range directories { if strings.HasPrefix(directory, "int__") { continue } davDoc += dav.Directory(directory, "") } davDoc += "" return &davDoc, nil } func HandleListTorrents(directory string, t *torrent.TorrentManager, log *zap.SugaredLogger) (*string, error) { _, ok := t.DirectoryMap.Get(directory) if !ok { return nil, fmt.Errorf("cannot find directory %s", directory) } davDoc := "" davDoc += dav.Directory("", "") directories := t.DirectoryMap.Keys() sort.Strings(directories) for _, directory := range directories { davDoc += dav.Directory(directory, "") } davDoc += "" return &davDoc, nil } func HandleListFiles(directory, torrentName string, t *torrent.TorrentManager, log *zap.SugaredLogger) (*string, error) { torrents, ok := t.DirectoryMap.Get(directory) if !ok { return nil, fmt.Errorf("cannot find directory %s", directory) } tor, ok := torrents.Get(torrentName) if !ok { return nil, fmt.Errorf("cannot find torrent %s", torrentName) } davDoc := "" + dav.BaseDirectory(filepath.Join(directory, tor.AccessKey), tor.LatestAdded) filenames := tor.SelectedFiles.Keys() sort.Strings(filenames) for _, filename := range filenames { file, ok := tor.SelectedFiles.Get(filename) if !ok || !strings.HasPrefix(file.Link, "http") { continue } davDoc += dav.File(filename, file.Bytes, file.Ended) } davDoc += "" return &davDoc, nil }