From 8147689be7a0d5fa2b18723f26c1bcbae111a781 Mon Sep 17 00:00:00 2001 From: damiva <96115589+damiva@users.noreply.github.com> Date: Fri, 24 Mar 2023 14:00:46 +0300 Subject: [PATCH] Add files via upload --- server/web/msx/msx.go | 105 ++++++++++++++++++++------------- server/web/msx/russian.min.gz | Bin 0 -> 6419 bytes server/web/msx/torrent.min.gz | Bin 0 -> 2861 bytes server/web/msx/torrents.min.gz | Bin 0 -> 2994 bytes server/web/msx/ts.min.gz | Bin 0 -> 387 bytes 5 files changed, 64 insertions(+), 41 deletions(-) create mode 100644 server/web/msx/russian.min.gz create mode 100644 server/web/msx/torrent.min.gz create mode 100644 server/web/msx/torrents.min.gz create mode 100644 server/web/msx/ts.min.gz diff --git a/server/web/msx/msx.go b/server/web/msx/msx.go index 52aa8f6..fb6a390 100644 --- a/server/web/msx/msx.go +++ b/server/web/msx/msx.go @@ -1,73 +1,96 @@ -package msx +package main import ( _ "embed" - - "server/version" + "encoding/json" + "net/http" + "sync" "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(b []byte, t string) func(*gin.Context) { - return func(c *gin.Context) { - c.Header("Content-Encoding", "gzip") - c.Data(200, t+"; charset=UTF-8", b) - } -} -func ass(c *gin.Context, b []byte, t string) { +func asset(c *gin.Context, t string, d []byte) { + c.Header("Access-Control-Allow-Origin", "*") 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:torr@{PREFIX}{SERVER}/msx/init", }) 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 0000000000000000000000000000000000000000..fb8da24ca519db83a791d0a8b4411e1f6c891deb GIT binary patch literal 6419 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 literal 0 HcmV?d00001 diff --git a/server/web/msx/torrent.min.gz b/server/web/msx/torrent.min.gz new file mode 100644 index 0000000000000000000000000000000000000000..ed4d168f066ad9a8b9882d1e2c088a27f1015ad8 GIT binary patch literal 2861 zcmV+|3)1u-iwFqVfE{E219We4a%FCGE^TRU0F78}bKAHP{wo$bqaiDrmYusyhYF)6 zP3|t!r00p*H`Ii z#GcJBScGQ@l`?6D(dQIv{T!Kw|s36 zrt!Na8;_&Q_pkn&ZWd-){Ct;;*l*V#-v9g=vkPNZ$=TUb-^CMA{>ig=D$Z6#HP1_Z z=9b6w8CI%D=|EnJB2nUNCA3La1-}<6kt>tSQbWE)p^5tYtN4rlF7-kmkjD0PJ{9r{ zk@!TtA0Xm)JS4=+sgn5=gkHJc_vrWy59yS`WE_Hy*uPwlhN0zqZNxHZW|yL@u-N2( ziV{n&>FX9|vNWPJJB8)=t9VB0O6+oM(|oC`a*mBxuIILrHYXFaCVfsO*PoivI(q%; zAOB3PI2!V3S*c9KRjF|sdJ$)Gd8Qx^J}i3m=FP|SHpjo)xR4pAgJY?3$UK-;rDf#g z>h1MaAR-fP)^I?cUVr+0CDc04gpRe5iqAzn7v{B;1(tQr!+{c}Qss&1c8{&q!eAXw zJ3Nedy+7vN|K0||9b(dcnu=jR`M}L0o)uE6z;+8c$C|TU|Gaci%c;5pEyaHX_;J>X*1ubUWvfxnE&3UAmG5i{KryG70NP{pfGe zIjf@_8)4qKM3s)15@eTiC9JvJi=vRXY&F5v_Ft9o^`wO1y^&N zT^b!1qMVz>K=yj!Zg3>W-EPqS8{dfgRG||cjOO4sWpImA)}z@TOK_8joMmj;jaQXk z91sel9gDq`ZOo+JfJnl6kLdPTeez(q;1f~oZWLzF9OHx-mQ_(C!NJ)?y-X~NlcEyN z-y%!s!Bx@B_5+%lMc&QWC@TantJRh!$E*hT;oc11eR%WQ8GqZ9`4@giHXpEjIi0Xx zV213B^>CLgj5fN;ut+BjkpQ~|nmQ6nNwpuR;jpe-$6ZUMpozfQoJcoCZo`WUwG^dn zME7A0F<>fYyee>Tvm&c3h5aFLDX&cNv_CQzs#zq$NNl%HxcD#7{gqMs)n<|F*s}mZ zB9qefz_;zEOuaaISc=<5Hl5f>mF_v*$CeRdDm5y#Q3t-VTq)=hYL$LyCX1<1G?K&C z8`0ufUWh-m;V^gj!dsp#g0}vNyh=^HqUeBtC+>cq1-P>?DwVGstIwn@UH1 ziLNFZ@)y1HFj6o3-EQ$x4G-s3?>s6_)#-VdP>k*bL36;UKR!GoW?}fEAHogWOIl}y z;fDNLk(@6G`FJPjb~^$69jWn7mLhza_Te}1abmm^9P9`~r>Ftq$|g?;;^e>E>^m*rz zMci@x?4=$u%jTZ#V;uL`W}<2alWLS?$pJWMS**oT0O5~x>iawEJnqsC7Y<#QO1fLP}VGtTK*49Wah+cet)RLvr}#W zm8ngRtLhuHfChHT>GZvJ$`(R+01BKLy3L0W;k-{6p>_g=PgC%F)X?pEj$NL>1-g-o z-OhZQD_$u%w;Y}#c;)LIO$hdR%tSFJ_14HV4>JeAU+vO?x1#5vzReAC zjA`O^KYEUE4ZJU0+)P-4Ft^iBy4mqlNIoSVTlNbUmpK&*T0{1PR8FC!oF>S+5M@#s zW0$#dL6m$_kUTS9;JkWZkF}8;$AZs`G!0C;StEv!U#p#;NMtK$9=R0Ko=1PTsB zx3w}-qRV_veazK~2(|mk9zfJJY9c~V>RSF=S?FZfhhgn;3*5l8~@-jDR3p%Tv;H3h@TP{J_n3{_LI5E65|=WN+yvrbG}%IQ!k+ z951Z_#6C&Aa%9;^3G(*DTJg3WeC863CppHwOqAd^PFF4Ohr6)Ez(^m>P+UkHW_GZ6 zKgXhu2?syKp6BR+_u*7vuV!w4Ch8nMw2Eg#qf2T#hw=Wm6($JU(O##II8y{F(di($0?sOHxtib`x$Bw+kxEz&e-k~PY90q*16u{ z1HyOS41PpIO|@nL%sw^e(|Y&h;N5b`SHa`Lk?^tbNZ7_VF-C^iZd=gsokcB*Bk`R& zYdV!M7m=pfkd>6FX3SQ)gX*AiZ=-msK`fa`l^4_F1^mOemLp}nkHOh^bTOu~A!;nG zvmXcM)j@UObv_c>1aM#&fuACDLJzMx+-@lrw)PVIgrCOr{lmyVrjrzQ{pi7f@JvAA ztH;hfzC}FSrwO5QUf?X4=#fVRT!*3efbu4BrC1FaHjl(t0@t01oiqD`jz2NFxhHa{ ztGOOMT7ZwKAUt)_7P!rePh~w}tBV6A`)YtNN`dOxg;J8Mjz)}RBiu%il-`mp{G$hO zj|LtW_Ta_QfJq`58+_8;K!{s*e_~sg(E|H7WxsyBq_U_r84k#?tF%p8*d30IRD^92 zzxisn3cpm5(DW49jAWZCwQxzRdgtY+BJ30CUOemIYSh zEekpl&>I)cy;n+vYwV~&)sb>S$nqoN?tRcgPe;$SiSIW{8AxsaWc5U{r+5Gc!@>Un L5%XYjnHm59pvI!n literal 0 HcmV?d00001 diff --git a/server/web/msx/torrents.min.gz b/server/web/msx/torrents.min.gz new file mode 100644 index 0000000000000000000000000000000000000000..ba32e736b039220a5708fc96a8ad27bfbdfd66c7 GIT binary patch literal 2994 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 literal 0 HcmV?d00001 diff --git a/server/web/msx/ts.min.gz b/server/web/msx/ts.min.gz new file mode 100644 index 0000000000000000000000000000000000000000..c96dba5fbef5b806012456c8b499684bc9ab7986 GIT binary patch literal 387 zcmV-}0et=+iwFo7fgNN319WpPZE0=*eUV#F0x=MU{|fej>}EFwAADJ|!5a#R7XmBt zW}4jrYPwUM>57E#-z_XEF~szx>6vrpn`t(g4ox-Jm|1IBS{#8YR>7>o+-ZwJxXvci z0XiVHd#H;ggR9>93JU`iAS@dP2Di{G7dveP?-j61e^iVirsJ9M(MA?0%IHElD8}HN z#yKCteJE;R>YZbt51j+cip)@vDp}6K-BiYm9R)%a1p%{&g$O&?YzCN$=Ke7ikq@Zn zXGfWRqMZrDFs5LQs)R&jmT21ps8N%N*x%VxB%&?b@=U~q-cc!9C5J%lEU7tcaV~w2 zKv2c3l@B;M4ZBN?gh&I8o(I=iKN6ou h#eQ#a+s`80g#K*8vGxD} literal 0 HcmV?d00001