aboutsummaryrefslogtreecommitdiff
path: root/content.go
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2021-11-27 10:05:31 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2021-11-27 10:05:31 +0100
commit90c4865b246764c3cf6df56eac5fee44c963da62 (patch)
tree6af238a7c6832c772d687261a8c1f4a7e572f673 /content.go
parentf632c108ae0996fbbcada09334bc4457bf67d48d (diff)
Remote media server support
Closes #1
Diffstat (limited to 'content.go')
-rw-r--r--content.go29
1 files changed, 27 insertions, 2 deletions
diff --git a/content.go b/content.go
index 2954ff9..215beb4 100644
--- a/content.go
+++ b/content.go
@@ -50,7 +50,8 @@ type contentConn struct {
nodeDefs []mt.NodeDef
- media []mediaFile
+ media []mediaFile
+ remotes []string
}
func (cc *contentConn) state() clientState {
@@ -251,6 +252,11 @@ func handleContent(cc *contentConn) {
})
}
+ cc.remotes = strings.Split(cmd.URL, ",")
+ for k, v := range cc.remotes {
+ cc.remotes[k] = strings.TrimSpace(v)
+ }
+
cc.SendCmd(&mt.ToSrvReqMedia{Filenames: filenames})
case *mt.ToCltMedia:
for _, f := range cmd.Files {
@@ -468,7 +474,25 @@ func muxMedia(conns []*contentConn) []mediaFile {
return media
}
-func muxContent(userName string) (itemDefs []mt.ItemDef, aliases []struct{ Alias, Orig string }, nodeDefs []mt.NodeDef, p0Map param0Map, p0SrvMap param0SrvMap, media []mediaFile, err error) {
+func muxRemotes(conns []*contentConn) []string {
+ remotes := make(map[string]struct{})
+
+ for _, cc := range conns {
+ <-cc.done()
+ for _, v := range cc.remotes {
+ remotes[v] = struct{}{}
+ }
+ }
+
+ urls := make([]string, 0, len(remotes))
+ for remote := range remotes {
+ urls = append(urls, remote)
+ }
+
+ return urls
+}
+
+func muxContent(userName string) (itemDefs []mt.ItemDef, aliases []struct{ Alias, Orig string }, nodeDefs []mt.NodeDef, p0Map param0Map, p0SrvMap param0SrvMap, media []mediaFile, remotes []string, err error) {
var conns []*contentConn
for _, srv := range Conf().Servers {
var addr *net.UDPAddr
@@ -496,6 +520,7 @@ func muxContent(userName string) (itemDefs []mt.ItemDef, aliases []struct{ Alias
itemDefs, aliases = muxItemDefs(conns)
nodeDefs, p0Map, p0SrvMap = muxNodeDefs(conns)
media = muxMedia(conns)
+ remotes = muxRemotes(conns)
return
}