Serve downloads list
This commit is contained in:
@@ -22,6 +22,7 @@ func ServeRootDirectoryForInfuse(torMgr *torrent.TorrentManager) ([]byte, error)
|
||||
}
|
||||
buf.WriteString(dav.BaseDirectory(directory, ""))
|
||||
}
|
||||
buf.WriteString(dav.BaseDirectory(config.DOWNLOADS, ""))
|
||||
buf.WriteString("</d:multistatus>")
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
@@ -86,3 +87,17 @@ func ServeFilesListForInfuse(directory, torrentName string, torMgr *torrent.Torr
|
||||
buf.WriteString("</d:multistatus>")
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func ServeDownloadsListForInfuse(torMgr *torrent.TorrentManager) ([]byte, error) {
|
||||
var buf bytes.Buffer
|
||||
if !torMgr.Config.GetConfig().UseDownloadCache {
|
||||
buf.WriteString("Enable download cache in config to use this feature")
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
buf.WriteString("<?xml version=\"1.0\" encoding=\"utf-8\"?><d:multistatus xmlns:d=\"DAV:\">")
|
||||
for _, download := range torMgr.DownloadCache.Items() {
|
||||
buf.WriteString(dav.File(download.Filename, download.Filesize, download.Generated))
|
||||
}
|
||||
buf.WriteString("</d:multistatus>")
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ func ServeRootDirectory(torMgr *torrent.TorrentManager) ([]byte, error) {
|
||||
}
|
||||
buf.WriteString(dav.Directory(directory, ""))
|
||||
}
|
||||
buf.WriteString(dav.Directory(config.DOWNLOADS, ""))
|
||||
buf.WriteString("</d:multistatus>")
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
@@ -112,3 +113,18 @@ func HandleSingleFile(directory, torrentName, fileName string, torMgr *torrent.T
|
||||
buf.WriteString("</d:multistatus>")
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
func ServeDownloadsList(torMgr *torrent.TorrentManager) ([]byte, error) {
|
||||
var buf bytes.Buffer
|
||||
if !torMgr.Config.GetConfig().UseDownloadCache {
|
||||
buf.WriteString("Enable download cache in config to use this feature")
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
buf.WriteString("<?xml version=\"1.0\" encoding=\"utf-8\"?><d:multistatus xmlns:d=\"DAV:\">")
|
||||
buf.WriteString(dav.BaseDirectory(config.DOWNLOADS, ""))
|
||||
for _, download := range torMgr.DownloadCache.Items() {
|
||||
buf.WriteString(dav.File(download.Filename, download.Filesize, download.Generated))
|
||||
}
|
||||
buf.WriteString("</d:multistatus>")
|
||||
return buf.Bytes(), nil
|
||||
}
|
||||
|
||||
@@ -57,6 +57,10 @@ func ApplyRouteTable(router *httprouter.Router, getfile *universal.GetFile, torM
|
||||
router.GET("/dav/", zr.davRootHandler)
|
||||
router.GET("/dav/:directory/", zr.davTorrentsListHandler)
|
||||
router.GET("/dav/:directory/:torrent/", zr.davFilesListHandler)
|
||||
// EXTRA: for browser handling of infuse
|
||||
router.GET("/infuse/", zr.infuseDavRootHandler)
|
||||
router.GET("/infuse/:directory/", zr.infuseDavTorrentsListHandler)
|
||||
router.GET("/infuse/:directory/:torrent/", zr.infuseDavFilesListHandler)
|
||||
// DELETE routes
|
||||
router.DELETE("/dav/:directory/:torrent/", zr.deleteTorrentHandler)
|
||||
router.DELETE("/dav/:directory/:torrent/:file", zr.deleteFileHandler)
|
||||
@@ -129,11 +133,25 @@ func (zr *ZurgRouter) httpTorrentsListHandler(resp http.ResponseWriter, req *htt
|
||||
}
|
||||
|
||||
func (zr *ZurgRouter) davTorrentsListHandler(resp http.ResponseWriter, req *http.Request, params httprouter.Params) {
|
||||
zr.handleTorrentsListRequest(resp, req, params, dav.ServeTorrentsList, "text/xml; charset=\"utf-8\"")
|
||||
directory := params.ByName("directory")
|
||||
handlerFunc := dav.ServeTorrentsList
|
||||
if directory == config.DOWNLOADS {
|
||||
handlerFunc = func(_ string, torMgr *torrent.TorrentManager) ([]byte, error) {
|
||||
return dav.ServeDownloadsList(torMgr)
|
||||
}
|
||||
}
|
||||
zr.handleTorrentsListRequest(resp, req, params, handlerFunc, "text/xml; charset=\"utf-8\"")
|
||||
}
|
||||
|
||||
func (zr *ZurgRouter) infuseDavTorrentsListHandler(resp http.ResponseWriter, req *http.Request, params httprouter.Params) {
|
||||
zr.handleTorrentsListRequest(resp, req, params, dav.ServeTorrentsListForInfuse, "text/xml; charset=\"utf-8\"")
|
||||
directory := params.ByName("directory")
|
||||
handlerFunc := dav.ServeTorrentsListForInfuse
|
||||
if directory == config.DOWNLOADS {
|
||||
handlerFunc = func(_ string, torMgr *torrent.TorrentManager) ([]byte, error) {
|
||||
return dav.ServeDownloadsListForInfuse(torMgr)
|
||||
}
|
||||
}
|
||||
zr.handleTorrentsListRequest(resp, req, params, handlerFunc, "text/xml; charset=\"utf-8\"")
|
||||
}
|
||||
|
||||
func (zr *ZurgRouter) handleFilesListRequest(resp http.ResponseWriter, req *http.Request, params httprouter.Params, handleFunc func(string, string, *torrent.TorrentManager) ([]byte, error), contentType string) {
|
||||
@@ -158,6 +176,7 @@ func (zr *ZurgRouter) davFilesListHandler(resp http.ResponseWriter, req *http.Re
|
||||
}
|
||||
|
||||
func (zr *ZurgRouter) infuseDavFilesListHandler(resp http.ResponseWriter, req *http.Request, params httprouter.Params) {
|
||||
fmt.Println(">>>>>>>>>>>>>>>>>>> infuseDavFilesListHandler", params.ByName("directory"), params.ByName("torrent"))
|
||||
zr.handleFilesListRequest(resp, req, params, dav.ServeFilesListForInfuse, "text/xml; charset=\"utf-8\"")
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,22 @@ type Download struct {
|
||||
Host string `json:"host"` // Host main domain
|
||||
Download string `json:"download"` // Generated link
|
||||
Streamable int `json:"streamable"`
|
||||
Generated string `json:"-"` // jsonDate
|
||||
}
|
||||
|
||||
func (d *Download) UnmarshalJSON(data []byte) error {
|
||||
type Alias Download
|
||||
aux := &struct {
|
||||
Generated string `json:"generated"`
|
||||
*Alias
|
||||
}{
|
||||
Alias: (*Alias)(d),
|
||||
}
|
||||
if err := json.Unmarshal(data, &aux); err != nil {
|
||||
return err
|
||||
}
|
||||
d.Generated = strings.Replace(aux.Generated, "Z", "+01:00", 1)
|
||||
return nil
|
||||
}
|
||||
|
||||
type Torrent struct {
|
||||
|
||||
Reference in New Issue
Block a user