diff --git a/server/dlna/dlna.go b/server/dlna/dlna.go index a479d75..6e43f45 100644 --- a/server/dlna/dlna.go +++ b/server/dlna/dlna.go @@ -2,6 +2,7 @@ package dlna import ( "bytes" + "fmt" "net" "os" "os/user" @@ -134,9 +135,9 @@ func onBrowseMeta(path string, rootObjectPath string, host, userAgent string) (r ret = upnpav.Container{Object: rootObj, ChildCount: 1} return } else if path == "/TR" { - // Torrents Object Meta + // TR Object Meta trObj := upnpav.Object{ - ID: "%2FR", + ID: "%2FTR", ParentID: "0", Restricted: 1, Searchable: 1, @@ -147,11 +148,11 @@ func onBrowseMeta(path string, rootObjectPath string, host, userAgent string) (r vol := len(torr.ListTorrent()) ret = upnpav.Container{Object: trObj, ChildCount: vol} return - } else if isHashPath(path) { - ret = getTorrentMeta(path, host) - return } - // err = fmt.Errorf("not implemented") + ret = getTorrentMeta(path, host) + if ret == nil { + err = fmt.Errorf("meta not found") + } return } diff --git a/server/dlna/list.go b/server/dlna/list.go index 1040ec0..962cf6b 100644 --- a/server/dlna/list.go +++ b/server/dlna/list.go @@ -128,18 +128,48 @@ func getTorrentMeta(path, host string) (ret interface{}) { } // Meta object - obj := upnpav.Object{ - ID: "%2F" + torr.TorrentSpec.InfoHash.HexString(), - ParentID: "%2FTR", - Restricted: 1, - Title: torr.Title, - Class: "object.container.storageFolder", - Date: upnpav.Timestamp{Time: time.Now()}, + if isHashPath(path) { + // hash object meta + obj := upnpav.Object{ + ID: "%2F" + torr.TorrentSpec.InfoHash.HexString(), + ParentID: "%2FTR", + Restricted: 1, + Title: torr.Title, + Date: upnpav.Timestamp{Time: time.Now()}, + } + meta := upnpav.Container{Object: obj, ChildCount: 1} + return meta + } else if filepath.Base(path) == "LD" { + parent := url.PathEscape(filepath.Dir(path)) + // LD object meta + obj := upnpav.Object{ + ID: parent + "%2FLD", + ParentID: parent, + Restricted: 1, + Searchable: 1, + Title: "Load Torrents", + Date: upnpav.Timestamp{Time: time.Now()}, + } + meta := upnpav.Container{Object: obj, ChildCount: 1} + return meta + } else { + file := filepath.Base(path) + id := url.PathEscape(path) + parent := url.PathEscape(filepath.Dir(path)) + // file object meta + obj := upnpav.Object{ + ID: id, + ParentID: parent, + Restricted: 1, + Searchable: 1, + Title: file, + Date: upnpav.Timestamp{Time: time.Now()}, + } + meta := upnpav.Container{Object: obj, ChildCount: 1} + return meta } - - meta := upnpav.Container{Object: obj, ChildCount: 1} - - return meta + + return nil } func loadTorrent(path, host string) (ret []interface{}) {