mirror of
https://github.com/Ernous/TorrServerJellyfin.git
synced 2025-12-19 13:36:09 +05:00
add dlna
This commit is contained in:
133
server/dlna/dlna.go
Normal file
133
server/dlna/dlna.go
Normal file
@@ -0,0 +1,133 @@
|
||||
package dlna
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"net"
|
||||
"os"
|
||||
"os/user"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/anacrolix/dms/dlna/dms"
|
||||
|
||||
"server/log"
|
||||
"server/web/pages/template"
|
||||
)
|
||||
|
||||
var dmsServer *dms.Server
|
||||
|
||||
func Start() {
|
||||
dmsServer = &dms.Server{
|
||||
Interfaces: func() (ifs []net.Interface) {
|
||||
var err error
|
||||
ifs, err = net.Interfaces()
|
||||
if err != nil {
|
||||
log.TLogln(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return
|
||||
}(),
|
||||
HTTPConn: func() net.Listener {
|
||||
conn, err := net.Listen("tcp", ":9080")
|
||||
if err != nil {
|
||||
log.TLogln(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return conn
|
||||
}(),
|
||||
FriendlyName: getDefaultFriendlyName(),
|
||||
NoTranscode: true,
|
||||
NoProbe: true,
|
||||
Icons: []dms.Icon{
|
||||
dms.Icon{
|
||||
Width: 192,
|
||||
Height: 192,
|
||||
Depth: 32,
|
||||
Mimetype: "image/png",
|
||||
ReadSeeker: bytes.NewReader(template.Androidchrome192x192png),
|
||||
},
|
||||
dms.Icon{
|
||||
Width: 32,
|
||||
Height: 32,
|
||||
Depth: 32,
|
||||
Mimetype: "image/png",
|
||||
ReadSeeker: bytes.NewReader(template.Favicon32x32png),
|
||||
},
|
||||
},
|
||||
NotifyInterval: 30 * time.Second,
|
||||
AllowedIpNets: func() []*net.IPNet {
|
||||
var nets []*net.IPNet
|
||||
_, ipnet, _ := net.ParseCIDR("0.0.0.0/0")
|
||||
nets = append(nets, ipnet)
|
||||
_, ipnet, _ = net.ParseCIDR("::/0")
|
||||
nets = append(nets, ipnet)
|
||||
return nets
|
||||
}(),
|
||||
OnBrowseDirectChildren: onBrowse,
|
||||
OnBrowseMetadata: onBrowseMeta,
|
||||
}
|
||||
|
||||
if err := dmsServer.Init(); err != nil {
|
||||
log.TLogln("error initing dms server: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
go func() {
|
||||
if err := dmsServer.Run(); err != nil {
|
||||
log.TLogln(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func Stop() {
|
||||
if dmsServer != nil {
|
||||
dmsServer.Close()
|
||||
dmsServer = nil
|
||||
}
|
||||
}
|
||||
|
||||
func onBrowse(path, rootObjectPath, host, userAgent string) (ret []interface{}, err error) {
|
||||
if path == "/" {
|
||||
ret = getTorrents()
|
||||
return
|
||||
} else if isHashPath(path) {
|
||||
ret = getTorrent(path, host)
|
||||
return
|
||||
} else if filepath.Base(path) == "Load Torrent" {
|
||||
ret = loadTorrent(path, host)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func onBrowseMeta(path string, rootObjectPath string, host, userAgent string) (ret interface{}, err error) {
|
||||
err = fmt.Errorf("not implemented")
|
||||
return
|
||||
}
|
||||
|
||||
func getDefaultFriendlyName() string {
|
||||
ret := "TorrServer"
|
||||
userName := ""
|
||||
user, err := user.Current()
|
||||
if err != nil {
|
||||
log.TLogln("getDefaultFriendlyName could not get username: %s", err)
|
||||
} else {
|
||||
userName = user.Name
|
||||
}
|
||||
host, err := os.Hostname()
|
||||
if err != nil {
|
||||
log.TLogln("getDefaultFriendlyName could not get hostname: %s", err)
|
||||
}
|
||||
|
||||
if userName == "" && host == "" {
|
||||
return ret
|
||||
}
|
||||
|
||||
if userName != "" && host != "" {
|
||||
if userName == host {
|
||||
return ret + ": " + userName
|
||||
}
|
||||
return ret + ": " + userName + " on " + host
|
||||
}
|
||||
return ret + ": " + userName + host
|
||||
}
|
||||
Reference in New Issue
Block a user