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(directory, ""))
|
||||||
}
|
}
|
||||||
|
buf.WriteString(dav.BaseDirectory(config.DOWNLOADS, ""))
|
||||||
buf.WriteString("</d:multistatus>")
|
buf.WriteString("</d:multistatus>")
|
||||||
return buf.Bytes(), nil
|
return buf.Bytes(), nil
|
||||||
}
|
}
|
||||||
@@ -86,3 +87,17 @@ func ServeFilesListForInfuse(directory, torrentName string, torMgr *torrent.Torr
|
|||||||
buf.WriteString("</d:multistatus>")
|
buf.WriteString("</d:multistatus>")
|
||||||
return buf.Bytes(), nil
|
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(directory, ""))
|
||||||
}
|
}
|
||||||
|
buf.WriteString(dav.Directory(config.DOWNLOADS, ""))
|
||||||
buf.WriteString("</d:multistatus>")
|
buf.WriteString("</d:multistatus>")
|
||||||
return buf.Bytes(), nil
|
return buf.Bytes(), nil
|
||||||
}
|
}
|
||||||
@@ -112,3 +113,18 @@ func HandleSingleFile(directory, torrentName, fileName string, torMgr *torrent.T
|
|||||||
buf.WriteString("</d:multistatus>")
|
buf.WriteString("</d:multistatus>")
|
||||||
return buf.Bytes(), nil
|
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/", zr.davRootHandler)
|
||||||
router.GET("/dav/:directory/", zr.davTorrentsListHandler)
|
router.GET("/dav/:directory/", zr.davTorrentsListHandler)
|
||||||
router.GET("/dav/:directory/:torrent/", zr.davFilesListHandler)
|
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
|
// DELETE routes
|
||||||
router.DELETE("/dav/:directory/:torrent/", zr.deleteTorrentHandler)
|
router.DELETE("/dav/:directory/:torrent/", zr.deleteTorrentHandler)
|
||||||
router.DELETE("/dav/:directory/:torrent/:file", zr.deleteFileHandler)
|
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) {
|
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) {
|
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) {
|
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) {
|
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\"")
|
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
|
Host string `json:"host"` // Host main domain
|
||||||
Download string `json:"download"` // Generated link
|
Download string `json:"download"` // Generated link
|
||||||
Streamable int `json:"streamable"`
|
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 {
|
type Torrent struct {
|
||||||
|
|||||||
Reference in New Issue
Block a user