diff --git a/server/web/msx/assets/html5x.html.gz b/server/web/msx/assets/html5x.html.gz deleted file mode 100644 index 862e466..0000000 Binary files a/server/web/msx/assets/html5x.html.gz and /dev/null differ diff --git a/server/web/msx/assets/russian.json.gz b/server/web/msx/assets/russian.json.gz deleted file mode 100644 index 76e3858..0000000 Binary files a/server/web/msx/assets/russian.json.gz and /dev/null differ diff --git a/server/web/msx/assets/tizen.js.gz b/server/web/msx/assets/tizen.js.gz deleted file mode 100644 index 2b3e298..0000000 Binary files a/server/web/msx/assets/tizen.js.gz and /dev/null differ diff --git a/server/web/msx/assets/torrent.js.gz b/server/web/msx/assets/torrent.js.gz deleted file mode 100644 index e3a0a84..0000000 Binary files a/server/web/msx/assets/torrent.js.gz and /dev/null differ diff --git a/server/web/msx/assets/torrents.js.gz b/server/web/msx/assets/torrents.js.gz deleted file mode 100644 index de4a4f6..0000000 Binary files a/server/web/msx/assets/torrents.js.gz and /dev/null differ diff --git a/server/web/msx/assets/tvx.js.gz b/server/web/msx/assets/tvx.js.gz deleted file mode 100644 index 4ce3e23..0000000 Binary files a/server/web/msx/assets/tvx.js.gz and /dev/null differ diff --git a/server/web/msx/msx.go b/server/web/msx/msx.go index dfb8fe5..5da8537 100644 --- a/server/web/msx/msx.go +++ b/server/web/msx/msx.go @@ -1,68 +1,97 @@ -package msx +package main import ( _ "embed" - + "encoding/json" + "net/http" + "sync" "server/version" "github.com/gin-gonic/gin" ) var ( - //go:embed assets/tvx.js.gz - tvx []byte - //go:embed assets/tizen.js.gz - tzn []byte - //go:embed assets/torrents.js.gz - trs []byte - //go:embed assets/torrent.js.gz - trn []byte - //go:embed assets/html5x.html.gz - h5x []byte - //go:embed assets/russian.json.gz + //go:embed russian.min.gz rus []byte + //go:embed torrents.min.gz + trs []byte + //go:embed torrent.min.gz + trn []byte + //go:embed ts.min.gz + its []byte + + idb = new(sync.Mutex) + ids = make(map[string]string) ) -func ass(c *gin.Context, b []byte, t string) { +func asset(c *gin.Context, t string, d []byte) { c.Header("Content-Encoding", "gzip") - c.Data(200, t+"; charset=UTF-8", b) + c.Data(200, t+"; charset=UTF-8", d) } func SetupRoute(r *gin.RouterGroup) { r.GET("/msx/:pth", func(c *gin.Context) { - s := []string{"tvx", "tizen"} + js := []string{"http://msx.benzac.de/js/tvx-plugin.min.js"} switch p := c.Param("pth"); p { case "start.json": - c.JSON(200, gin.H{ + c.JSON(200, map[string]string{ "name": "TorrServer", "version": version.Version, - "parameter": "content:request:interaction:init@{PREFIX}{SERVER}/msx/torrents", + "parameter": "menu:request:interaction:init@{PREFIX}{SERVER}/msx/ts", }) case "russian.json": - ass(c, rus, "application.json") - case "html5x": - ass(c, h5x, "text/html") - case "tvx.js": - ass(c, tvx, "text/javascript") - case "tizen.js": - ass(c, tzn, "text/javascript") + asset(c, "application/json", rus) case "torrents.js": - ass(c, trs, "text/javascript") + asset(c, "text/javascript", trs) case "torrent.js": - ass(c, trn, "text/javascript") + asset(c, "text/javascript", trn) + case "ts.js": + asset(c, "text/javascript", its) case "torrents": - s = append(s, p) + js = append(js, p+".js") p = "torrent" fallthrough case "torrent": - s = append(s, p) - b := []byte("\n\n\nTorrServer Interaction Plugin\n\n") - for _, j := range s { - b = append(b, "\n"...) + if c.Query("platform") == "tizen" { + js = append(js, "http://msx.benzac.de/interaction/js/tizen-player.js") } - c.Data(200, "text/html", append(b, "\n\n"...)) + fallthrough + case "ts": + b := []byte("\n\n\nTorrServer Plugin\n\n") + for _, j := range append(js, p+".js") { + b = append(b, "\n"...) + } + c.Data(200, "text/html; charset=UTF-8", append(b, "\n\n"...)) default: - c.AbortWithStatus(404) + c.AbortWithStatus(400) } }) + r.GET("/msx/imdb", func(c *gin.Context) { + idb.Lock() + defer idb.Unlock() + l := len(ids) + ids = make(map[string]string) + c.JSON(200, l) + }) + r.GET("/msx/imdb/:id", func(c *gin.Context) { + idb.Lock() + defer idb.Unlock() + p := c.Param("id") + i, o := ids[p] + if !o { + if r, e := http.Get("https://v2.sg.media-imdb.com/suggestion/h/" + p + ".json"); e == nil { + defer r.Body.Close() + if r.StatusCode == 200 { + var j struct { + D []struct{ I struct{ ImageUrl string } } + } + if e = json.NewDecoder(r.Body).Decode(&j); e == nil && len(j.D) > 0 { + i = j.D[0].I.ImageUrl + } + } + } + ids[p] = i + } + c.JSON(200, i) + }) } diff --git a/server/web/msx/russian.min.gz b/server/web/msx/russian.min.gz new file mode 100644 index 0000000..fb8da24 Binary files /dev/null and b/server/web/msx/russian.min.gz differ diff --git a/server/web/msx/torrent.min.gz b/server/web/msx/torrent.min.gz new file mode 100644 index 0000000..ed4d168 Binary files /dev/null and b/server/web/msx/torrent.min.gz differ diff --git a/server/web/msx/torrents.min.gz b/server/web/msx/torrents.min.gz new file mode 100644 index 0000000..ba32e73 Binary files /dev/null and b/server/web/msx/torrents.min.gz differ diff --git a/server/web/msx/ts.min.gz b/server/web/msx/ts.min.gz new file mode 100644 index 0000000..c96dba5 Binary files /dev/null and b/server/web/msx/ts.min.gz differ