From a9b3c6776ce38fdd81a9d605cbadebac5d572c8d Mon Sep 17 00:00:00 2001 From: damiva <96115589+damiva@users.noreply.github.com> Date: Sat, 4 Feb 2023 13:30:10 +0300 Subject: [PATCH 01/18] Update msx.go --- server/web/msx/msx.go | 282 +++++------------------------------------- 1 file changed, 32 insertions(+), 250 deletions(-) diff --git a/server/web/msx/msx.go b/server/web/msx/msx.go index 0dfdab8..42c98d1 100644 --- a/server/web/msx/msx.go +++ b/server/web/msx/msx.go @@ -1,262 +1,44 @@ package msx import ( - "fmt" - "net/url" - "path/filepath" - "strings" - - sets "server/settings" - "server/torr" - "server/torr/state" - "server/utils" + _ "embed" + "server/version" "github.com/gin-gonic/gin" ) -type msxMenu struct { - Logo string `json:"logo,omitempty"` - Reuse bool `json:"reuse"` - Cache bool `json:"cache"` - Restore bool `json:"restore"` - Reference string `json:"reference,omitempty"` - Menu []msxMenuItem `json:"menu"` +var ( + //go:embed assets/tvx.js.gz + tvx []byte + //go:embed assets/tizen.html.gz + tzn []byte + //go:embed assets/torrents.min.html.gz + trn []byte + //go:embed assets/html5x.html.gz + h5x []byte + //go:embed assets/russian.json.gz + rus []byte +) + +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) + } } -type msxMenuItem struct { - Icon string `json:"icon,omitempty"` - Label string `json:"label,omitempty"` - Data msxData `json:"data,omitempty"` -} - -type msxTemplate struct { - Type string `json:"type,omitempty"` - Layout string `json:"layout,omitempty"` - Color string `json:"color,omitempty"` - Icon string `json:"icon,omitempty"` - IconSize string `json:"iconSize,omitempty"` - BadgeColor string `json:"badgeColor,omitempty"` - TagColor string `json:"tagColor,omitempty"` - Properties gin.H `json:"properties,omitempty"` -} - -type msxData struct { - Type string `json:"type,omitempty"` - Headline string `json:"headline,omitempty"` - Action string `json:"action,omitempty"` - Template msxTemplate `json:"template,omitempty"` - Items []msxItem `json:"items,omitempty"` - Pages []msxPage `json:"pages,omitempty"` -} - -type msxItem struct { - Title string `json:"title,omitempty"` - Label string `json:"label,omitempty"` - PlayerLabel string `json:"playerLabel,omitempty"` - Action string `json:"action,omitempty"` - Image string `json:"image,omitempty"` - Icon string `json:"icon,omitempty"` - Badge string `json:"badge,omitempty"` - Tag string `json:"tag,omitempty"` - Data gin.H `json:"data,omitempty"` -} - -type msxPage struct { - Items []gin.H `json:"items,omitempty"` -} - -const ICON_OPTIONS = "tune" - -func msxStart(c *gin.Context) { - c.JSON(200, gin.H{ - "name": "TorrServer", - "version": version.Version, - "parameter": "menu:{PREFIX}{SERVER}/msx/torrents", +func SetupRoute(r *gin.RouterGroup) { + r.GET("/msx/start.json", func(c *gin.Context) { + c.JSON(200, gin.H{ + "name": "TorrServer", + "version": "0.0.1", + "parameter": "content:request:interaction:init@{PREFIX}{SERVER}/msx/torrents", + }) }) -} - -// /msx/torrents -func msxTorrents(c *gin.Context) { - torrs := torr.ListTorrent() - - host := utils.GetScheme(c) + "://" + c.Request.Host - logo := host + "/apple-touch-icon.png" - list := make([]msxItem, len(torrs)) - - for i, tor := range torrs { - item := msxItem{ - Title: tor.Title, - Image: tor.Poster, - Action: "content:" + host + "/msx/playlist/" + url.PathEscape(tor.Title) + - "?hash=" + tor.TorrentSpec.InfoHash.HexString() + "&platform={PLATFORM}", - } - list[i] = item - } - - c.JSON(200, msxMenu{ - Logo: logo, - Cache: false, - Reuse: false, - Restore: false, - Reference: host + "/msx/torrents", - Menu: []msxMenuItem{ - // Main page - { - Icon: "list", - Label: "Torrents", - Data: msxData{ - Type: "pages", - Template: msxTemplate{ - Type: "separate", - Layout: "0,0,2,4", - Icon: "msx-white-soft:movie", - Color: "msx-glass", - }, - Items: list, - }, - // About - }, { - Icon: "info", - Label: "About", - Data: msxData{ - Pages: []msxPage{ - { - Items: []gin.H{ - { - "type": "default", - "headline": "TorrServer " + version.Version, - "text": "https://github.com/YouROK/TorrServer", - "image": logo, - "imageFiller": "height-left", - "imageWidth": 2, - "layout": "0,0,8,2", - "color": "msx-gray-soft", - }, - }, - }, - }, - }, - }, - }, - }) -} - -// /msx/playlist?hash=... -func msxPlaylist(c *gin.Context) { - hash, _ := c.GetQuery("hash") - if hash == "" { - c.JSON(200, msxData{ - Action: "error:Item not found", - }) - return - } - platform, _ := c.GetQuery("platform") - - tor := torr.GetTorrent(hash) - if tor == nil { - c.JSON(200, msxData{ - Action: "error:Item not found", - }) - return - } - - if tor.Stat == state.TorrentInDB { - tor = torr.LoadTorrent(tor) - if tor == nil { - c.JSON(200, msxData{ - Action: "error:Error while getting torrent info", - }) - return - } - } - - host := utils.GetScheme(c) + "://" + c.Request.Host - status := tor.Status() - viewed := sets.ListViewed(hash) - var list []msxItem - contentAction := "" - - for _, f := range status.FileStats { - mime := utils.GetMimeType(f.Path) - action := mime[0 : len(mime)-2] - - if action == "*" { - continue - } - name := filepath.Base(f.Path) - uri := host + "/stream/" + url.PathEscape(name) + "?link=" + hash + "&index=" + fmt.Sprint(f.Id) + "&play" - item := msxItem{ - Label: name, - PlayerLabel: strings.TrimSuffix(name, filepath.Ext(name)), - Action: action + ":" + uri, - } - - if platform == "android" || platform == "firetv" { - item.Action = "system:tvx:launch" - item.Data = gin.H{ - "id": hash + "-" + fmt.Sprint(f.Id), - "uri": uri, - "type": mime, - } - } else if platform == "tizen" { - contentAction = "content:request:interaction:init@" + host + "/msx/tizen.html" - } else if platform == "netcast" { - contentAction = "system:netcast:menu" - } else if platform == "ios" || platform == "mac" { - // TODO - for iOS and Mac the application must be defined in scheme but we don't know what user has installed - item.Action = "system:tvx:launch:vlc://" + uri - } else { - item.Action = "video:plugin:" + host + "/msx/html5x.html?url= " + url.QueryEscape(uri) - contentAction = "panel:request:player:options" - } - - if isViewed(viewed, f.Id) { - item.Tag = " " - } - if action == "audio" { - item.Icon = "msx-white-soft:music-note" - } - list = append(list, item) - } - - if len(list) == 0 { - c.JSON(200, msxData{ - Action: "error:No supported content found", - }) - return - } - - res := msxData{ - Headline: tor.Title, - Type: "list", - Template: msxTemplate{ - Type: "control", - Layout: "0,2,12,1", - Color: "msx-glass", - Icon: "msx-white-soft:movie", - IconSize: "medium", - BadgeColor: "msx-yellow", - TagColor: "msx-yellow", - }, - Items: list, - } - - if contentAction != "" { - res.Template.Properties = gin.H{ - "button:content:icon": ICON_OPTIONS, - "button:content:action": contentAction, - } - } - - c.JSON(200, res) -} - -func isViewed(viewed []*sets.Viewed, id int) bool { - for _, v := range viewed { - if v.FileIndex == id { - return true - } - } - return false + r.GET("/msx/russian.json", ass(rus, "application/json")) + r.GET("/msx/tvx.js", ass(tvx, "text/javascript")) + r.GET("/msx/torrents", ass(trn, "text/html")) + r.GET("/msx/tizen", ass(tzn, "text/html")) + r.GET("/msx/html5x", ass(h5x, "text/html")) } From 79c3768eb24560e3207d1b78a70418c1f9abd3ad Mon Sep 17 00:00:00 2001 From: damiva <96115589+damiva@users.noreply.github.com> Date: Sat, 4 Feb 2023 13:31:06 +0300 Subject: [PATCH 02/18] Delete route.go --- server/web/msx/route.go | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 server/web/msx/route.go diff --git a/server/web/msx/route.go b/server/web/msx/route.go deleted file mode 100644 index 97259e0..0000000 --- a/server/web/msx/route.go +++ /dev/null @@ -1,22 +0,0 @@ -package msx - -import "github.com/gin-gonic/gin" - -func SetupRoute(route *gin.RouterGroup) { - route.GET("/msx/start.json", msxStart) - route.GET("/msx/torrents", msxTorrents) - route.GET("/msx/playlist", msxPlaylist) - route.GET("/msx/playlist/*fname", msxPlaylist) - - route.GET("/msx/html5x.html", func(c *gin.Context) { - c.Data(200, "text/html; charset=utf-8", Msxhtml5xhtml) - }) - - route.GET("/msx/tizen.html", func(c *gin.Context) { - c.Data(200, "text/html; charset=utf-8", Msxtizenhtml) - }) - - route.GET("/msx/tvx-plugin.min.js", func(c *gin.Context) { - c.Data(200, "text/javascript; charset=utf-8", Msxtvxpluginminjs) - }) -} From 9bdaed6894f55bdb43e4964776f7abbfbcc0203e Mon Sep 17 00:00:00 2001 From: damiva <96115589+damiva@users.noreply.github.com> Date: Sat, 4 Feb 2023 13:31:15 +0300 Subject: [PATCH 03/18] Delete html.go --- server/web/msx/html.go | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 server/web/msx/html.go diff --git a/server/web/msx/html.go b/server/web/msx/html.go deleted file mode 100644 index 8d241a7..0000000 --- a/server/web/msx/html.go +++ /dev/null @@ -1,12 +0,0 @@ -package msx - -import _ "embed" - -//go:embed pages/html5x.html -var Msxhtml5xhtml []byte - -//go:embed pages/tizen.html -var Msxtizenhtml []byte - -//go:embed pages/tvx-plugin.min.js -var Msxtvxpluginminjs []byte From 5f9a1e75df7f130c3bff53f425ca189d37e9c8f1 Mon Sep 17 00:00:00 2001 From: damiva <96115589+damiva@users.noreply.github.com> Date: Sat, 4 Feb 2023 13:31:34 +0300 Subject: [PATCH 04/18] Delete server/web/msx/pages directory --- server/web/msx/pages/html5x.html | 763 ------------------------- server/web/msx/pages/tizen.html | 380 ------------ server/web/msx/pages/tvx-plugin.min.js | 88 --- 3 files changed, 1231 deletions(-) delete mode 100644 server/web/msx/pages/html5x.html delete mode 100644 server/web/msx/pages/tizen.html delete mode 100644 server/web/msx/pages/tvx-plugin.min.js diff --git a/server/web/msx/pages/html5x.html b/server/web/msx/pages/html5x.html deleted file mode 100644 index 4478be4..0000000 --- a/server/web/msx/pages/html5x.html +++ /dev/null @@ -1,763 +0,0 @@ - - - - HTML5 Extended Video Plugin - - - - - - - - - - - - \ No newline at end of file diff --git a/server/web/msx/pages/tizen.html b/server/web/msx/pages/tizen.html deleted file mode 100644 index c686a19..0000000 --- a/server/web/msx/pages/tizen.html +++ /dev/null @@ -1,380 +0,0 @@ - - - - Tizen Interaction Plugin - - - - - - - - - - \ No newline at end of file diff --git a/server/web/msx/pages/tvx-plugin.min.js b/server/web/msx/pages/tvx-plugin.min.js deleted file mode 100644 index a500a03..0000000 --- a/server/web/msx/pages/tvx-plugin.min.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - * TVX Plugin v0.0.54 - * (c) 2021 Benjamin Zachey - */ -(function(e,m){var k={NAME:"TVX Framework",SHORTCUT:"TVX",VERSION:"0.1.26",SUFFIX:null,DUMMY_DATE:null,TIME_OFFSET:0,TIME_ZONE_OFFSET:0,ANIMATION_DURATION:300,ANIMATION_EASE:"easeOutQuad",AFK_DELAY:8000,SCREEN_WIDTH:1280,SCREEN_HEIGHT:720,SCREEN_FACTOR:1,ZOOM_FACTOR:1,PLATFORM:null,ANIMATE:0,TRANSFORM:0,INPUT:0,REMOTE:0,LAYOUT:null,SCALE:null,ZOOM:null,CENTER:0,BACKGROUND:0,LEAVE:0,EXIT:0,BACK:0,VOLUME:0,BUSY:0,SPEED:0,PLAYBACK:0,FULLSCREEN:0,SUSPEND:0,SECURE:0,APP:null};var l={COMMON:{IMAGE:{DEFAULT:"img/default.png"},ICON:{DEFAULT:"blank"},TEXT:{DEFAULT:""},COLOR:{WHITE:"rgb(255,255,255)",WHITE_SOFT:"rgba(255,255,255,0.5)",BLACK:"rgb(0,0,0)",BLACK_SOFT:"rgba(0,0,0,0.5)",GRAY:"rgb(51,51,51)",GRAY_SOFT:"rgba(51,51,51,0.5)",RED:"rgb(201,48,44)",GREEN:"rgb(68,157,68)",YELLOW:"rgb(236,151,31)",BLUE:"rgb(49,176,213)",GLASS:"rgba(255,255,255,0.1)"},CSS:{CLASS_SELECTED:"selected",CLASS_TRIGGER:"trigger",CLASS_FOCUSED:"focused",CLASS_DISABLED:"disabled",CLASS_INVALIDATED:"invalidated",CLASS_HOVER:"hover",CLASS_ROOT:"tvx-root",CLASS_TOP_LAYER:"tvx-top-layer",CLASS_BOTTOM_LAYER:"tvx-bottom-layer",CLASS_FULLSCREEN:"tvx-fullscreen",CLASS_VIDEO:"tvx-video",CLASS_VIDEO_ON:"tvx-video-on",CLASS_CENTER_OFF:"tvx-center-off",CLASS_BACKGROUND_OFF:"tvx-background-off",CLASS_CLICK_THROUGH:"tvx-click-through",CLASS_CURSOR_OFF:"tvx-cursor-off",CLASS_FILLER:"tvx-filler",CLASS_FILLER_WIDTH_TOP:"tvx-filler-width-top",CLASS_FILLER_WIDTH_BOTTOM:"tvx-filler-width-bottom",CLASS_FILLER_WIDTH_CENTER:"tvx-filler-width-center",CLASS_FILLER_HEIGHT_LEFT:"tvx-filler-height-left",CLASS_FILLER_HEIGHT_RIGHT:"tvx-filler-height-right",CLASS_FILLER_HEIGHT_CENTER:"tvx-filler-height-center",CLASS_FILLER_FIT:"tvx-filler-fit",CLASS_FILLER_COVER:"tvx-filler-cover",CLASS_FILLER_SMART:"tvx-filler-smart",CLASS_ICON:"tvx-icon tvx-icon-{ICON}",CLASS_ICON_INLINE:"tvx-icon-inline tvx-icon-{ICON}",CLASS_TEXT:"tvx-text",CLASS_TEXT_INLINE:"tvx-text-inline"},HTML:{BREAK:"
",SPACE:" ",TAB:"   ",CANVAS:"",IFRAME:"",ICON:"",ICON_STYLED:"",TEXT:"{TEXT}",TEXT_STYLED:"{TEXT}",TEXT_START:"",TEXT_START_STYLED:"",TEXT_END:""}},LOGGER:{CSS:{CLASS_DEBUG:"tvx-debug",CLASS_INFO:"tvx-info",CLASS_WARN:"tvx-warn",CLASS_ERROR:"tvx-error"},HTML:{LINE:"{MESSAGE}"}},RENDERER:{CSS:{CLASS_TRANSFORM:"tvx-transform",CLASS_TRANSFORM_ZERO:"tvx-transform-zero",CLASS_TRANSFORM_3D:"tvx-transform-3d",CLASS_TRANSFORM_3D_ZERO:"tvx-transform-3d-zero"},STATE:{SHOW:{visible:true},HIDE:{visible:false},FADE_IN_FROM:{opacity:0},FADE_IN_TO:{opacity:1,visible:true},FADE_OUT_FROM:{opacity:1},FADE_OUT_TO:{opacity:0,visible:false}}},REMOTE:{CSS:{CLASS_BUTTON:"tvx-button",CLASS_SUBCONTROL_LEFT:"tvx-subcontrol-left",CLASS_SUBCONTROL_RIGHT:"tvx-subcontrol-right"}},APP:null}; -var a=new function(){var Q=/\\/g;var ad=/"/g;var S=/'/g;var ax=/\n/g;var av=/\r/g;var O=/\r\n/g;var at=/\t/g;var X=/\s/g;var aa=/-/g;var ab=/^[A-Za-z0-9._-]+$/;var al=/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/;var ar=/"(\\.|[^"\\])*"/g;var au=/^\s+|\s+$/g;var ae=/\s{0,}>\s{0,}/g;var ag=/\s{0,}\/>/g;var af=/\s{0,}<\s{0,}/g;var ai=ax;var ah=av;var ak=/\s{2,}/g;var K=/&/g;var W=ad;var P=S;var ac=//g;var ao=/"/g;var an=/'/g;var am=/</g;var aq=/>/g;var ap=/&/g;var L=/\+/g;var N=/\//g;var M=/=/g;var R=/[^A-Za-z0-9\+\/\=]/g;var T=aa;var aj=/_/g;var ay=/,/g;var Y=/\./g;var V="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var Z=e.location.protocol==="https:";var aw=function(az,aB){if(az&&aB){var aA=e.location.pathname;aA=aA.substring(0,aA.lastIndexOf("/"));return e.location.protocol+"//"+e.location.host+aA}else{if(az){return e.location.protocol+"//"+e.location.host}}return e.location.protocol+"//"};this.createVersion=function(aB){if(this.isFullStr(aB)){var aD=aB.split("."); -if(aD.length==3){var aA=this.strToNum(aD[0],-1);var az=this.strToNum(aD[1],-1);var aC=this.strToNum(aD[2],-1);if(aA>=0&&az>=0&&aC>=0){return{major:aA,minor:az,patch:aC}}}}return null};this.checkVersion=function(aC,aB){var aA=this.createVersion(aB);if(aA!=null){var az=this.createVersion(aC);if(az!=null){if(az.major==aA.major){if(az.minor==aA.minor){return az.patch>=aA.patch}return az.minor>aA.minor}return az.major>aA.major}return false}return true};this.createKey=function(aD,aB){if(aD==null){aD=4}if(aB==null){aB=10}var aA="";for(var aC=0;aC=0&&az<=9){aA+=""+az}if(az>=10&&az<=35){aA+=String.fromCharCode(az+55)}if(az>=36&&az<=61){aA+=String.fromCharCode(az+61)}}return aA};this.isFullStr=function(az){return az!=null&&typeof az=="string"&&az.length>0 -};this.isBool=function(az){if(az!=null&&typeof az=="boolean"){return true}return this.isFullStr(az)};this.isNum=function(az){if(az!=null&&typeof az=="number"){return true}return this.isFullStr(az)&&isFinite(az)};this.isArray=function(az){if(az!=null){return Array.isArray(az)}return false};this.isEmpty=function(aA){if(aA!=null){if(typeof aA=="string"){return aA.length==0}var az;for(az in aA){return false}}return true};this.isValid=function(aA,az){if(aA!=null){if(az===true){if(typeof aA=="string"){return aA.length>0}}return true}return false};this.isId=function(az){return this.isFullStr(az)&&ab.test(az)};this.isJson=function(az){return this.isFullStr(az)&&!al.test(az.replace(ar,""))};this.isHttpUrl=function(az){return this.isFullStr(az)&&(az.indexOf("http://")==0||az.indexOf("https://")==0)};this.strValue=function(az){if(az!=null){if(typeof az=="string"){return az}else{return""+az}}return null};this.strFullCheck=function(aA,az){return this.isFullStr(aA)?aA:az};this.strTrim=function(az){return this.isFullStr(az)?az.replace(au,""):"" -};this.strClear=function(az){return this.isFullStr(az)?az.replace(X,""):""};this.strTruncate=function(az,aA){return this.isFullStr(az)&&aA>0&&az.length>aA?az.substr(0,aA)+"...":az};this.strShuffle=function(az){return this.isFullStr(az)?az.split("").sort(function(){return 0.5-Math.random()}).join(""):""};this.strReplace=function(aA,aB,az){if(this.isFullStr(aA)&&this.isFullStr(aB)){return aA.replace(aB,function(){return az!=null?az:""})}return aA};this.strReplaceMap=function(aA,aB){if(this.isFullStr(aA)&&aB!=null){for(var az in aB){aA=this.strReplace(aA,az,aB[az])}}return aA};this.strToBool=function(aA,az){if(aA!=null&&typeof aA=="boolean"){return aA}return this.isFullStr(aA)?aA=="true":az};this.strToNum=function(aA,az){if(aA!=null&&typeof aA=="number"){return aA}return this.isFullStr(aA)&&isFinite(aA)?aA*1:az};this.strToAction=function(az){return this.isFullStr(az)?az.toUpperCase().replace(aa,"_"):""};this.strToJsonStr=function(az){return this.isFullStr(az)?az.replace(ad,'\\"'):""};this.strToUrlStr=function(az){return this.isFullStr(az)?encodeURIComponent(az):"" -};this.strContainsToken=function(aB,aC,az,aD){if(this.isFullStr(aB)&&this.isFullStr(aC)){var aA=aB.indexOf(aC);if(az==null){az=0}if(aD==null){aD=aB.length}return aA>=az&&aA=0){aB=aA}while(aB>=0&&aB=0){aB+=aD.length;if(aE==null||aB").replace(ag,"/>").replace(af,"<").replace(ai," ").replace(ah," ").replace(ak," ")):""};this.htmlEscape=function(az){return this.isFullStr(az)?az.replace(K,"&").replace(W,""").replace(P,"'").replace(ac,"<").replace(U,">"):""};this.htmlUnescape=function(az){return this.isFullStr(az)?az.replace(ao,'"').replace(an,"'").replace(am,"<").replace(aq,">").replace(ap,"&"):""};this.htmlAttrEscape=function(az){return this.isFullStr(az)?az.replace(W,""").replace(P,"'"):"" -};this.htmlAttrUnescape=function(az){return this.isFullStr(az)?az.replace(ao,'"').replace(an,"'"):""};this.htmlTextEscape=function(az){return this.isFullStr(az)?this.htmlEscape(az).replace(ax,l.COMMON.HTML.BREAK).replace(at,l.COMMON.HTML.TAB):""};this.base64Encode=function(aH){var aC="";if(this.isFullStr(aH)){var aI,aD,aF;var aB,aG,aA,aE;var az=0;aH=this.utf8Encode(aH);while(az>2;aG=((aI&3)<<4)|(aD>>4);aA=((aD&15)<<2)|(aF>>6);aE=aF&63;if(isNaN(aD)){aA=aE=64}else{if(isNaN(aF)){aE=64}}aC+=V.charAt(aB)+V.charAt(aG)+V.charAt(aA)+V.charAt(aE)}}return aC};this.base64EncodeUrl=function(az){return this.isFullStr(az)?this.base64Encode(az).replace(L,"-").replace(N,"_").replace(M,","):""};this.base64EncodeId=function(az){return this.isFullStr(az)?this.base64Encode(az).replace(L,"-").replace(N,"_").replace(M,"."):""};this.base64Decode=function(aH){var aC="";if(this.isFullStr(aH)){var aI,aD,aF;var aB,aG,aA,aE;var az=0; -aH=aH.replace(R,"");while(az>4);aD=((aG&15)<<4)|(aA>>2);aF=((aA&3)<<6)|aE;aC+=String.fromCharCode(aI);if(aA!=64){aC+=String.fromCharCode(aD)}if(aE!=64){aC+=String.fromCharCode(aF)}}}return this.utf8Decode(aC)};this.base64DecodeUrl=function(az){return this.isFullStr(az)?this.base64Decode(az.replace(T,"+").replace(aj,"/").replace(ay,"=")):""};this.base64DecodeId=function(az){return this.isFullStr(az)?this.base64Decode(az.replace(T,"+").replace(aj,"/").replace(Y,"=")):""};this.utf8Encode=function(aC){var aA="";if(this.isFullStr(aC)){aC=aC.replace(O,"\n");for(var az=0;az127)&&(aB<2048)){aA+=String.fromCharCode((aB>>6)|192);aA+=String.fromCharCode((aB&63)|128)}else{aA+=String.fromCharCode((aB>>12)|224);aA+=String.fromCharCode(((aB>>6)&63)|128);aA+=String.fromCharCode((aB&63)|128) -}}}}return aA};this.utf8Decode=function(aD){var aA="";if(this.isFullStr(aD)){var aE=0;var aB,aC,aF,az;aB=aC=aF=az=0;while(aE191)&&(aB<224)){aF=aD.charCodeAt(aE+1);aA+=String.fromCharCode(((aB&31)<<6)|(aF&63));aE+=2}else{aF=aD.charCodeAt(aE+1);az=aD.charCodeAt(aE+2);aA+=String.fromCharCode(((aB&15)<<12)|((aF&63)<<6)|(az&63));aE+=3}}}}return aA};this.createHash=function(aB,aA){var az=0;if(this.isFullStr(aB)){if(aA===true){for(var aC=aB.length;aC>=0;aC--){az=((az<<5)-az)+aB.charCodeAt(aC);az&=az}}else{for(var aC=0;aC0){aE+=","}aE+=aA;aC++}}aE+="]"}else{if(aB=="object"){aE="{"; -var aC=0;for(var aF in az){var aA=this.serialize(az[aF],aF);if(aA!=null){if(aC>0){aE+=","}aE+=aA;aC++}}aE+="}"}else{if(aB=="string"){aE='"'+az.replace(Q,"\\\\").replace(ad,'\\"').replace(ax,"\\n")+'"'}else{if(aB=="number"||aB=="boolean"){aE=""+az}}}}if(aE!=null){if(aD!=null){return'"'+aD+'":'+aE}else{return aE}}return null};this.deserialize=function(az){try{if(e.JSON!=null&&typeof JSON.parse=="function"){return this.isFullStr(az)?JSON.parse(az):null}else{return this.isJson(az)?new Function("return "+az)():null}}catch(aA){return null}};this.isSecureContext=function(){return Z};this.secureUrl=function(az){return this.isFullStr(az)?az.replace("http://","https://"):az};this.getPrefixUrl=function(az){return aw(false,false)+this.strFullCheck(az,"")};this.getHostUrl=function(az){return aw(true,false)+"/"+this.strFullCheck(az,"")};this.getPathUrl=function(az){return aw(true,true)+"/"+this.strFullCheck(az,"")};this.getAbsoluteUrl=function(az){if(this.isFullStr(az)&&!this.isHttpUrl(az)){if(az.indexOf("/")==0){return aw(true,false)+az -}else{return aw(true,true)+"/"+az}}return az};this.getRootPath=function(az,aD){if(this.isFullStr(az)){var aC=e.location.pathname;var aB=aC.indexOf(az);if(aB>0){var aA=aC.substr(0,aB);if(aD===true){if(aA.indexOf("/")==0){aA=aA.substr(1)}if(aA.lastIndexOf("/")==aA.length-1){aA=aA.substr(0,aA.length-1)}}else{if(aA.indexOf("/")!=0){aA="/"+aA}if(aA.lastIndexOf("/")!=aA.length-1){aA+="/"}}return aA}}return aD===true?"":"/"};this.exprEscape=function(aG,aF,aL,aM,aH,aK,aC){if(this.isFullStr(aG)&&typeof aM=="function"){if(this.isFullStr(aF)&&this.isFullStr(aL)&&typeof aH=="function"){if(aG.indexOf(aF)>=0&&aG.indexOf(aL)>=0){var az="";var aA=aF.length;var aE=aL.length;var aI=aG.length;var aJ=0;var aD=0;var aB=0;while(aD>=0){aD=aG.indexOf(aF,aJ);if(aD>=0){aB=aG.indexOf(aL,aD);if(aB>0){if(aJ=0&&ao<0){return ax.replace("DD",T[aj])}else{if(ah>=0&&ao<0){return ax.replace("D",ac[aj]) -}else{if(ag>=0&&ah<0){return ax.replace("MM",W[ak])}else{if(ao>=0&&ah<0){return ax.replace("M",ab[ak])}else{if(ah>=0&&ao>=0){var al=null;var av=null;var an=null;if(ap>=0){al=ax.substring(0,ap);av=T[aj];an=ax.substring(ap+2,ax.length)}else{if(ah>=0){al=ax.substring(0,ah);av=ac[aj];an=ax.substring(ah+1,ax.length)}}if(ah>ao){if(al.indexOf("MM")>=0){al=al.replace("MM",W[ak])}else{if(al.indexOf("M")>=0){al=al.replace("M",ab[ak])}}}else{if(an.indexOf("MM")>=0){an=an.replace("MM",W[ak])}else{if(an.indexOf("M")>=0){an=an.replace("M",ab[ak])}}}return al+av+an}}}}}return ax};this.getDayStr=function(ah,ag,af,ai){return this.getFormattedDateStr(ah,V,ag,af,ai)};this.getDayLongStr=function(ah,ag,af,ai){return this.getFormattedDateStr(ah,L,ag,af,ai)};this.getDayFullStr=function(ah,ag,af,ai){return this.getFormattedDateStr(ah,R,ag,af,ai)};this.getDateStr=function(ah,ag,af,ai){return this.getFormattedDateStr(ah,K,ag,af,ai)};this.getDateLongStr=function(ah,ag,af,ai){return this.getFormattedDateStr(ah,N,ag,af,ai) -};this.getFormattedTimeStr=function(ah,an,ao,ai,aj){var am=0;var ak=0;var af=0;if(ah==null){am=ao!=null?ao*1:0;ak=ai!=null?ai*1:0;af=aj!=null?aj*1:0}else{if(typeof ah=="number"){ah=new Date(ah)}am=ah.getHours();ak=ah.getMinutes();af=ah.getSeconds()}var al=null;var ag=an.indexOf("/ampm");if(ag>0){an=an.substr(0,ag);al=X;if(am>12){al=ad;am-=12}}return an.replace("hh",(am<10?"0":"")+am).replace("mm",(ak<10?"0":"")+ak).replace("ss",(af<10?"0":"")+af).replace("h",am).replace("m",ak).replace("s",af)+(al!=null?al:"")};this.getTimeStr=function(ah,ai,af,ag){return this.getFormattedTimeStr(ah,P,ai,af,ag)};this.getTimeLongStr=function(ah,ai,af,ag){return this.getFormattedTimeStr(ah,U,ai,af,ag)};this.getRecordingStr=function(af){if(typeof af=="number"){af=new Date(af)}return this.getDayLongStr(af)+M+this.getTimeStr(af)};this.getFormattedDurationStr=function(ag,aj){var af=Math.floor(ag/3600000);var ai=Math.floor((ag%3600000)/60000);var ah=Math.floor((ag%60000)/1000);aj=a.exprEscape(aj,"[","]",function(ak){return ak -},function(ak){if(ak.indexOf("h")==0||ak.indexOf("H")==0){return af>0?ak:""}else{if(ak.indexOf("m")==0||ak.indexOf("M")==0){return af>0||ai>0?ak:""}else{if(ak.indexOf("s")==0||ak.indexOf("S")==0){return af>0||ai>0||ah>0?ak:""}}}});return aj.replace("H","h").replace("M",(af>0?"mm":"m")).replace("S",(af>0||ai>0?"ss":"s")).replace("hh",(af<10?"0":"")+af).replace("mm",((ai<10)?"0":"")+ai).replace("ss",((ah<10)?"0":"")+ah).replace("h",af).replace("m",ai).replace("s",ah)};this.getDurationStr=function(ak,aw){if(aw==null){aw="dhms"}var av=aw.indexOf("D")!=-1;var an=aw.indexOf("H")!=-1;var ar=aw.indexOf("M")!=-1;var au=aw.indexOf("S")!=-1;aw=aw.toLowerCase();var aq=aw.indexOf("d")!=-1;var ai=aw.indexOf("h")!=-1;var af=aw.indexOf("m")!=-1;var ah=aw.indexOf("s")!=-1;if(aw.indexOf("~")==0){if(ak<60000){if(ah){aw="s"}}else{if(ak<3600000){if(af){aw="m"}else{if(ah){aw="s"}}}else{if(ak<86400000){if(ai){aw="h"}else{if(af){aw="m"}else{if(ah){aw="s"}}}}else{if(aq){aw="d"}else{if(ai){aw="h"}else{if(af){aw="m" -}else{if(ah){aw="s"}}}}}}}}if(aw=="d"){var ao=Math.round(ak/86400000);return ao==1?ao+Z:ao+Y}if(aw=="h"){return Math.round(ak/3600000)+S}if(aw=="m"){return Math.round(ak/60000)+Q}if(aw=="s"){return Math.round(ak/1000)+O}var aj=ak;var at=ai||af||ah;var ao=aq?(at?Math.floor(aj/86400000):Math.ceil(aj/86400000)):0;if(aq){aj=ak%86400000}at=af||ah;var ap=ai?(at?Math.floor(aj/3600000):Math.ceil(aj/3600000)):0;if(ai){aj=ak%3600000}at=ah;var al=af?(at?Math.floor(aj/60000):Math.ceil(aj/60000)):0;if(af){aj=ak%60000}var ag=ah?Math.floor(aj/1000):0;var am="";if(aq&&(ao>0||av)){am+=ao+(ao==1?Z:Y)}if(ai&&(ap>0||an)){if(am.length>0){am+=" "}am+=ap+S}if(af&&(al>0||ar)){if(am.length>0){am+=" "}am+=al+Q}if(ah&&(ag>0||au)){if(am.length>0){am+=" "}am+=ag+O}if(ah&&am.length==0){return ag+O}if(af&&am.length==0){return al+Q}if(ai&&am.length==0){return ap+S}return am};this.getVideoStr=function(ah,ai){if(ai==null){ai=3}var ag=ai>2?Math.floor(ah/3600000):0;var aj=ai>1?Math.floor((ah%3600000)/60000):0;var af=ai>0?Math.floor(ah%60000/1000):0; -if(ai>2){return(ag<10?"0":"")+ag+":"+(aj<10?"0":"")+aj+":"+(af<10?"0":"")+af}else{if(ai>1){return(aj<10?"0":"")+aj+":"+(af<10?"0":"")+af}else{if(ai>0){return(af<10?"0":"")+af}}}return""}};var H=new function(){this.toTimeStr=function(K){return g.getTimeStr(K)};this.toTimeLongStr=function(K){return g.getTimeLongStr(K)};this.toTimeDayStr=function(K){return g.getFormattedDateStr(K,"D")+g.getFormatSeparator()+g.getTimeStr(K)};this.toTimeDayLongStr=function(K){return g.getFormattedDateStr(K,"D")+g.getFormatSeparator()+g.getTimeLongStr(K)};this.toDayStr=function(K){return g.getDayStr(K)};this.toDayLongStr=function(K){return g.getDayLongStr(K)};this.toDayFullStr=function(K){return g.getDayFullStr(K)};this.toDateStr=function(K){return g.getDateStr(K)};this.toDateLongStr=function(K){return g.getDateLongStr(K)};this.toRecordingStr=function(K){return g.getRecordingStr(K)};this.toDayTimeStr=function(K){return g.getDayStr(K)+g.getFormatSeparator()+g.getTimeStr(K)};this.toDayTimeLongStr=function(K){return g.getDayLongStr(K)+g.getFormatSeparator()+g.getTimeStr(K) -};this.toDayTimeFullStr=function(K){return g.getDayFullStr(K)+g.getFormatSeparator()+g.getTimeStr(K)};this.toDateTimeStr=function(K){return g.getDateStr(K)+g.getFormatSeparator()+g.getTimeStr(K)};this.toDateTimeLongStr=function(K){return g.getDateLongStr(K)+g.getFormatSeparator()+g.getTimeStr(K)}};var F=new function(){this.foreach=function(P,L){if(P!=null&&P.properties!=null&&typeof L=="function"){var N=P.properties;if(Array.isArray(N)){for(var O=0;O0){if(L==decodeURIComponent(a.strTrim(M.substr(0,O)))){return decodeURIComponent(M.substr(O+1))}}}}return Q!=null?Q:null};this.getFullStr=function(L,M){return a.strFullCheck(this.get(L),M)};this.getNum=function(L,M){return a.strToNum(this.get(L),M)};this.getBool=function(L,M){return a.strToBool(this.get(L),M)};this.has=function(L,M){return a.isValid(this.get(L),M)};this.foreach=function(R){if(typeof R=="function"){var N=m.cookie.split(";");for(var P=0;P0){var Q=decodeURIComponent(a.strTrim(M.substr(0,L))); -var O=decodeURIComponent(M.substr(L+1));if(R(Q,O)===true){break}}}}};this.remove=function(L){if(a.isFullStr(L)){this.set(L,"",K)}};this.clear=function(){var L=this;this.foreach(function(M){L.set(M,"",K)})}}function d(){var M="exp:";var L=new J();var K=function(O,P){if(P!=null){P*=1;return P>=0&&P=0){localStorage.setItem(M+O,P)}else{localStorage.removeItem(M+O)}}else{L.set(O,R,Q) -}}};this.get=function(O,R){if(a.isFullStr(O)){if(e.localStorage!=null){var Q=false;var P=localStorage.getItem(M+O);if(P!=null){if(K(g.getTimestamp(),P)){Q=true;localStorage.removeItem(O);localStorage.removeItem(M+O)}}if(!Q){var S=localStorage.getItem(O);if(S!=null){return S}}}else{return L.get(O,R)}}return R!=null?R:null};this.getFullStr=function(O,P){return a.strFullCheck(this.get(O),P)};this.getNum=function(O,P){return a.strToNum(this.get(O),P)};this.getBool=function(O,P){return a.strToBool(this.get(O),P)};this.has=function(O,P){return a.isValid(this.get(O),P)};this.foreach=function(Q){if(typeof Q=="function"){if(e.localStorage!=null){N();for(var P=0;P=0){var O=Q.substr(T+1).split("&");for(var M=0;M0){var S=R.substr(0,N);var U=R.substr(N+1);P[decodeURIComponent(S)]=decodeURIComponent(U)}else{P[decodeURIComponent(R)]=""}}}}}return P}; -this.build=function(P,O){var Q=0;var M="";if(K!=null){for(var N in K){var R=a.strValue(K[N]);if(Q>0){M+=(O!=null?O:"&")}if(a.isFullStr(R)){M+=(P===false?N:encodeURIComponent(N))+"="+(P===false?R:encodeURIComponent(R))}else{M+=(P===false?N:encodeURIComponent(N))}Q++}}return M};if(L!=null){K=this.create(L)}else{K=this.create(m.URL)}}function C(K,L){this.getValue=function(M){if(a.isFullStr(M)){if(K!=null&&K[M]!=null){return K[M]}if(L!=null&&L[M]!=null){return L[M]}}return null};this.get=function(M){return a.strValue(this.getValue(M))};this.getFullStr=function(M){return a.strFullCheck(this.get(M),null)};this.getNum=function(M){return a.strToNum(this.getValue(M),0)};this.getBool=function(M){return a.strToBool(this.getValue(M),false)};this.has=function(M,N){return a.isValid(this.get(M),N)}}function h(){var K={};this.hasObserver=function(L){return a.isFullStr(L)&&K[L]!=null};this.hasObservers=function(){var L;for(L in K){return true}return false};this.addObserver=function(L,M){if(a.isFullStr(L)&&typeof M=="function"){K[L]=M -}};this.removeObserver=function(L){if(a.isFullStr(L)){delete K[L]}};this.onEvent=function(L,M){if(a.isFullStr(L)){if(typeof M=="function"){this.addObserver(L,M)}else{this.removeObserver(L)}}};this.notifyObserver=function(L,M){if(a.isFullStr(L)&&K[L]!=null){K[L](M)}};this.notifyObservers=function(M){for(var L in K){K[L](M)}};this.clear=function(){K={}}}function I(){var K={};this.hasObserver=function(M,L){return a.isFullStr(M)&&a.isFullStr(L)&&K[M]!=null&&K[M][L]!=null};this.hasObservers=function(M){if(a.isFullStr(M)&&K[M]!=null){var L;for(L in K[M]){return true}}return false};this.addObserver=function(M,L,N){if(a.isFullStr(M)&&a.isFullStr(L)&&typeof N=="function"){if(K[M]==null){K[M]={}}K[M][L]=N}};this.removeObserver=function(M,L){if(a.isFullStr(M)&&a.isFullStr(L)&&K[M]!=null){delete K[M][L];if(!this.hasObservers(M)){delete K[M]}}};this.onEvent=function(M,L,N){if(a.isFullStr(M)&&a.isFullStr(L)){if(typeof N=="function"){this.addObserver(M,L,N)}else{this.removeObserver(M,L)}}};this.notifyObserver=function(M,L,N){if(a.isFullStr(M)&&a.isFullStr(L)&&K[M]!=null&&K[M][L]!=null){K[M][L](N) -}};this.notifyObservers=function(M,N){if(a.isFullStr(M)&&K[M]!=null){for(var L in K[M]){K[M][L](N)}}};this.clear=function(L){if(a.isFullStr(L)){if(K[L]!=null){K[L]={}}}else{K={}}}}function x(){var L=null;var M=[];var K=null;var N=false;this.delegate=null;this.execute=function(){if(L!=null){clearTimeout(L);L=null}if(K!=null){if(typeof K.action=="function"){K.action()}else{if(this.delegate!=null&&typeof this.delegate.executeQueueAction=="function"){this.delegate.executeQueueAction(K.action)}}K=null;this.process()}};this.process=function(){if(K==null&&M.length>0){K=M.shift();if(K.action==="stop"&&K.delay==null){N=true;K=null}else{if(K.delay!=null&&K.delay>0){var O=this;L=setTimeout(function(){L=null;O.execute()},K.delay)}else{this.execute()}}}};this.reset=function(){M=[];K=null;N=false;if(L!=null){clearTimeout(L);L=null}};this.push=function(O,P){if(O!=null){if(O==="reset"&&P==null){this.reset()}else{if(O==="execute"&&P==null){this.execute()}else{if(O==="clear"&&P==null){M=[]}else{if(O==="continue"&&P==null){N=false -}else{M.push({action:O,delay:P})}}}}if(!N){this.process()}}};this.isBusy=function(){return L!=null}}function c(K,O){var M=null;var N=[];var L=0;this.size=K!=null?K:0;this.delay=O!=null?O:0;this.work=function(){if(M==null&&this.delay>0){var P=this;M=setTimeout(function(){M=null;L=0;P.process()},this.delay)}};this.process=function(){if(M==null&&N.length>0){if(L0){M=setTimeout(function(){P.finish()},this.delay)}else{P.finish()}};this.restart=function(){this.start(L)};this.stop=function(){if(M!=null){clearTimeout(M);M=null}};this.finish=function(){this.stop();if(!K){K=true; -if(typeof L=="function"){L()}}};this.isBusy=function(){return M!=null}}function E(){var M=300;var N=0;var K=0;var L=null;this.click=function(O){var P=g.getTimestamp();if(L===O&&N>0&&P-N<=M){K++}else{K=1}L=O;N=P;return K}}function j(){var K="application/json";var P="application/xml";var M="text/plain";var S="text/html";var R="application/x-www-form-urlencoded";var N=function(V){var U=null;try{U=new XMLHttpRequest()}catch(T){if(V!=null&&typeof V.error=="function"){V.error("Create XML HTTP request failed: "+T)}}return U};var Q=function(T){if(T!=null&&typeof T.destroy=="function"){T.destroy()}};var O=function(X,Y,V){var T=X.responseText;var W=true;if(T!=null){if(V==K){try{if(e.JSON!=null&&typeof JSON.parse=="function"){if(a.isFullStr(T)){T=JSON.parse(T)}else{W=false;if(Y!=null&&typeof Y.error=="function"){Y.error("Validate JSON failed")}}}else{if(a.isJson(T)){T=new Function("return "+T)()}else{W=false;if(Y!=null&&typeof Y.error=="function"){Y.error("Validate JSON failed")}}}}catch(U){W=false; -if(Y!=null&&typeof Y.error=="function"){Y.error("Create JSON failed: "+U)}}}else{if(V==P){T=X.responseXML}}}if(W&&Y!=null&&typeof Y.success=="function"){Y.success(T)}};var L=function(Z,W,Y,ag,T){if(e.TVXAjaxService!=null&&typeof TVXAjaxService.executeRequest=="function"&&TVXAjaxService.executeRequest(Z,W,Y,ag,T)===true){return}var ac=N(ag);if(ac!=null){var ad=K;var X=false;var ae=false;var U=true;var af=null;if(T!=null){X=T.isForm===true;ae=T.withCredentials===true;U=T.accurateHeaders!==false;af=T.headers;if(T.dataType!=null){if(T.dataType=="json"){ad=K}else{if(T.dataType=="xml"){ad=P}else{if(T.dataType=="text"){ad=M}else{if(T.dataType=="html"){ad=S}else{ad=null}}}}}}try{if(ae){ac.withCredentials=true}ac.open(Z,W,true)}catch(ab){Q(ac);ac=null;if(ag!=null&&typeof ag.error=="function"){ag.error("Open connection failed: "+ab)}}if(ac!=null){ac.onreadystatechange=function(){if(ac!=null){if(ac.readyState==4){if((ac.status>=200&&ac.status<300)||(ac.status==0&&a.isFullStr(ac.responseText))){O(ac,ag,ad) -}else{if(ag!=null&&typeof ag.error=="function"){var ah=a.strValue(ac.status);if(a.isFullStr(ac.statusText)){ah+=" "+ac.statusText}ag.error("Server responded with status: "+ah)}}Q(ac);ac=null}}};if(ad!=null){if(Y!=null){ac.setRequestHeader("Content-Type",!X&&U?ad:R)}if(U){ac.setRequestHeader("Accept",ad)}}if(af!=null){for(var aa in af){var V=af[aa];if(V!=null){ac.setRequestHeader(a.strValue(aa),a.strValue(V))}}}try{ac.send(Y)}catch(ab){Q(ac);ac=null;if(ag!=null&&typeof ag.error=="function"){ag.error("Send data failed: "+ab)}}}}};this.get=function(T,V,U){L("GET",T,null,V,U)};this.post=function(U,W,T,V){L("POST",U,W,T,V)};this.put=function(U,W,T,V){L("PUT",U,W,T,V)};this.del=function(T,V,U){L("DELETE",T,null,V,U)}}var s={OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4};function v(){var Q=[];var M=null;this.level=s.DEBUG;this.maxLines=30;this.maxDebugLength=116;this.maxInfoLength=-1;this.maxWarnLength=-1;this.maxErrorLength=-1;var O=function(){var R=new Date();var Y=R.getHours();var X=R.getMinutes();var V=R.getSeconds(); -var U=R.getMilliseconds();var T=R.getDate();var W=R.getMonth()+1;var S=R.getFullYear();return S+"-"+((W<10)?"0":"")+W+"-"+((T<10)?"0":"")+T+" "+((Y<10)?"0":"")+Y+":"+((X<10)?"0":"")+X+":"+((V<10)?"0":"")+V+"."+((U<10)?"00":((U<100)?"0":""))+U};var N=function(S,R){var T="";switch(S){case s.DEBUG:T=l.LOGGER.CSS.CLASS_DEBUG;break;case s.INFO:T=l.LOGGER.CSS.CLASS_INFO;break;case s.WARN:T=l.LOGGER.CSS.CLASS_WARN;break;case s.ERROR:T=l.LOGGER.CSS.CLASS_ERROR;break}return a.strReplace(l.LOGGER.HTML.LINE.replace("{LEVEL}",T),"{MESSAGE}",a.htmlEscape(R))};var L=function(S,R){var T="";switch(S){case s.DEBUG:T="DEBUG";break;case s.INFO:T="INFO";break;case s.WARN:T="WARNING";break;case s.ERROR:T="ERROR";break}return O()+" "+T+": "+R};var K=function(T,S,U,R){if(U>0&&S.length>U){S=S.substr(0,U)+"..."}Q.push(N(T,S));if(R>0){while(Q.length>R){Q.shift()}}};var P=function(S,R){if(e.console!=null){switch(S){case s.DEBUG:console.log(R);break;case s.INFO:console.info(R);break;case s.WARN:console.warn(R);break; -case s.ERROR:console.error(R);break}}};this.registerControl=function(R,S){M=R;if(S!==false){this.print()}};this.unregisterControl=function(R){if(M==R){M=null}};this.print=function(){if(M!=null&&Q.length>0){var S="";for(var R=0;R0){return this.getValueForKey(U.substr(0,T),U.substr(T+1))}else{return this.getValueForKey(U,"")}}return""};this.getData=function(){return{name:N,version:Q,size:P,properties:S}}}function i(){var M=null;var N={};var L=null;var K=null;this.delay=0;this.now=g.getNow();this.format="time";this.isRunning=function(){return M!=null};this.hasHook=function(O){return a.isFullStr(O)&&N[O]!=null};this.hasHooks=function(){var O;for(O in N){return true}return false};this.hasControl=function(){return L!=null -};this.clearHooks=function(){N={}};this.addHook=function(O,P){if(a.isFullStr(O)&&typeof P=="function"){N[O]=P}};this.removeHook=function(O){if(a.isFullStr(O)){delete N[O]}};this.onTick=function(O,P){if(a.isFullStr(O)){if(typeof P=="function"){this.addHook(O,P)}else{this.removeHook(O)}}};this.registerControl=function(O){L=O};this.unregisterControl=function(O){if(L==O){L=null}};this.update=function(){if(L!=null){var O=null;switch(this.format){case"full":O=H.toDayTimeFullStr(this.now);break;case"date":O=H.toDayTimeLongStr(this.now);break;case"day":O=H.toTimeDayStr(this.now);break;case"time":O=H.toTimeStr(this.now);break;default:O="";break}if(L.clockText!=O){L.clockText=O;L.html(O)}}};this.validate=function(){this.now=g.getNow()};this.process=function(){if(M!=null){this.validate();this.delay=K!=null?this.now.getTime()-K.getTime():0;K=this.now;this.update();for(var O in N){N[O](this)}}};this.start=function(){if(M==null){var O=this;K=null;M=setInterval(function(){O.process()},1000)}};this.stop=function(){if(M!=null){clearInterval(M); -M=null;K=null}}}var A={logger:new v(),cookies:new J(),storage:new d(),urlParams:new B(),ajax:new j()};var u=new function(){var K={};this.load=function(M,L,O,N){if(a.isFullStr(M)){if(L!=null&&K[L]!=null&&K[L].url==M&&K[L].data!=null){if(O!=null&&typeof O.success=="function"){O.success(K[L].data,true)}}else{A.ajax.get(M,{success:function(P){if(L!=null){K[L]={url:M,data:P}}if(O!=null&&typeof O.success=="function"){O.success(P,false)}},error:function(P){if(L!=null){K[L]={url:M,data:null}}if(O!=null&&typeof O.error=="function"){O.error(P)}}},N)}}};this.clearCache=function(L){if(L!=null){K[L]=null}};this.clear=function(){K={}}};function D(){var W={};var P={};var T={};var Q={};var S=function(Y){if(Y!=null&&Y.response!=null){return a.strToNum(Y.response.status,0)}return 0};var X=function(Y){if(Y!=null&&Y.response!=null){return Y.response.data}return null};var N=function(Z){var Y="";if(Z!=null&&Z.response!=null){if(a.isNum(Z.response.status)){Y+=""+Z.response.status}if(a.isFullStr(Z.response.text)){if(Y.length>0){Y+=" " -}Y+=Z.response.text}if(a.isFullStr(Z.response.message)){if(Y.length>0){Y+=": "}Y+=Z.response.message}}return Y.length>0?Y:"Unknown error"};var V=function(Y,Z){T[Y]=Z;for(var aa in W){if(W[aa]!=null){Z(W[aa])}}};var K=function(Y){delete T[Y]};var M=function(Y){for(var Z in T){T[Z](Y)}};var O=function(Y,Z){if(Y!=null&&typeof Z=="function"){Q[Y]=Z;for(var aa in P){if(P[aa]!=null){Z(P[aa])}}}};var U=function(Y){if(Y!=null){delete Q[Y]}};var L=function(Y){for(var Z in Q){Q[Z](Y)}};var R=function(Y){return Y!=null&&Y.indexOf("temp:")!=0};this.onReady=function(Y,Z){if(a.isFullStr(Y)){if(typeof Z=="function"){V(Y,Z)}else{K(Y)}}};this.onError=function(Y,Z){if(a.isFullStr(Y)){if(typeof Z=="function"){O(Y,Z)}else{U(Y)}}};this.onCompleted=function(Y,Z){this.onReady(Y,Z);this.onError(Y,Z)};this.foreachEntry=function(Z){if(typeof Z=="function"){for(var Y in W){if(W[Y]!=null){if(Z(W[Y])===true){break}}}}};this.foreachError=function(Z){if(typeof Z=="function"){for(var Y in P){if(P[Y]!=null){if(Z(P[Y])===true){break -}}}}};this.getData=function(Y){return Y!=null&&W[Y]!=null?W[Y].data:null};this.getEntry=function(Y){return Y!=null?W[Y]:null};this.setEntry=function(Z,Y){if(Z!=null&&Y!=null){W[Z]=Y;P[Z]=null;M(Y)}};this.getError=function(Y){return Y!=null?P[Y]:null};this.setError=function(Y,Z){if(Y!=null&&Z!=null){W[Y]=null;P[Y]=Z;L(Z)}};this.shouldStoreData=function(Y){return R(Y)};this.createData=function(Y,Z){return Z};this.putData=function(Z,ab,Y,aa){if(Z!=null&&ab!=null){A.ajax.put(Z,ab,{success:function(ac){if(ac.response!=null&&ac.response.status==200){if(Y!=null&&typeof Y.success=="function"){Y.success(ac.response.data)}}else{if(Y!=null&&typeof Y.error=="function"){Y.error(N(ac),S(ac),X(ac))}}},error:function(ac){if(Y!=null&&typeof Y.error=="function"){Y.error(ac,0,null)}}},aa)}};this.postData=function(Z,ab,Y,aa){if(Z!=null&&ab!=null){A.ajax.post(Z,ab,{success:function(ac){if(ac.response!=null&&ac.response.status==200){if(Y!=null&&typeof Y.success=="function"){Y.success(ac.response.data)}}else{if(Y!=null&&typeof Y.error=="function"){Y.error(N(ac),S(ac),X(ac)) -}}},error:function(ac){if(Y!=null&&typeof Y.error=="function"){Y.error(ac,0,null)}}},aa)}};this.deleteData=function(Y,aa,Z){if(Y!=null){A.ajax.del(Y,{success:function(ab){if(ab.response!=null&&ab.response.status==200){if(aa!=null&&typeof aa.success=="function"){aa.success(ab.response.data)}}else{if(aa!=null&&typeof aa.error=="function"){aa.error(N(ab),S(ab),X(ab))}}},error:function(ab){if(aa!=null&&typeof aa.error=="function"){aa.error(ab,0,null)}}},Z)}};this.loadData=function(ab,Z,ac,aa){if(ab!=null){var Y=this;if(R(ab)){this.clearData(ab)}if(Z!=null){A.ajax.get(Z,{success:function(ag){var af=false;if(ag.response!=null&&ag.response.status==200&&ag.response.data!=null){af=true;ag=ag.response.data}if(!af&&ag.response!=null){var ad={id:ab,error:N(ag),status:S(ag),reason:X(ag)};var ae=true;if(ac!=null&&typeof ac.error=="function"){ae=ac.error(ad)}if(ae!==false&&R(ab)){Y.setError(ab,ad)}if(ac!=null&&typeof ac.completed=="function"){ac.completed(ad)}}else{var ad={id:ab,data:Y.createData(ab,ag)}; -var ae=true;if(ac!=null&&typeof ac.success=="function"){ae=ac.success(ad)}if(ae!==false&&R(ab)){Y.setEntry(ab,ad)}if(ac!=null&&typeof ac.completed=="function"){ac.completed(ad)}}},error:function(af){var ad={id:ab,error:af,status:0,reason:null};var ae=true;if(ac!=null&&typeof ac.error=="function"){ae=ac.error(ad)}if(ae!==false&&R(ab)){Y.setError(ab,ad)}if(ac!=null&&typeof ac.completed=="function"){ac.completed(ad)}}},aa)}}};this.clearData=function(Y){if(Y!=null){W[Y]=null;P[Y]=null}};this.clear=function(){W={};P={}}}function r(){var P={};var S={};var Z={};var L={};var K=function(ac){if(ac!=null){try{if(e.URL!=null&&typeof URL.createObjectURL=="function"){return URL.createObjectURL(ac)}else{if(e.webkitURL!=null&&typeof webkitURL.createObjectURL=="function"){return webkitURL.createObjectURL(ac)}}}catch(ab){A.logger.error("Create blob URL failed: "+ab)}}return null};var V=function(ab){if(ab!=null){try{if(e.URL!=null&&typeof URL.revokeObjectURL=="function"){URL.revokeObjectURL(ab)}else{if(e.webkitURL!=null&&typeof webkitURL.revokeObjectURL=="function"){webkitURL.revokeObjectURL(ab) -}}}catch(ac){A.logger.error("Dispose blob URL failed: "+ac)}}};var aa=function(ad){var ac=null;try{ac=new XMLHttpRequest()}catch(ab){if(ad!=null&&typeof ad.error=="function"){ad.error("Create XML HTTP request failed: "+ab)}}return ac};var R=function(ab){if(ab!=null&&typeof ab.destroy=="function"){ab.destroy()}};var U=function(ab,ac){if(ab.response!=null){if(ac!=null&&typeof ac.success=="function"){ac.success(ab.response)}}else{if(ac!=null&&typeof ac.error=="function"){ac.error("Load blob failed: Response is missing")}}};var M=function(af,ad,ae,al,ab){var ai=aa(al);if(ai!=null){var aj=false;var ak=null;if(ab!=null){aj=ab.withCredentials===true;ak=ab.headers}try{if(aj){ai.withCredentials=true}ai.responseType="blob";ai.open(af,ad,true)}catch(ah){R(ai);ai=null;if(al!=null&&typeof al.error=="function"){al.error("Open connection failed: "+ah)}}if(ai!=null){ai.onreadystatechange=function(){if(ai!=null){if(ai.readyState==4){if(ai.status>=200&&ai.status<300){U(ai,al)}else{if(al!=null&&typeof al.error=="function"){var am=a.strValue(ai.status); -if(a.isFullStr(ai.statusText)){am+=" "+ai.statusText}al.error("Server responded with status: "+am)}}R(ai);ai=null}}};if(ak!=null){for(var ag in ak){var ac=ak[ag];if(ac!=null){ai.setRequestHeader(a.strValue(ag),a.strValue(ac))}}}try{ai.send(ae)}catch(ah){R(ai);ai=null;if(al!=null&&typeof al.error=="function"){al.error("Send data failed: "+ah)}}}}};var O=function(ab,ac,ag,ae,ah,ad,af){if(ag!=null){ab.clearBlob(ag);if(ae!=null){M(ac,ae,ah,{success:function(aj){var ai={id:ag,blob:aj,url:K(aj)};if(ad!=null&&typeof ad.success=="function"){ad.success(ai)}ab.setEntry(ag,ai);if(ad!=null&&typeof ad.completed=="function"){ad.completed(ai)}},error:function(aj){var ai={id:ag,error:aj,status:0,reason:null};if(ad!=null&&typeof ad.error=="function"){ad.error(ai)}ab.setError(ag,ai);if(ad!=null&&typeof ad.completed=="function"){ad.completed(ai)}}},af)}}};var N=function(ab,ac){Z[ab]=ac;for(var ad in P){if(P[ad]!=null){ac(P[ad])}}};var Q=function(ab){delete Z[ab]};var T=function(ab){for(var ac in Z){Z[ac](ab) -}};var X=function(ab,ac){if(ab!=null&&typeof ac=="function"){L[ab]=ac;for(var ad in S){if(S[ad]!=null){ac(S[ad])}}}};var W=function(ab){if(ab!=null){delete L[ab]}};var Y=function(ab){for(var ac in L){L[ac](ab)}};this.onReady=function(ab,ac){if(a.isFullStr(ab)){if(typeof ac=="function"){N(ab,ac)}else{Q(ab)}}};this.onError=function(ab,ac){if(a.isFullStr(ab)){if(typeof ac=="function"){X(ab,ac)}else{W(ab)}}};this.onCompleted=function(ab,ac){this.onReady(ab,ac);this.onError(ab,ac)};this.foreachEntry=function(ac){if(typeof ac=="function"){for(var ab in P){if(P[ab]!=null){if(ac(P[ab])===true){break}}}}};this.foreachError=function(ac){if(typeof ac=="function"){for(var ab in S){if(S[ab]!=null){if(ac(S[ab])===true){break}}}}};this.getBlob=function(ab){return ab!=null&&P[ab]!=null?P[ab].blob:null};this.getUrl=function(ab){return ab!=null&&P[ab]!=null?P[ab].url:null};this.getEntry=function(ab){return ab!=null?P[ab]:null};this.setEntry=function(ac,ab){if(ac!=null&&ab!=null){V(P[ac]!=null?P[ac].url:null); -P[ac]=ab;S[ac]=null;T(ab)}};this.getError=function(ab){return ab!=null?S[ab]:null};this.setError=function(ab,ac){if(ab!=null&&ac!=null){V(P[ab]!=null?P[ab].url:null);P[ab]=null;S[ab]=ac;Y(ac)}};this.executeBlob=function(ae,ac,af,ab,ad){O(this,"POST",ae,ac,af,ab,ad)};this.loadBlob=function(ad,ab,ae,ac){O(this,"GET",ad,ab,null,ae,ac)};this.clearBlob=function(ab){if(ab!=null){V(P[ab]!=null?P[ab].url:null);P[ab]=null;S[ab]=null}};this.clear=function(){for(var ab in P){V(P[ab]!=null?P[ab].url:null)}P={};S={}}}function w(P){var M="srq";var L=0;var K={};var Q=0;this.timeout=P!=null?P:30000;var N=function(R,U){L++;Q++;var T=M+L+"_"+g.getTimestamp();var S={timeout:new o(R),callback:U};K[T]=S;S.timeout.start(function(){O(T,null,"Request timed out","timeout")});return T};var O=function(U,V,R,S){if(U!=null){var T=K[U];if(T!=null){Q--;T.timeout.stop();delete K[U];if(R!=null){if(T.callback!=null&&typeof T.callback.error=="function"){T.callback.error(R,S)}}else{if(T.callback!=null&&typeof T.callback.success=="function"){T.callback.success(V) -}}}}};this.startRequest=function(R){return N(this.timeout,R)};this.getRequestsCount=function(){return Q};this.isRequestPending=function(R){return R!=null&&K[R]!=null};this.handleData=function(R,S){O(R,S!=null?S:null,null)};this.handleError=function(S,T,R){O(S,null,T!=null?T:"Unknown error",R!=null?R:null)}}function b(){var N=0;var M=null;var L=function(){if(M!=null){var P=M;M=null;if(P.length>0){for(var O=0;O0};this.start=function(O){if(O===true){N=1}else{N++}};this.stop=function(O){if(N>0){if(O===true){N=0}else{if(N>0){N--}}if(N==0){L()}}};this.onReady=function(O){if(typeof O=="function"){if(N>0){K(O)}else{O()}}}}function p(U){var V=4;var S=256;var W=null;var T=null;var ad=function(an){return a.isFullStr(an)&&an.length>=V&&an.length0){while(ao<0){ao+=an}while(ao>=an){ao-=an}}return ao};var ab=function(ap,ao,an){ap+=3;return ap+ao>=an?0:ap};var O=function(an,ao){an++;return an>=ao?0:an};var ac=function(an,ao){return ao?-an:an};var aj=function(aq,ar,ap,an,ao){return af(ar+ac(an,ao)*ae(aq,ap),S)};var Q=function(au,an,at,av,ao,ar,ap){var aq=au!=null&&at!=null?au.indexOf(at):-1;return aq>=0?al(au,af(aq+ac(ar,ap)*(av+ae(an,ao)),au.length)):at};var P=function(ao,an){return an!=null?(ao!=null?ao+an:an):ao};var al=function(an,ao){return an!=null&&ao>=0&&ao=0&&ao0.5?av.indexOf(au):av.lastIndexOf(au);return ap>=0?Y(aj(an,ap,ao,1,aq).toString(16)):null}return null};var M=function(at,an,ar,ao,aq){var av=al(at,ar);var au=al(at,ar+1);var ap=av!=null&&au!=null?parseInt(av+au,16):-1;return ap>=0?aj(an,ap,ao,-1,aq):-1 -};var ak=function(au,ay,ao){var ax=null;if(a.isFullStr(au)&&au.length%2==0&&ad(ay)&&ad(ao)){var at=au.length;var av=ao.length;var ap=0;var ar=0;var aq=false;for(var an=0;an=0&&ad0){for(var W=0;W0}if(a2.duration==0){a2.duration=aY(a5.getDuration());a8=a2.duration>0}if(a2.position>0&&a2.duration>0){aV()}if(a8){U()}}catch(a9){ak("Start failed",a9);aV()}}else{aV()}};var aV=function(){ab=true;ac()};var a4=function(){ac();if(aP&&!ab&&a5!=null&&typeof a5.getPosition=="function"&&typeof a5.getDuration=="function"){aB=setInterval(O,aj)}};var ac=function(){if(aB!=null){clearInterval(aB); -aB=null}};var aZ=0;var aS={};var av=function(ba){aZ++;var a8=aD+aZ+"_"+g.getTimestamp();var a9={timeout:new o(P),callback:ba};aS[a8]=a9;a9.timeout.start(function(){ax(a8,{error:"Request timed out"})});return a8};var ax=function(a8,ba){if(a8!=null){var a9=aS[a8];if(a9!=null){a9.timeout.stop();delete aS[a8];Y(a9.callback,ba)}}};var Y=function(ba,a8){if(typeof ba=="function"){try{ba(a8)}catch(a9){ak("Callback error",a9)}}};var aW=new h();var X=new o(500);var ay=null;var aI=null;var ag=function(a8){if(a8!=null){if(t.isSameContentState(ay,a8)){if(!t.isSameContentState(aI,a8)){if(aI==null){a8.init=true}aI=t.createChangedContentState(aI,a8);aW.notifyObservers(aI)}}else{ay=a8}}ah()};var aN=function(){if(aP){ar("info:content",function(a8){ag(a8.info!=null&&a8.info.content!=null?a8.info.content.state:null)})}else{ah()}};var ah=function(a8){if(aW.hasObservers()){if(a.isFullStr(a8)&&aI!=null){aW.notifyObserver(a8,aI)}X.start(aN)}else{ay=null;aI=null;X.stop()}};var U=function(){Z(a2)};var aH=function(){a7.addHook(N,aC) -};var a0=function(){if(a2.state==z.STOPPED){a7.stop()}else{a7.start()}};var V=function(a8,a9){if(a.isFullStr(a8)){Z({action:a8,data:a9!=null?a9:null})}};var az=function(a9,a8){if(a.isFullStr(a9)){if(a8!==false){V("logger:debug:"+a9)}}};var aE=function(a9,a8,ba){if(a.isFullStr(a9)){if(a8!==false){V("logger:success:"+a9,{show:ba!==false})}else{if(ba!==false){V("success:"+a9)}}}};var a6=function(a9,a8,ba){if(a.isFullStr(a9)){if(a8!==false){V("logger:info:"+a9,{show:ba!==false})}else{if(ba!==false){V("info:"+a9)}}}};var al=function(a9,a8,ba){if(a.isFullStr(a9)){if(a8!==false){V("logger:warn:"+a9,{show:ba!==false})}else{if(ba!==false){V("warn:"+a9)}}}};var aw=function(a9,a8,ba){if(a.isFullStr(a9)){if(a8!==false){V("logger:error:"+a9,{show:ba!==false})}else{if(ba!==false){V("error:"+a9)}}}};var Q=function(a8,a9){if(a.isFullStr(a8)&&a9!=null){if(typeof a9=="object"){V(a8+":data",a9)}else{V(a8+":"+a9)}}};var aR=function(a8){Q("menu",a8)};var au=function(a8){Q("content",a8)};var at=function(a8){Q("panel",a8) -};var ar=function(a8,ba,a9){if(a.isFullStr(a8)){if(a9==null){a9={}}a9.requestId=av(ba);a9.dataId=a8;V("player:commit:"+a8,a9)}else{Y(ba,{error:"Data ID is invalid: '"+a8+"'"})}};var ak=function(a8,a9){if(a8!=null&&a9!=null){if(a9.name!=null&&a9.message!=null){aw("Plugin: "+a8+": "+a9.name+": "+a9.message)}else{aw("Plugin: "+a8+": "+a9)}}};var K=function(a8){if(a2.state!=z.PLAYING||a8===true){a2.state=z.PLAYING;if(aP&&a5!=null&&typeof a5.play=="function"){try{a5.play()}catch(a9){ak("Play failed",a9)}}}};var aQ=function(a8){if(a2.state!=z.PAUSED||a8===true){a2.state=z.PAUSED;if(aP&&a5!=null&&typeof a5.pause=="function"){try{a5.pause()}catch(a9){ak("Pause failed",a9)}}}};var a3=function(a8){if(a2.state!=z.STOPPED||a8===true){a2.state=z.STOPPED;if(aP&&a5!=null&&typeof a5.stop=="function"){try{a5.stop()}catch(a9){ak("Stop failed",a9)}}}};var aT=function(a8,a9){if(a8==z.PLAYING){K(a9)}else{if(a8==z.PAUSED){aQ(a9)}else{if(a8==z.STOPPED){a3(a9)}}}};var aC=function(){if(aP&&a5!=null&&!aa.isBusy()&&typeof a5.getUpdateData=="function"){try{var a9=a5.getUpdateData(); -if(a9!=null){var ba=false;if(a.isNum(a9.state)){ba=true;a2.state=a.strToNum(a9.state,a2.state)}if(a.isNum(a9.position)){ba=true;a2.position=a.strToNum(a9.position,a2.position);if(!isFinite(a2.position)){a2.position=0}}if(a.isNum(a9.duration)){ba=true;a2.duration=a.strToNum(a9.duration,a2.duration);if(!isFinite(a2.duration)){a2.duration=0}}if(a.isNum(a9.speed)){ba=true;a2.speed=a.strToNum(a9.speed,a2.speed)}if(a.isBool(a9.ended)){ba=true;a2.ended=a.strToBool(a9.ended,a2.ended)}if(a.isNum(a9.volume)){ba=true;a2.volume=a.strToNum(a9.volume,a2.volume)}if(a.isBool(a9.muted)){ba=true;a2.muted=a.strToBool(a9.muted,a2.muted)}if(ba){U();a0()}}}catch(a8){ak("Update failed",a8)}}};var aK=function(ba,a8){aX=false;if(a2.position!=ba||ba==0||a8===true){a2.position=ba;if(aP&&a5!=null&&typeof a5.setPosition=="function"){try{a5.setPosition(ba);if(!aX){aa.start()}}catch(a9){ak("Set position failed",a9)}}}};var aL=function(a8,ba){if(a2.volume!=a8||ba===true){a2.volume=a8;if(aP&&a5!=null&&typeof a5.setVolume=="function"){try{a5.setVolume(a8) -}catch(a9){ak("Set volume failed",a9)}}}};var S=function(a8,a9){if(a2.muted!=a8||a9===true){a2.muted=a8;if(aP&&a5!=null&&typeof a5.setMuted=="function"){try{a5.setMuted(a8)}catch(ba){ak("Set muted failed",ba)}}}};var a1=function(a8,a9){if(a2.speed!=a8||a9===true){a2.speed=a8;if(aP&&a5!=null&&typeof a5.setSpeed=="function"){try{a5.setSpeed(a8)}catch(ba){ak("Set speed failed",ba)}}}};var ap=function(a9,a8,ba){if(a2.width!=a9||a2.height!=a8||ba===true){a2.width=a9;a2.height=a8;if(aP&&a5!=null&&typeof a5.setSize=="function"){try{a5.setSize(a9,a8)}catch(bb){ak("Set size failed",bb)}}}};var aM=function(a8,a9){V("response:"+a8,a9)};var an=function(a8,a9){ax(a8,a9)};var L=function(a9,a8,bb){if(typeof a5.handleRequest=="function"){try{a5.handleRequest(a8,bb,function(bc){aM(a9,bc)})}catch(ba){ak("Handle request failed",ba);aM(a9)}}else{aM(a9)}};var W=function(a9){if(aP&&a9!=null&&a5!=null){if(typeof a5.handleEvent=="function"){try{a5.handleEvent(a9)}catch(a8){ak("Handle event failed",a8)}}}};var aA=function(bc){if(aP&&bc!=null&&a5!=null){if(a.isFullStr(bc.requestId)&&a.isFullStr(bc.dataId)){L(bc.requestId,bc.dataId,bc.data) -}else{if(bc.data!=null&&a.isFullStr(bc.data.requestId)&&a.isFullStr(bc.data.dataId)){var a9={};var bb=bc.data.dataId;var a8=bb.indexOf(":");if(a8>0){bb=bb.substr(0,a8)}a9[bb]=bc[bb]!=null?bc[bb]:null;a9.error=a.strFullCheck(bc.error,null);an(bc.data.requestId,a9)}else{if(typeof a5.handleData=="function"){try{a5.handleData(bc)}catch(ba){ak("Handle data failed",ba)}}}}}};var ai=function(a8){if(!ao||a8===true){ao=true;if(a5!=null&&typeof a5.init=="function"){try{a5.init()}catch(a9){ak("Call init failed",a9)}}}};var aU=function(a8){if(!aP||a8===true){aP=true;if(a5!=null&&typeof a5.ready=="function"){try{a5.ready()}catch(a9){ak("Call ready failed",a9)}}}};var aJ=function(){aP=false;e.addEventListener("message",function(a8){if(n.checkOrigin(a8.origin)){am(a8.data)}},false);V("plugin:init")};var am=function(a8){if(ao&&a8!=null&&a8.type===N){if(a8.init===1&&aP){return}if(a.isNum(a8.state)){aT(a.strToNum(a8.state,a2.state))}if(a.isNum(a8.position)){aK(a.strToNum(a8.position,a2.position))}if(a.isNum(a8.speed)){a1(a.strToNum(a8.speed,a2.speed)) -}if(a.isNum(a8.volume)){S(false);aL(a.strToNum(a8.volume,a2.volume))}if(a.isBool(a8.muted)){S(a.strToBool(a8.muted,a2.muted))}if(a.isNum(a8.width)&&a.isNum(a8.height)){ap(a.strToNum(a8.width,a2.width),a.strToNum(a8.height,a2.height))}if(a8.init===1){aU()}else{if(a8.data!=null){if(a.isFullStr(a8.data.event)){W(a8.data)}else{aA(a8.data)}}}}};var Z=function(a9){if(e.parent!=null&&a9!=null){a9.type=N;a9.sender="plugin";a9.target="app";try{e.parent.postMessage(a9,"*")}catch(a8){if(e.console!=null){console.error("Post message failed",a8)}}}};this.setupPlayer=function(a8){a5=a8;if(ao){ai(true)}if(aP){aU(true)}};this.setSeekDelay=function(a8){aa.delay=a.strToNum(a8,aa.delay)};this.getSeekDelay=function(){return aa.delay};this.setLoadingDelay=function(a8){aF.delay=a.strToNum(a8,aF.delay)};this.getLoadingDelay=function(){return aF.delay};this.setState=function(a8,a9){if(aP){a2.state=a.strToNum(a8,a2.state);if(a9===true){U()}a0()}};this.getState=function(){return a2.state};this.applyState=function(){if(aP){aT(a2.state,true) -}};this.setPosition=function(a9,a8){if(aP){aX=true;a2.position=a.strToNum(a9,a2.position);if(!isFinite(a2.position)){a2.position=0}aa.stop();if(a8===true){U();a0()}}};this.getPosition=function(){return a2.position};this.applyPosition=function(){if(aP){aK(a2.position,true)}};this.setDuration=function(a8,a9){if(aP){a2.duration=a.strToNum(a8,a2.duration);if(!isFinite(a2.duration)){a2.duration=0}if(a9===true){U();a0()}}};this.getDuration=function(){return a2.duration};this.setSpeed=function(a8,a9){if(aP){a2.speed=a.strToNum(a8,a2.speed);if(a9===true){U();a0()}}};this.getSpeed=function(){return a2.speed};this.applySpeed=function(){if(aP){a1(a2.speed,true)}};this.setEnded=function(a8,a9){if(aP){a2.ended=a.strToBool(a8,a2.ended);if(a9===true){U();a0()}}};this.hasEnded=function(){return a2.ended};this.setVolume=function(a9,a8){if(aP){a2.volume=a.strToNum(a9,a2.volume);if(a8===true){U();a0()}}};this.getVolume=function(){return a2.volume};this.setMuted=function(a8,a9){if(aP){a2.muted=a.strToBool(a8,a2.muted); -if(a9===true){U();a0()}}};this.isMuted=function(){return a2.muted};this.applyVolume=function(){if(aP){aL(a2.volume,true);S(a2.muted,true)}};this.getWidth=function(){return a2.width};this.getHeight=function(){return a2.height};this.applySize=function(){if(aP){ap(a2.width,a2.height,true)}};this.executeAction=function(a8,a9){if(aP){V(a8,a9)}};this.debug=function(a9,a8){if(aP){az(a9,a8)}};this.success=function(a9,a8,ba){if(aP){aE(a9,a8,ba)}};this.info=function(a9,a8,ba){if(aP){a6(a9,a8,ba)}};this.warn=function(a9,a8,ba){if(aP){al(a9,a8,ba)}};this.error=function(a9,a8,ba){if(aP){aw(a9,a8,ba)}};this.showMenu=function(a8){if(aP){aR(a8)}};this.showContent=function(a8){if(aP){au(a8)}};this.showPanel=function(a8){if(aP){at(a8)}};this.showPlayer=function(a8){if(aP){if(a.isFullStr(a8)){V("player:show:"+a8)}else{V("player:show")}}};this.showAction=function(){if(aP){V("player:action")}};this.hidePlayer=function(){if(aP){V("player:hide")}};this.setupContentLabel=function(a8){if(aP){V("player:label:content:"+a.strFullCheck(a8,"default")) -}};this.setupExtensionLabel=function(a8){if(aP){V("player:label:extension:"+a.strFullCheck(a8,"default"))}};this.setupPositionLabel=function(a8){if(aP){V("player:label:position:"+a.strFullCheck(a8,"default"))}};this.setupDurationLabel=function(a8){if(aP){V("player:label:duration:"+a.strFullCheck(a8,"default"))}};this.setupSpeedLabel=function(a8){if(aP){V("player:label:speed:"+a.strFullCheck(a8,"default"))}};this.setupInfoText=function(a8){if(aP){V("player:info:text:"+a.strFullCheck(a8,"default"))}};this.setupInfoImage=function(a8){if(aP){V("player:info:image:"+a.strFullCheck(a8,"default"))}};this.setupButton=function(a8,a9){if(aP&&a.isId(a8)){V("player:button:"+a8+":setup",a9)}};this.enableButton=function(a8){if(aP&&a.isId(a8)){V("player:button:"+a8+":enable")}};this.disableButton=function(a8){if(aP&&a.isId(a8)){V("player:button:"+a8+":disable")}};this.focusButton=function(a8){if(aP&&a.isId(a8)){V("player:button:"+a8+":focus")}};this.setupProgressColor=function(a8){if(aP){V("player:progress:color:"+a.strFullCheck(a8,"default")) -}};this.setupProgressType=function(a8){if(aP){V("player:progress:type:"+a.strFullCheck(a8,"default"))}};this.enableProgressMarker=function(){if(aP){V("player:progress:marker:enable")}};this.disableProgressMarker=function(){if(aP){V("player:progress:marker:disable")}};this.invalidateProgressMarker=function(){if(aP){V("player:progress:marker:invalidate")}};this.setupBackground=function(a8){if(aP){V("player:background:"+a.strFullCheck(a8,"default"))}};this.setupTrigger=function(a8,a9,ba){if(aP&&a.isFullStr(a8)&&a.isFullStr(a9)){if(ba===true){V("trigger:"+a8+":shot:"+a9)}else{V("trigger:"+a8+":"+a9)}}};this.clearTrigger=function(a8){if(aP&&a.isFullStr(a8)){V("trigger:"+a8+":none")}};this.refreshPlayer=function(){if(aP){V("player:refresh")}};this.resetPlayer=function(){if(aP){V("player:reset")}};this.cancelResume=function(){if(aP){V("resume:cancel")}};this.requestData=function(a8,ba,a9){if(aP){ar(a8,ba,a9)}else{Y(ba,{error:"Plugin not ready"})}};this.requestInteractionResponse=function(a8,ba,a9){if(a.isFullStr(a8)){this.requestData("response:request:interaction:"+a8,ba,a9!=null?{requestData:a9}:null) -}else{Y(ba,{error:"Data ID is invalid: '"+a8+"'"})}};this.validateSettings=function(a8){t.invalidateSettings();this.requestData("info",function(a9){t.validateSettings(a9);Y(a8,a9)})};this.onValidatedSettings=function(a8){if(!t.areSettingsValidated()&&!aO){aO=true;this.validateSettings(function(){aO=false})}t.onValidatedSettings(a8)};this.triggerEvent=function(a8,a9){if(aP&&a.isFullStr(a8)){V("event:"+a8,a9)}};this.setupSteam=function(a8){af(a8)};this.createSteam=function(a8){return aq(a8)};this.resolveToken=function(a8,a9){return M(a8,a9)};this.transformString=function(a8,a9){return aG(a8,a9)};this.normalizeString=function(a8,a9){return ad(a8,a9)};this.transformStringAsync=function(ba,bb,a9){var a8=aG(ba,bb);if(a.isFullStr(a8)){this.requestData("string:transform:"+a8,function(bc){Y(a9,{string:a.strFullCheck(bc.string,null)})})}else{Y(a9,{string:null})}};this.normalizeStringAsync=function(a9,ba,a8){if(a.isFullStr(a9)){this.requestData("string:normalize:"+a9,function(bb){Y(a8,{string:ad(bb.string,ba)}) -})}else{Y(a8,{string:null})}};this.createHashKey=function(a8,a9){return n.createHashKey(a8,a9)};this.clearDeviceId=function(){n.clearDeviceId()};this.getDeviceId=function(a8){return n.getDeviceId(a8)};this.requestDeviceId=function(a8){this.requestData("info:extended",function(a9){if(a9.error!=null){Y(a8,{error:a9.error})}else{Y(a8,{deviceId:n.getDeviceId(a9)})}})};this.hasContentObservers=function(){return aW.hasObservers()};this.addContentObserver=function(a8,a9){aW.addObserver(a8,a9);ah(a8)};this.removeContentObserver=function(a8){aW.removeObserver(a8);ah()};this.clearContentObservers=function(){aW.clear();ah()};this.init=function(){if(!ao){aJ();aH();ai()}};this.commit=function(){if(aP){U();a0()}};this.isInitialized=function(){return ao};this.isReady=function(){return aP};this.startPlayback=function(a8){if(aP){aT(z.PLAYING,true);U();a0();if(a8===true){a4()}}};this.stopPlayback=function(){if(aP){this.setEnded(true);U();ac()}};this.cancelPlayback=function(){if(aP){V("player:eject")}};this.startLoading=function(){if(aP){aF.start(function(){R=true; -V("player:busy:start:loading")})}};this.stopLoading=function(){if(aP){aF.stop();if(R){R=false;V("player:busy:stop:loading")}}}};var y=new function(){var N="interactionPlugin";var ar="irq";var ah=10;var aK=30000;var Z=new p("j3RZ!=Y$M5TZ#JPem'P1i(Tf?X3WcGlyCqNeXRbp02HL]I~r!IfO(pvxQ7At%9yq.5=)wm@0o?Js[sUbUH416uhd;_S/Qr,w7vW]jBgND;GazhCL+D%z~8ni+n-B_E-KK42tl[OAV@*E.Ya6$V,&kF)o&Mg98#'ucx/dk*SF");var S=null;var R=false;var au=new o(1000);var aC=false;var aj=false;var ad=null;var aB=false;var aG=null;var aa=function(aO){S=new p(aO)};var ak=function(aO){if(aC){if(aO=="local"){return S!=null?S.createSteam():null}return Z.createSteam()}return null};var L=function(aO,aP){if(aC){if(aP=="local"){return S!=null?S.resolveToken(aO):null}return Z.resolveToken(aO)}return null};var av=function(aO,aP){if(aC){if(aP=="local"){return S!=null?S.transformString(aO):null}else{if(aP=="global"){return Z.transformString(aO)}else{if(aP=="shared"){return n.transformString(S!=null?S.transformString(aO):aO)}}}return Z.transformString(S!=null?S.transformString(aO):aO) -}return null};var Y=function(aO,aP){if(aC){if(aP=="local"){return S!=null?S.normalizeString(aO):null}else{if(aP=="global"){return Z.normalizeString(aO)}else{if(aP=="shared"){return S!=null?S.normalizeString(n.normalizeString(aO)):n.normalizeString(aO)}}}return S!=null?S.normalizeString(Z.normalizeString(aO)):Z.normalizeString(aO)}return null};var aL=0;var aF={};var am=function(aQ){aL++;var aO=ar+aL+"_"+g.getTimestamp();var aP={timeout:new o(aK),callback:aQ};aF[aO]=aP;aP.timeout.start(function(){ao(aO,{error:"Request timed out"})});return aO};var ao=function(aO,aQ){if(aO!=null){var aP=aF[aO];if(aP!=null){aP.timeout.stop();delete aF[aO];V(aP.callback,aQ)}}};var V=function(aQ,aO){if(typeof aQ=="function"){try{aQ(aO)}catch(aP){af("Callback error",aP)}}};var aJ=new h();var ae=new o(500);var ap=null;var ax=null;var ab=function(aO){if(aO!=null){if(t.isSameContentState(ap,aO)){if(!t.isSameContentState(ax,aO)){if(ax==null){aO.init=true}ax=t.createChangedContentState(ax,aO);aJ.notifyObservers(ax) -}}else{ap=aO}}ac()};var aA=function(){if(aC){al("info:content",function(aO){ab(aO.info!=null&&aO.info.content!=null?aO.info.content.state:null)})}else{ac()}};var ac=function(aO){if(aJ.hasObservers()){if(a.isFullStr(aO)&&ax!=null){aJ.notifyObserver(aO,ax)}ae.start(aA)}else{ap=null;ax=null;ae.stop()}};var T=function(aO,aP){if(a.isFullStr(aO)){W({action:aO,data:aP!=null?aP:null})}};var aw=function(aP,aO){if(a.isFullStr(aP)){if(aO!==false){T("logger:debug:"+aP)}}};var at=function(aP,aO,aQ){if(a.isFullStr(aP)){if(aO!==false){T("logger:success:"+aP,{show:aQ!==false})}else{if(aQ!==false){T("success:"+aP)}}}};var aN=function(aP,aO,aQ){if(a.isFullStr(aP)){if(aO!==false){T("logger:info:"+aP,{show:aQ!==false})}else{if(aQ!==false){T("info:"+aP)}}}};var ag=function(aP,aO,aQ){if(a.isFullStr(aP)){if(aO!==false){T("logger:warn:"+aP,{show:aQ!==false})}else{if(aQ!==false){T("warn:"+aP)}}}};var an=function(aP,aO,aQ){if(a.isFullStr(aP)){if(aO!==false){T("logger:error:"+aP,{show:aQ!==false})}else{if(aQ!==false){T("error:"+aP) -}}}};var P=function(aO,aP){if(a.isFullStr(aO)&&aP!=null){if(typeof aP=="object"){T(aO+":data",aP)}else{T(aO+":"+aP)}}};var aE=function(aO){P("menu",aO)};var X=function(aO){P("content",aO)};var U=function(aO){P("panel",aO)};var al=function(aO,aQ,aP){if(a.isFullStr(aO)){if(aP==null){aP={}}aP.requestId=am(aQ);aP.dataId=aO;T("interaction:commit:"+aO,aP)}else{V(aQ,{error:"Data ID is invalid: '"+aO+"'"})}};var af=function(aO,aP){if(aO!=null&&aP!=null){if(aP.name!=null&&aP.message!=null){an("Interaction: "+aO+": "+aP.name+": "+aP.message)}else{an("Interaction: "+aO+": "+aP)}}};var az=function(aO,aP){T("response:"+aO,aP)};var ai=function(aO,aP){ao(aO,aP)};var K=function(aP,aO,aR){if(typeof ad.handleRequest=="function"){try{ad.handleRequest(aO,aR,function(aS){az(aP,aS)})}catch(aQ){af("Handle request failed",aQ);az(aP)}}else{az(aP)}};var aM=function(aP){if(aC&&aP!=null&&ad!=null){if(typeof ad.handleEvent=="function"){try{ad.handleEvent(aP)}catch(aO){af("Handle event failed",aO)}}}};var aq=function(aS){if(aC&&aS!=null&&ad!=null){if(a.isFullStr(aS.requestId)&&a.isFullStr(aS.dataId)){K(aS.requestId,aS.dataId,aS.data) -}else{if(aS.data!=null&&a.isFullStr(aS.data.requestId)&&a.isFullStr(aS.data.dataId)){var aP={};var aR=aS.data.dataId;var aO=aR.indexOf(":");if(aO>0){aR=aR.substr(0,aO)}aP[aR]=aS[aR]!=null?aS[aR]:null;aP.error=a.strFullCheck(aS.error,null);ai(aS.data.requestId,aP)}else{if(typeof ad.handleData=="function"){try{ad.handleData(aS)}catch(aQ){af("Handle data failed",aQ)}}}}}};var aH=function(aO){aG=aO!=null&&aO.length>0?aO:null};var Q=function(){if(aG!=null&&aG.length>0){for(var aO=0;aO=ah){aG.shift()}aG.push(aO)}};var O=function(aO){if(!aj||aO===true){aj=true;if(ad!=null&&typeof ad.init=="function"){try{ad.init()}catch(aP){af("Call init failed",aP)}}}};var aD=function(aO){if(!aC||aO===true){aC=true;if(ad!=null&&typeof ad.ready=="function"){try{ad.ready()}catch(aP){af("Call ready failed",aP)}}if(ad!=null){Q()}}};var ay=function(){aC=false;e.addEventListener("message",function(aO){if(n.checkOrigin(aO.origin)){M(aO.data) -}},false);T("interaction:init")};var M=function(aO){if(aj&&aO!=null&&aO.type===N){if(aO.init===1&&aC){return}if(aO.init===1){aH(aO.data);aD()}else{if(aO.data!=null){if(a.isFullStr(aO.data.event)){aM(aO.data)}else{if(ad!=null){aq(aO.data)}else{aI(aO.data)}}}}}};var W=function(aP){if(e.parent!=null&&aP!=null){aP.type=N;aP.sender="plugin";aP.target="app";try{e.parent.postMessage(aP,"*")}catch(aO){if(e.console!=null){console.error("Post message failed",aO)}}}};this.setupHandler=function(aO){ad=aO;if(aj){O(true)}if(aC){aD(true)}};this.setLoadingDelay=function(aO){au.delay=a.strToNum(aO,au.delay)};this.getLoadingDelay=function(){return au.delay};this.executeAction=function(aO,aP){if(aC){T(aO,aP)}};this.debug=function(aP,aO){if(aC){aw(aP,aO)}};this.success=function(aP,aO,aQ){if(aC){at(aP,aO,aQ)}};this.info=function(aP,aO,aQ){if(aC){aN(aP,aO,aQ)}};this.warn=function(aP,aO,aQ){if(aC){ag(aP,aO,aQ)}};this.error=function(aP,aO,aQ){if(aC){an(aP,aO,aQ)}};this.showMenu=function(aO){if(aC){aE(aO)}};this.showContent=function(aO){if(aC){X(aO) -}};this.showPanel=function(aO){if(aC){U(aO)}};this.requestData=function(aO,aQ,aP){if(aC){al(aO,aQ,aP)}else{V(aQ,{error:"Plugin not ready"})}};this.requestPlayerResponse=function(aO,aQ,aP){if(a.isFullStr(aO)){this.requestData("response:request:player:"+aO,aQ,aP!=null?{requestData:aP}:null)}else{V(aQ,{error:"Data ID is invalid: '"+aO+"'"})}};this.validateSettings=function(aO){t.invalidateSettings();this.requestData("info",function(aP){t.validateSettings(aP);V(aO,aP)})};this.onValidatedSettings=function(aO){if(!t.areSettingsValidated()&&!aB){aB=true;this.validateSettings(function(){aB=false})}t.onValidatedSettings(aO)};this.triggerEvent=function(aO,aP){if(aC&&a.isFullStr(aO)){T("event:"+aO,aP)}};this.setupSteam=function(aO){aa(aO)};this.createSteam=function(aO){return ak(aO)};this.resolveToken=function(aO,aP){return L(aO,aP)};this.transformString=function(aO,aP){return av(aO,aP)};this.normalizeString=function(aO,aP){return Y(aO,aP)};this.transformStringAsync=function(aQ,aR,aP){var aO=av(aQ,aR); -if(a.isFullStr(aO)){this.requestData("string:transform:"+aO,function(aS){V(aP,{string:a.strFullCheck(aS.string,null)})})}else{V(aP,{string:null})}};this.normalizeStringAsync=function(aP,aQ,aO){if(a.isFullStr(aP)){this.requestData("string:normalize:"+aP,function(aR){V(aO,{string:Y(aR.string,aQ)})})}else{V(aO,{string:null})}};this.createHashKey=function(aO,aP){return n.createHashKey(aO,aP)};this.clearDeviceId=function(){n.clearDeviceId()};this.getDeviceId=function(aO){return n.getDeviceId(aO)};this.requestDeviceId=function(aO){this.requestData("info:extended",function(aP){if(aP.error!=null){V(aO,{error:aP.error})}else{V(aO,{deviceId:n.getDeviceId(aP)})}})};this.hasContentObservers=function(){return aJ.hasObservers()};this.addContentObserver=function(aO,aP){aJ.addObserver(aO,aP);ac(aO)};this.removeContentObserver=function(aO){aJ.removeObserver(aO);ac()};this.clearContentObservers=function(){aJ.clear();ac()};this.init=function(){if(!aj){ay();O()}};this.isInitialized=function(){return aj};this.isReady=function(){return aC -};this.startLoading=function(){if(aC){au.start(function(){R=true;T("interaction:busy:start:loading")})}};this.stopLoading=function(){if(aC){au.stop();if(R){R=false;T("interaction:busy:stop:loading")}}}};e.TVXSettings=k;e.TVXStyles=l;e.TVXTools=a;e.TVXDateTools=g;e.TVXDateFormatter=H;e.TVXPropertyTools=F;e.TVXVideoState=z;e.TVXAction=f;e.TVXCookies=J;e.TVXStorage=d;e.TVXUrlParams=B;e.TVXOptions=C;e.TVXObservers=h;e.TVXEventObservers=I;e.TVXQueue=x;e.TVXWorker=c;e.TVXDelay=o;e.TVXClick=E;e.TVXAjax=j;e.TVXLogLevel=s;e.TVXLogger=v;e.TVXDictionary=q;e.TVXClock=i;e.TVXServices=A;e.TVXDataLoader=u;e.TVXDataService=D;e.TVXBlobService=r;e.TVXRequestService=w;e.TVXBusyService=b;e.TVXPluginTools=t;e.TVXVideoPlugin=G;e.TVXInteractionPlugin=y})(window,document); \ No newline at end of file From 0d479658ef71021c6d0ba21f81fffd9f8b715909 Mon Sep 17 00:00:00 2001 From: damiva <96115589+damiva@users.noreply.github.com> Date: Sat, 4 Feb 2023 13:33:56 +0300 Subject: [PATCH 05/18] Add files via upload --- server/web/msx/assets/html5x.html.gz | Bin 0 -> 3641 bytes server/web/msx/assets/russian.json.gz | Bin 0 -> 6126 bytes server/web/msx/assets/tizen.html.gz | Bin 0 -> 3321 bytes server/web/msx/assets/torrents.html | 234 +++++++++++++++++++++ server/web/msx/assets/torrents.min.html.gz | Bin 0 -> 3072 bytes server/web/msx/assets/tvx.js.gz | Bin 0 -> 25923 bytes 6 files changed, 234 insertions(+) create mode 100644 server/web/msx/assets/html5x.html.gz create mode 100644 server/web/msx/assets/russian.json.gz create mode 100644 server/web/msx/assets/tizen.html.gz create mode 100644 server/web/msx/assets/torrents.html create mode 100644 server/web/msx/assets/torrents.min.html.gz create mode 100644 server/web/msx/assets/tvx.js.gz diff --git a/server/web/msx/assets/html5x.html.gz b/server/web/msx/assets/html5x.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..862e466addb02abf37e800093d42279b62df40b3 GIT binary patch literal 3641 zcmV-94#x2xiwFod63t@(188(@Y&Cc;Xmo9C0L5BubK5u${wof5E|o5{<7{_#_T;F( zv`M#}Nt;ZQblU6mgDlau8ky9JloQv{e?NfKyJaW6-I@E6$Rr4WAOJpqbi8+Z@#^~X zz-M5$t70y1XBJli=2e zX84gsFQzH?(ZPCeAi#h9bQyUomRRgAr3vrh#GWhn_w$E=4#VpNju8fj$BltO#Q03j zGa6T%n7t0C)H}uDos;gi9&P6;y&uWcUbAv^prPfMo0XhzDLms%U>!a>&O?P{e zFz+_Y=%S%~;{aH(Xu!BPiCB=)e|leRXqW%^4Ogf3Qor}Eq$5`pN(fuF=NJn#cjnxQSIe; zevv+^QEW8>fVp@yFliTIugPE&*a`Bw8hd@;2k!`UO?GCWrK=GG>ig5}eR#C!>v zlolqhhKE$y6u_O+vGJPhE9R#Odxfz3URm|6>j`5J*qL>Y>SbB&CeG+hW49o%@+9yZ z8GdK|J{{r}jnAFX1F(+LoatS~3|LX9ZVWpheR$|NCpCcG+2b3aM%s23PS~F*lj<#O z3_=^(eqb^d9HK$5Y(!tD-?JnUiQT>f^k_L-+!P?rFzX518}`wD0_=gO2{WYk@P|+6r(TzBwUyv11p|XR!nJ99Ecn@-O{A6FJA#f*WwU> zdFYA)>60nrsCq55(f8CP#E09eVOVg~A`hK2T)!udrR5U;J$ zu|pd;jB@C)zaI_aRL(60zG>5=?O?N zIf`*e5n&~9o@O`ci{yu?XILs!LhRICV>CEXSx+Q@r<0O!lmM*0gVT$?BwyiNVY4if ztRr?1fkEQTfVS?;SOSdZOrFRUp(&YPLtk4o!W) ziv8#^0mp^Qpd!#UTXlZQMVHHs2Fze~2vr>12mHV#$NFCG>EhxUK(oSWu#!AcDmjzB z7cK>PPT=3OGq>?xS_6#wj zn)oa143j!%-IxOAaNDMC?F@>1wZZcGkpxQei@c~5@075Qy^A;@TL}TL58HjMm1Y!v^ zGFLH9V6P0uW8FJ)e6d)B%2_Ze5yk+LJ%Gsro@MmUO(^)~)T(7Is8;7XDgf{0(Q#(M zroL`Ni^|*?4JHhD7|>`_4JE<7>DtGBuY>I+mP-AA&1{U9T0IL%mMvoJzBy~g(**zy zrD-uD9PK)ZhzQtdB~s-OY|#BqkDz1){JxNmf=#|^Z<6f>!0loW^1@;V0Jb2VqEYhY zJNI=FBip~ct1r24)IH60FK8GvhG>Y6(io|?Mo8sRx{`J-AtVYfB44__#|W-iKExh} zr8y*Y@<;VjhD243ROLk|B(WbJw#+U(pV+2YsRL6Z#PsOTOgF)jkhF{it5*c24QoTW z73(9p8DH0io@BF%$HNw~lAvL@keU{VlNKr$*}c%W%=Sjv7?>?Xc2}J^l=Z!YVQ>V! zlK4qV=hT(P`X}i36|%sac7wMQCF>a?@-PL!TtxjVOT+MH#Fev~S+q=$*eYyilqyL! z+A8$2Op}W|O*-AAkd`ltv^=yQNv3(Q|K&uQTc8%j<^KN!RMIG4-_}!XyNRc~M4bx{ zUzQ=7dB2lZ#3d=+>;_&be4$f}>tBP*^OMhS-~R!ezyIBwPj0TxPJ!{er!vmy%Q~sa zD)QlhJv>+p5n^j`z$WR;BIeyK6nMc3iqKnY!@s}*BCJKWUs?Sl*Nq@K0W`I#xw#QO zVjrl&-sP3X%x#9bYOI_HFE#KD1Z3w{pdW`DM)Kk~T747|I8%oOcbXSH0N-pOP_fX1 zGx|r{PK}o@x+P#R>So6vH<$k5V4t@G93$pwOqCrQuoD}TLYv;n1S(n<5a(w-{+_8j zk=*vqkU4Rl>%n&{2)*7Z^F_dlnP2qGl}Hnx_1+8ByGr9YXGL!KEf;q@r_Dh6XtQ5b z^{TM&g9;55<{Dz;1{k0~TKve9pS|1mVA{_O(}L&m$2?DeK|negm&b;jzttK`g+cea zZcM$W?l#h?r#y@38pXjHg)|WQhkAp@1B*6-J)h&n0x5@IGa&zO`U%_!gAa` z$%gNkuLa8FwKMs*XB#e|3)YE;`>A_`Y2i)<-Hhc<*JImVud9Q}p4`3cPDaJ_?x1wO z6}^VCPdRS3EX{i<2-eQdr7?B0bJ-oQwM1Yd#j01XAn4LdyoIiH!Q>G1AoJTU8u+P+ zb}9Du6x*mjs@_JIwvpaVydpym*%c!_^rG-P=BeCY5rhiKIxiAS=5I%KMtUbnJ=nVm zYVqDl&m$MVOf;kX;w33m2{}WHbR^$De>%| zLB;H zvZa}3heyLh9K}J4qymxflaB^7kKSchU=tsg0}0xoJ3um#-6~*a-nmN z2T@BRYxRe>-7SsxDkLv^?eT?MzE}CpcA7+0Er*mF7s);I;RH^MWa3B6<7uo5f#wU+ z_vxZ~d2<9{y?=x`Ue|;ziPej!ACPyxOWwbl;+nk)_H-fLS98^|u;k{&VD6d%Rp*GK zXa@A2=@#cRxTOGTmoT|;(jSbJjhC#-dV^hnEW=)~W^1;O00Hn!y%6jAG$sF9kF&eR z=X)EQ#M=wOYxPm!q4|;*zj}RftifdOx%OMb$_Le520OwKoPv8txCC8 z0BE6vs{oL(>`HA7c6+fC?9Qy`0I))Bl|ag&Qlv$RmL)}UBvG{ET#iAI5WxfBUzq(z zc}LGo_sr}?rV=})l7#K!z1Oeb-95cG;aDv>QJPo{ec!g6v(dM`8@>JBe)Kdtj-E_R zPFP{ka6K4Nvs(7H1ufgs^KI9Grq`#=O+&+$>}7pO;I+R71Z~f4OE0jcKT+D7s9Nm+@RwTB2>~U5JBm(vAHle| z$EE-I*!gwzqW2H5lw+;C-LyIqmjpCCgULs|_o27$dMzs`)vN&dQLCM8wa#`rdPfJ^ zX9e}7&GoR^tf)TK3Dfk6P1o71D6or*qBbcC`x!dS1{ehc0-N@!QEIhHzJJzgwKXDq z*|t0@pnaMYX}dNlp3$^6WV2*#xM4v25x}7Lqtoai{P!Sw4*wjbqZ}Kc#H{={IsryL zj}DNby*ufscDrd;X&mts038EgPowW~W8m*2V`wKG^qdFuuJ>-IL&BQv;*igy!`_YP zsn!v=OvYjFdUR^ES1hMisoT4uIlBliYV2JB%XfuyLjh?|K;hy0Jir{d?3cMYwo`Xg6H>%i9+z7k(A>K&5}J;fvfMmh zdfU96_s~GWMzWboN7+s&V_iB$HUJIZX9d!2cRYKuL2S5}{7AY(&qHL&PJlJWoxcG~ z2CFEdy8!tpdamhuHS`0w1w&`}kGLJon^kGLR;`bGJOSiO+X& ze@sxjAe}W}8Op!cO052;FzN+~;0e`xoU~u{q;!~9AU%g&I!IC>#Sg3yelQUGC+iW0sBQXiw7f~;hHI{3tGse}c@{W^tO zs>^n^D%)1muBFid;vkK{<$ND69%c3(@bMM}4yn^0-K1z!$cB7It^;}e44HQtJpci_ zu7X+~nGYb-_R2;W1WfXma5@ZBZ z-@q`AjE`_|I;d&c4!aAKtecr=3AzI`ka36r0br_*xlxrtbcrkgErKadWmKOhec4o& z2if(2IC@|N2p)JDw^czn8&-9T|Y>&XapZ0EO)7_oenm#JnQznl>&z#x$ zG>$J(k}~w69Y4ur4kwyYG2CLWlLM8Rm9ZUt_!3sD()V@Oy@|m|soId$t=Foy2bm`L z@cStLB=nl;di?@p*}EmKt}dkGA*88To1E)jg&(3!KjMBBDaZ=O4gTP00c%vbXd$gk zf!&80q;_}o?oK6+H!+1rCk^8Jpdj?5v9SPZW1sht#chyumk}QmnVGJN-c;O>c}Q6BJSy8n5U{Z89TZoH<-Eu4C1ur zW>tm5U%}?y0504#yi7;>O5c*E_gqR5qtD|w1|l3RpH--kh4GB9!f>>06jtstf1{&G z+Vhh*{i5gsqJc?pVAqLl>gPR`q8&^|e?VbVBJvRC_wJCK9)k`X;J_Q8yANQlQr4K5 zl#brM!b(^OHbBL{zTuxY*u>(@7N}7pvyeXlwnLQs-tEcgcbLqP5g%VH!bRX2ZWKm+vhO=@mXF89`nsJJ#q`M?$Ab%CMFKmaj zf2tq2>CwQIX$}Hx*}e}FFI-Q^Ry*hvKrW6|wa8bH5XLDyXv;7l6)?*cJ@iWpDwGJn z$VP(Xhy<7Thk*?3HKM=a-kdXC}pltXg1$ zMa$ZayCIxt3h-RjEzz)i7$F_uNelc?(N@Gra5Jv5k5GV08lnLc&%?w8dt1in(~XD! zi=Y9&ss6Pa3;=QgfXu5|==>8BX7NY5^#ed$><5D7#}}3-M*wq4;{&9fo8ZyLV#j5T zjKH(U2k?eQfZy>0*&1*Do7#L}e&BkY@c^8AU8g`rpJReJr-5KEHzojG962Ex6TtaA zfVSsCNal~bmJ4}E&AHcLOshp{f3E-Roz#m&qr*%0E?CKV}r|}@1H`gF7e_R?a7&MH%1YIyGyBky0 zrZ43Ikb;bywL~B%P8CQo2EAy(=)!FS5+=SjtS?S=2Kn;PJvOS zL}pAd1*R1X)MG+1T)qS_!{*b$wM-7_REhgQKf#WUr^H^(u0l4x5zlK&j}mLA%5%H< z5nSr=B#H=~gmeq=s#;U##9VM-pHxpci##ZayY;C7u2ePzRUYcJlug`V6MQcLz zacyEvf{-SM^r8-7sH~Ml%qsYAD0AS?B=FCe2=L@R7ZjJV6{9NX5J^XV9u@;s#FWf} z{w190vE#%0ZJP}?CaEG6CX6d z#HAM$er(W?9%xr|wc!p545#{yNA*}#DMtVCbdsBLWrkb&@}&60c*zy2tC;`sJUscgFLJ(ug#Ov3<85I+?!vYTkQUPZ*}fU_wU5~EK+VY0Z^?2 z;5H#*lz5Z~S~x#zYG4-H`99E8JTMA~3po&Yf|UWX{_YCMbxB--ybt#t58%LFoDD%$ z@ekt2q`-192#aj_z#WEj#&26yd4@uN3yUUZ3Y4YhVvZUN--i;`(-+ z^yGOs2-T%=QC&m5=OhM)!3sUg*&HY|m&e7i=0fnWogyko;Ila17!SuFP;U+ZH9)nD zv}FZ)e!jO-{>fZrera~@rvLJKbb;D+jZ0v@N z4V*s9wjiX4k!n7bJCJR&^W}x*pO|dJbNtw(W~?Q44YH1PX$7GtbJl1blXTS?yM>PI zW195y@0gBxr-tZ2Y<3zF2!IGu&^W>4gx?@u03Sjh&HQ|w2v-H{EX`ua4jKTW?NR_I z_!7n>7ZVi3hHSQd0uscVqc%poi;yi)%1y_G1<|Y|kF`g`-01kw)D(Oal?(?9L?Z$> ztTy^`g+qn6bp|Ar7_{1fn~x9PUcNTBTA90YWo~BO3=*=SjYz@Z@~E+bfy)dSAnw@2 zV!f~XxOr?8*w{xG`SL*=nH8NyaD^F9zyzL%^I;L)n|RXOpAyk;=)~w)M2Edw0#9#Z z2)#R03N|6UfDzAnxADfsbH0?wS7h*<{DkUo$vHFC)ptQiyUJ>F!+nm z_RL6-SIL_@kAJh18M?LeODk7#Pxm&wZWdiJX6Xloh>fkcQxZnqc%~$?<7tjm;T$Q! zGQ%m8o<&h*jnNGOlG?R?V3eh4yC6?sWYS_Lm|J~tyBTiUJ)e{xQy37o zqCs6-zPdU?!34&!t0t79!)-~eK%hN|%7 z6;w1uYv`zoU`Ex?I7~7WlrCc>+jST1<1gvxOWg~6Om|@4$E#3uaG$@ct;YaO8-VpW zECH!*YL)y#_pe=~ifLL0ABxR!Q34bdy*!FN>|u4QiK%^+3a`zkXjy;nda*+VZ~azB zs9T_uI)-dIZd|K^h4+n7ImDtvvQLCLv}P zMGW!*<*CfBBlvDQ7~(Rh#L*?`Ozs&!xf;wkpWA25X8Aii}8(Id7gFlE|w_1e+tOhw0 zqQtSdJ~S=`3mgr{#g|zRV)Wh6tIFIK55tNcfwmi5Nztwhh>+a2bO<$rDi9_DKK)X_ zaal@q3nMS=qojxK6<{GjH6RCacMX!!sX5Ze7nr2XmCXKmb31`Ug)FSX@b=(gIzxd~ z*G&Fop|iVL<Y4~9nG^{8pK#Y}fD*Dxanx%;0+c~$mOa~4x z9n_}i&8;>G8F{Cfp6mweS9JSsG_EndiZIeqK;iw}fe6U%WezDu#zlDgLMNyL0MH#^ zT~4V1SX&Li#wmH_WFi|eV+i4k__HU0pHAZ05#9poOo>?uW|jS9VqNJb69?Nk`Zb=5 zg59z@WbetBRb3BqtN@|R>ja3JE7>j7IjeV>bEHbC@H0m-_~u2xFo-ws!vL0$u@r&% z!+Nl$vu2nUK*~Q;ULdJ^X*EcY8(LuO(5O0)5Tk>avcey@tgz#P20Co6BjC^@zW{p# zD138X!F}#NB8c1x+q6%07Y{;EB3@3``Gj99gd{h@hdE$%H=xh~E2wF_snr}+z`Jcz znJ6Fa=C7n179Vd!gic_y9d{tZ6IA6ywW&7n5JlZolj%~1fLDT;EIjTQZj{#+=4a>D z-d_IO$~?qStJlg4rkgEBW(r;&?a1Pn$DWbJj5OsBQZqt>Y0FA^wY)e7@F06ZC0j`( ziVAEzgM8*0%xFqyFm5}e4qZxThU1@pCHz$2!&7FM>t*7yVtnVdgWwFl;gc`)CsyFC zU8Hyk=vBmKPsMS_%hG+ZKivd(ID|_Bh*vl9k^XCQt808gqi6|g;LEP!@_duoMNlPvxxj`D;T1*`Q*=Dua_QJM`I02D#b`W(tUq-;q0=c@WoPb|#J5^}1@rQjnFY7nfJ($|K$l%E6u<5%vgof^x9W>#$$_ zUQ-VKg)!j24E+~JhCdL@rD8Azg4y{iSGrT8%;AK(Mu?{w=#=@$43hM?uHc8VFTUwKKJgx; zdw^tSVSa9Dy(@n3H)3xM@(c*g6O=e)Y`pR3v6{ktiKy;L z`Ccw2)bD`=D)x;*_@T{5URWE!^Sh*;l|9;pfDo%$4Lk_OE2UFHg`UahEmQYx3o~`Y1K?XiFY~dF5X{Y?geOPcN5n#FJd{(Lmrw;(8v9zelQJORSN* z&5%UZ7%BMZgi=Xt&2WV;_;k&)0ml_qB8Nl-iaY>PEI+j1wB_6 zH~3}?I6-=`?rskb1YT z;I*N;+pO{HF#IGFNFRwQJupVE)DC^x5nLRIS7U-7pVFV=!R=uLzGl(mM|x5m4QfOZD~>*N?5P@(77DmE*#c!R zGhAS3VA<_tI!dA>zBqQ)mP6CT|9v05_$_hTa_{bbXll#nNY6Psud>f)VjjFYpK&&R zbuN4n@K=5Rj)&I!Q1F;rSE&{Cv&@vqm!(CtP^sYyaKR3t~n?Hs>B; zshCAEu|^Rl2|@FkhkvlSA6oxnqZwb-sU;N_s*tlWX#Y0k;T;>b$9$W7v5NiaOx!zv zGK&3$u*7Ns7Qt`DlRwy!=}}@O@d%^K+x8y`XrJie2bf+>(om~IDd=;+Ry?+y^^(O_ zDtU!E)GNjm3xwzQm$YXt~zok5~KQ@(?sS0c`*9s9`w+H+aV8KIE_ z9sC;OJc3csi32_DVSF7$LC%$=LuI&-BY?FK+UhzG;a50k{&>to%^C0G+*O?L=R8WW z;&I10^Cx!L@}gegP28a6O%4w1(1Y-D5ZB_mNjn2CgnBgf4uw*~zzZDOX?cE?Vq4^a z=PRPLk;q6l@KOgzTV7nH+7e~p#SU$O$TK_7ys_=j#2ebq8Ebi?2Hw&Z2Ob0MJygcZ z243Q1#!N*9l~?Uex=qXD2M6Y&ttZ&NZ_5b}4w^O#acjT3fT0f?kkoNMlABtau`Q|K z1#koQ|ACcz-b27NorWeV(5P_Mt$UFggW4HrOB;L;Yu%me%ua>{>7QF%n)jm@*CC7p^<@2udhOafLq7% zj^PJZm~2_041slQ!ok=@9An4)ME$pg<4mI1ma!%DI%nazXhXA8F*^$n4;|iKq{$4y zBOEwqJV>~ek6^ud%^`LCAOP=&Qv!5I>(RvGy{cR?!@QaC(GMUbN5pXrz#7pv7Ni_g zx}eDDw=Jp4bgCKrBu`u1IXLK?dopH>`R%8PO*X{oLFbFW7wYD^GbmOx8tL&vVv$4P zHY4~N{s^O=A#i+ekoM6iuv6TtA?Xerx{uqda);^Mg&0lN0n@~t{nT+>p3!~{pxJzx zILyv`j6zOiUTj*n9k3w}97AiF`!ii^kUmP&AJCG4Ws0emf;owL`X5-rX$m7(Dn2ta zX%L}GzfDX+PJJU;6INOEx(S4~auueH0Ql+gq=j>?r2?|OjZ z@4Jm`JodiXAaGEcsXB13|Mg|%xAMrfA1+zokD1`EDRVbN0Nap5JLwU>tj>u`7OEB{ z&LIKqeC~?@p$p6r^B`j5oFAM~k8CutiyA$0rxAWeX&lSPE|D_~)Q)Jy#Dyo`!4vP! zqNHsdssvbhsLvM!Ro(=Ij5Pj;neT*t$=kn1+ zJMnrFjnc$jQqkOxKpZCAPJ;$h`XZD7<1P@_{t6F zQhJR$%c&MwR#X)l+8iL}-q4}fYaX&8Vr}PqVuYkJUbw0|iK9R+xkAKqQRu_$4hep3 z)+5hR^1I{(eo>7|tioUmOBp_>fpHFlELbS-0hAcHvi%DD5Qa*zfeU2v#67Jb;dAU7 zEMdKciNhCR2Y3QS8h|efzMg7Io=JqKTZ8C7ByM>rv1ioB8i_l}GP*AEIW;=b#xOSu z8Ky$O>a?^ZWJ`Yv07oIj)q_{EXd%g*1r@D5H(FCIl2Js{X3Z;`HOOGa&0dw)p75vS z9%nJOUN{B%v@M?~jXjl7GBsMt^OG!vQC{(Yj|3m%#+UUkt66LLe9LUh2Yc+dZ_CNF zyj5at%SlB&aT~uzMR8mG&lw|FHM$5bL*cL!IP9bl=WLQY?8r;6Cj+?PNJmcisgd9B z`FhAb>Y|jdiMTDgBu& z1SWQk+Jfi?97pHy2l*FW>ZUzFhR*e`?ap zG4!%Ll67~CiC?QS-0J70`ko4YPbbjZuH&_0NWw>iUd#PDrYH0%Z1ydZPca zoC_NUz|yfFsR~(HH*T!HxzqBgXRab^Fh4X0oXvarMO)F8URk46GbO$JVw<)=bqbM9 zN1OmgAECbylTZc9gODWIBN3IP>pXGNJc;jaXW92RA03$7rMn_3ljXjn2c1G&9hvuq z?7p=scGCjdRdh!9J*#%!HXeNAvCNL{dKhO{LghAG$v?>T4uM$STG!+-K#$^@)ek)lYm4DJ805Im zByT~jud-c`%D8qws?mEvRw(2`+9U1*Su*@ONNI0780DY_(2THrE*DYWaUZ^dyaLZu zX4j_tNfvCx%QEZ*()kH}f#P~HNw}=b+B(HkgcT9PD4DLiv;!)qLBHHQS+}c7rrp_& z^#8pxlJzJG+<9_)^mB${3I>Z_!Cw|N8}nlsqfzmtvF1MJCp3bUyX(9#+-eOn*?}nU z0^C{CVT(Xh(&{*LJ(91TWD!`DkI3J8;RTz@xKxywM896sua8JssJdOR_F^H8gU>8x z^Q3sSFy_N_N@&OFku}QQQdpJmPu2%;+WErd7pl;>*K1vG-a!_~ zn4x)p{85rQEhGqGn@#;>NIiH$3*GD*Z}}({{6h1ST07`MHHkbNQinMBRcDHsEjP5)kr5NZi7nxF zY800gM^v%BHc!{;@mf6>`JveHi35vz?A#`$m$S3&*$qWG|Fe94!0z9Y zw$V$m@=~%Eqh%@)ZP`7kQ{~-B+1{vu|{pEo@EAmck zsLQ02kF*tgZ+k#x4t;FuWC%I-Zdh4ADlFFHRGxXpx@xT+0ien~rl$mfH;7`F$e1_{ zSW=t1h?XlJ1kq3TCyPTroMvV<>tiIWizV{|dGL_u6OBhl49ia}sYW0Dw1v21i5W%~ zTEEsCeSTWfy4G4?iZVW{z})=GAvMSO$hBFUAQ&SYtDIx3b)3%UtLjF}{aKsh4EeH+ zl&H!wSABKx{^Q?~;!JP6RxNw^WrAvfANn{Uqq)K7y&?L7iX);EG(OOU0n?&5U5~k3 zQ_{*RRVG9Ieo9{H?USFH5Q@a6ECjr&S!OK7C5)Km4(n zx!vOz9r_!WAAh*d0qeCdZq)G$9`KVaQzv27_;)5Zs;y6ybXz97vZVSkgztfYDmv)x ze!{LHgkCE|mumW^uQhx_ug=P}u{9-H>AQwfs<=9l_PcPi2@nJ17b3Q^+1P=s#A9La z2|LE)Q3)^^D4@+DlbvbJ&COd6D(8w&A7oCB0d>RYG9NbqPD{XSu?SZC$Xokf|LH^? zB9V(Sk*m5jbT}$cFT{^@1lscRm1Zm)2mE)PhMHf&sZ7;KFMX~CtY`5ek#AG(heKTg{p247#Q~{UQ*SSTw3Y<+6i_wfk#kN z2KUlFrGs~a3K|^{jZ3=7B`qX01ACm-2#IwI=`o DReg}S literal 0 HcmV?d00001 diff --git a/server/web/msx/assets/torrents.html b/server/web/msx/assets/torrents.html new file mode 100644 index 0000000..226f445 --- /dev/null +++ b/server/web/msx/assets/torrents.html @@ -0,0 +1,234 @@ + + + + + TorrServer Interaction Plugin + + + + + + + + \ No newline at end of file diff --git a/server/web/msx/assets/torrents.min.html.gz b/server/web/msx/assets/torrents.min.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..04d0247bff4ea800a43fdd0a47d2c00fdba51ad3 GIT binary patch literal 3072 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 O=6?a=dzdWS8~^~r@9@?D literal 0 HcmV?d00001 diff --git a/server/web/msx/assets/tvx.js.gz b/server/web/msx/assets/tvx.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..5b9ca7ed02d7a2db39a5293eec2f0d9446ec9003 GIT binary patch literal 25923 zcmV(xK7`zhFS&Q(&vOVqYN><>Z^l!xV^ zwd(OVK!8+8*h$b@%6GqO9!Vw;sqTBveuSCz&YCrA)=b9qhrQT`Snujv>~gl87-sA# zlggw{J`!krD8&vlhq+i;H-F$cAiv|`RDS_ndM`d+nnTyH%(yPkrPUL*V~@(JRcdN^ zM8s8XJlCHs`w_|ATD#Lz`#p+4@|D)<*4wQ-%A~TXTn6y{YPJ3?Z!TvuxzcYoZyqY8 zp2qsUdQ*F7SF2sEm(Q@?_jXGFm0I;?sR!~ND*X;^!1W@d(MK z>cvAvYm{#CpE5w(RXdv2dbqAvdbND^@RJXzY4x*OFaPn-hg3^yuieRKb{08!fwaNO#;RtFa#doqY09v{p6e+kJH@z8BodlZXBw46y1 zl5&H*4&}|r@UI6FxhR6upLJloDfw|$rvGuE$l#$kPX~O*tjlEOqfheD5#=GSqu`TI za`yP6eDVpvH(I07zUJh)6F_9;T$WnZ=kIv*Son7~7TT&aZS zp{q4CwMR^G^qD?%bqHaG>2>O7XAm05wT;O{w>@~Zt@gWwVQdYTPC#F&cT434L5vIs z4`uSW#l(lDR!%ot%oQ>}eP^h~X%Kuf3H2EVyaKa;j)xxP*9%LfQHY89Yd zYmuDcmw>C>?)6~q2qXi`b**`rN(fR)Glqb4hPJMo9>rC?qO}?F$r$NY2>#G+38%e=18Pe8+8b`UJZ!PYFymR7(OQ5DbP-) zK3%`lZHqdWwqu2K)|*X|6k$G70%JbcZO3@heQ(qo4bNL+V>T1~L@_LP5!Z_}$!BBa zPRR&FQnP`GU|{1B$-`68HV^aT1`o@h4-Ku_3$aXfV={G9a?70Ya~|$u@59;hB!c9UAgk1R%|?Dz?r0@QoyCEjK85A?vZMm>zBzCf z1tj-MWv?SXK|u*}1Z1q@5JP@&V#67B9OZx|sr5mO1_JbHq(Gl}9{_BC)(5A>G-Cy& z^=gNf3Poc~3WY6U6gsf%k!~vonS&V2eQO3UF;Nao>mY__GwV6X3Ce+MFLe%94)79U z9@0tdLqRu(_R9hiS#qwA3=EKfEA|28+C$LV?Woi|W(+Zp4qMUKw2RPi^h39ILsRKC zRm^c;W;&5eNPI3fVnt_x%`Lerf?OBV1j$JQ1yLMZI-(`e;EYx&(!5g_XC;LL@-(j3 za-&UGqm{6BRkU*dj78!|A1o)qdQ;`e+c3v|?!GQ{_-uK`wx6@LPN&T$qHf!k?Z+{T z^03Jb?MiD9cQmzb7wVO@U|$Ce);b#&2DKTRFE%!vv1R-D&&NM}*E;PDqU0~#wzesA zl})Ja2TJ-sx25EFocxtZ zeoj3k?-Tz{Gt^8;-~LC=uhw_BclQK&mrQ6_AJ0rXxs2VJpv%4Iv@Vz$zq?EQzWoon zyStY@c!uLAP;loYe#8I&_Fz8&_OCC2+CZmH>|AB!^(p)DI3^zaE`933#vZH~rZp7& zi?yZ-erBylN_*%NT`1{&-n>@uh&C>jE+ZZ)=^{t=l|Y{bJby1Ox8MOx0Q@WW+3(Mx zKMT+{bSFXgZ|LIr!s|D{q6BZZpq=LJrjk~8vqJ{JchX(rE`6umb6iisn92R2q#ryT zB_%EM_6^8P@%EL1N@W%HIA^u``9-7IYF~csbbI})>u)#T@n8rWrODLz@i?2C*5Ys5 zahFfeKVN=jvWK~&?% z!avmGUuBphcXvqgA$TMo0N_A?{31jql3+`^w=TF-!%0D50Nb7`Qhr;eppE&Lk{C`E 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 Date: Sat, 4 Feb 2023 13:36:37 +0300 Subject: [PATCH 06/18] current version added --- server/web/msx/msx.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/web/msx/msx.go b/server/web/msx/msx.go index 42c98d1..4d411b0 100644 --- a/server/web/msx/msx.go +++ b/server/web/msx/msx.go @@ -32,7 +32,7 @@ func SetupRoute(r *gin.RouterGroup) { r.GET("/msx/start.json", func(c *gin.Context) { c.JSON(200, gin.H{ "name": "TorrServer", - "version": "0.0.1", + "version": version.Version, "parameter": "content:request:interaction:init@{PREFIX}{SERVER}/msx/torrents", }) }) From 82ef44b85d764ba7564105248e45569cab0c6209 Mon Sep 17 00:00:00 2001 From: damiva <96115589+damiva@users.noreply.github.com> Date: Wed, 15 Feb 2023 20:19:11 +0300 Subject: [PATCH 07/18] Delete server/web/msx/assets directory --- server/web/msx/assets/html5x.html.gz | Bin 3641 -> 0 bytes server/web/msx/assets/russian.json.gz | Bin 6126 -> 0 bytes server/web/msx/assets/tizen.html.gz | Bin 3321 -> 0 bytes server/web/msx/assets/torrents.html | 234 --------------------- server/web/msx/assets/torrents.min.html.gz | Bin 3072 -> 0 bytes server/web/msx/assets/tvx.js.gz | Bin 25923 -> 0 bytes 6 files changed, 234 deletions(-) delete mode 100644 server/web/msx/assets/html5x.html.gz delete mode 100644 server/web/msx/assets/russian.json.gz delete mode 100644 server/web/msx/assets/tizen.html.gz delete mode 100644 server/web/msx/assets/torrents.html delete mode 100644 server/web/msx/assets/torrents.min.html.gz delete mode 100644 server/web/msx/assets/tvx.js.gz diff --git a/server/web/msx/assets/html5x.html.gz b/server/web/msx/assets/html5x.html.gz deleted file mode 100644 index 862e466addb02abf37e800093d42279b62df40b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3641 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 DReg}S diff --git a/server/web/msx/assets/torrents.html b/server/web/msx/assets/torrents.html deleted file mode 100644 index 226f445..0000000 --- a/server/web/msx/assets/torrents.html +++ /dev/null @@ -1,234 +0,0 @@ - - - - - TorrServer Interaction Plugin - - - - - - - - \ No newline at end of file diff --git a/server/web/msx/assets/torrents.min.html.gz b/server/web/msx/assets/torrents.min.html.gz deleted file mode 100644 index 04d0247bff4ea800a43fdd0a47d2c00fdba51ad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3072 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 O=6?a=dzdWS8~^~r@9@?D diff --git a/server/web/msx/assets/tvx.js.gz b/server/web/msx/assets/tvx.js.gz deleted file mode 100644 index 5b9ca7ed02d7a2db39a5293eec2f0d9446ec9003..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25923 zcmV(xK7`zhFS&Q(&vOVqYN><>Z^l!xV^ zwd(OVK!8+8*h$b@%6GqO9!Vw;sqTBveuSCz&YCrA)=b9qhrQT`Snujv>~gl87-sA# zlggw{J`!krD8&vlhq+i;H-F$cAiv|`RDS_ndM`d+nnTyH%(yPkrPUL*V~@(JRcdN^ zM8s8XJlCHs`w_|ATD#Lz`#p+4@|D)<*4wQ-%A~TXTn6y{YPJ3?Z!TvuxzcYoZyqY8 zp2qsUdQ*F7SF2sEm(Q@?_jXGFm0I;?sR!~ND*X;^!1W@d(MK z>cvAvYm{#CpE5w(RXdv2dbqAvdbND^@RJXzY4x*OFaPn-hg3^yuieRKb{08!fwaNO#;RtFa#doqY09v{p6e+kJH@z8BodlZXBw46y1 zl5&H*4&}|r@UI6FxhR6upLJloDfw|$rvGuE$l#$kPX~O*tjlEOqfheD5#=GSqu`TI za`yP6eDVpvH(I07zUJh)6F_9;T$WnZ=kIv*Son7~7TT&aZS zp{q4CwMR^G^qD?%bqHaG>2>O7XAm05wT;O{w>@~Zt@gWwVQdYTPC#F&cT434L5vIs z4`uSW#l(lDR!%ot%oQ>}eP^h~X%Kuf3H2EVyaKa;j)xxP*9%LfQHY89Yd zYmuDcmw>C>?)6~q2qXi`b**`rN(fR)Glqb4hPJMo9>rC?qO}?F$r$NY2>#G+38%e=18Pe8+8b`UJZ!PYFymR7(OQ5DbP-) zK3%`lZHqdWwqu2K)|*X|6k$G70%JbcZO3@heQ(qo4bNL+V>T1~L@_LP5!Z_}$!BBa zPRR&FQnP`GU|{1B$-`68HV^aT1`o@h4-Ku_3$aXfV={G9a?70Ya~|$u@59;hB!c9UAgk1R%|?Dz?r0@QoyCEjK85A?vZMm>zBzCf z1tj-MWv?SXK|u*}1Z1q@5JP@&V#67B9OZx|sr5mO1_JbHq(Gl}9{_BC)(5A>G-Cy& z^=gNf3Poc~3WY6U6gsf%k!~vonS&V2eQO3UF;Nao>mY__GwV6X3Ce+MFLe%94)79U z9@0tdLqRu(_R9hiS#qwA3=EKfEA|28+C$LV?Woi|W(+Zp4qMUKw2RPi^h39ILsRKC zRm^c;W;&5eNPI3fVnt_x%`Lerf?OBV1j$JQ1yLMZI-(`e;EYx&(!5g_XC;LL@-(j3 za-&UGqm{6BRkU*dj78!|A1o)qdQ;`e+c3v|?!GQ{_-uK`wx6@LPN&T$qHf!k?Z+{T z^03Jb?MiD9cQmzb7wVO@U|$Ce);b#&2DKTRFE%!vv1R-D&&NM}*E;PDqU0~#wzesA zl})Ja2TJ-sx25EFocxtZ zeoj3k?-Tz{Gt^8;-~LC=uhw_BclQK&mrQ6_AJ0rXxs2VJpv%4Iv@Vz$zq?EQzWoon zyStY@c!uLAP;loYe#8I&_Fz8&_OCC2+CZmH>|AB!^(p)DI3^zaE`933#vZH~rZp7& zi?yZ-erBylN_*%NT`1{&-n>@uh&C>jE+ZZ)=^{t=l|Y{bJby1Ox8MOx0Q@WW+3(Mx zKMT+{bSFXgZ|LIr!s|D{q6BZZpq=LJrjk~8vqJ{JchX(rE`6umb6iisn92R2q#ryT zB_%EM_6^8P@%EL1N@W%HIA^u``9-7IYF~csbbI})>u)#T@n8rWrODLz@i?2C*5Ys5 zahFfeKVN=jvWK~&?% z!avmGUuBphcXvqgA$TMo0N_A?{31jql3+`^w=TF-!%0D50Nb7`Qhr;eppE&Lk{C`E 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 Date: Wed, 15 Feb 2023 20:20:52 +0300 Subject: [PATCH 08/18] Add files via upload --- server/web/msx/assets/html5x.html.gz | Bin 0 -> 3641 bytes server/web/msx/assets/russian.json.gz | Bin 0 -> 6492 bytes server/web/msx/assets/tizen.js.gz | Bin 0 -> 3144 bytes server/web/msx/assets/torrent.js.gz | Bin 0 -> 2299 bytes server/web/msx/assets/torrents.js.gz | Bin 0 -> 2752 bytes server/web/msx/assets/tvx.js.gz | Bin 0 -> 25923 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 server/web/msx/assets/html5x.html.gz create mode 100644 server/web/msx/assets/russian.json.gz create mode 100644 server/web/msx/assets/tizen.js.gz create mode 100644 server/web/msx/assets/torrent.js.gz create mode 100644 server/web/msx/assets/torrents.js.gz create mode 100644 server/web/msx/assets/tvx.js.gz diff --git a/server/web/msx/assets/html5x.html.gz b/server/web/msx/assets/html5x.html.gz new file mode 100644 index 0000000000000000000000000000000000000000..862e466addb02abf37e800093d42279b62df40b3 GIT binary patch literal 3641 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 COnWx~ literal 0 HcmV?d00001 diff --git a/server/web/msx/assets/tizen.js.gz b/server/web/msx/assets/tizen.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..2b3e298ff7fbf4b1f20fa307a42bf79bd02420c8 GIT binary patch literal 3144 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 literal 0 HcmV?d00001 diff --git a/server/web/msx/assets/torrent.js.gz b/server/web/msx/assets/torrent.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..e3a0a84032c4e84d7a656ae1b54c1dadb3a1c2db GIT binary patch literal 2299 zcmVZiwFoa6YXOF19We4a%FCGE^TRUE^2cCl~`?W+c*;bD+v!Uq_v{hN$+r= zs~YLH-Da`96iu$XIKw#55^bxINmZomes730vXvzL@Hb_!KM>tY?Z4SOA`B7NLZwX(7jPS)q5hUnO>ZlfYuXTpj*NZ@M7z8S3;XI4H~ zwjF@+R#wX#0%P$_JdE^^&7{SKQX9+00qNeA-9Qg5XDp2LFz3JC-uxr>s^!ziz|w5N zb5KJkMBNiJ6RX-dn8;Y&-3TgG$=EQYW_4d2X+f7W+hU zD#Az{9CQ7z_kr|>*rb;va@gaagq_FJLhCAU!$Qxn=X^Kr_by(Ay94__1=6pTdga!j zbr@UyA%Bora1nOd3G0s7TNbfpqd&W!sY!+# z^n(tKIaZ7Uj@OX4(c<4P>u!8HG{VB_(?&T|u2$ezcfbq})JRrSLfRaeDl zQ3=EsD%uBl>1@kg6J zqXNk)jB}Nf=q6CjFi?I^^Ba-d?6DyyO>`NA+Ym*H%sCe-E94jXy_UxA&00iNWWu$D zx?jlPhbsCs*iE3PNZ;eA0~yF3m{o4md0@m+CMcXmh}vr;85Y&YP4)(E#5#>g=cow$C6TD&MLv|xCvYNn>T$Yez`X)`ks>HVzIwaQqC z>O0K~`ENSI#HhOO1@zn8n77b`7}5U%eJtC3rk+6i zz;ydz7_O<98x(T$I&Vr)r*oQ*42otW3#{S5pq@7Z-+<4ZoV60$o$MSpSv;!`t&~aj zdeP}D-t>mYs$|`Mv^dMo`XSK5pgfuc-`lpLzM=ISlxwBB41r5hfsEb~n2%~zuPw!6D1$7Z*Kv#=Y8 zVGY3QP%o_UJko};Q0;tf7sX#6hA5c{B2J|`lmGm3{WB6;D{8lONHuD^rHayoMv(&v zM{Uk?-QX=1q3z6oq$}X8otydIlg>q4IIwh!kUmlGI`}oG(Y4;`9v0R)gqn#v2Mhkt6FY;ZU+CSE-n9z)m(vl)3BvN zrLush*`&7Cg_;j-atat7V0yahZNs=2vUcjZJn)zaCUh~??r3yrvY7l!peGzmfHUqr z{%9D*F$@Ztd9oLwSkv+}cH)Y<)-ele17xE&2JH7rtJz7T#q~Rm-hrq14~Xj>BK`wOb93FCT;|;C_ z?07hZ8XT!Ny-o)R??I-ul~1%uwkCh*n?DmEK&IN3&|rJe``;Qv~>)4DJ(L3Eis_ixm|{dZHBAD!$fICv@0 VLxKJlaL)g0eFf=_dgelrlqib- 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 GB>(`d12EwL literal 0 HcmV?d00001 diff --git a/server/web/msx/assets/tvx.js.gz b/server/web/msx/assets/tvx.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..4ce3e237cdd4f4dadbe290bc9dd7913e10811017 GIT binary patch literal 25923 zcmV(xK7`zhFS&Q(&vOVqYN><>Z^l!xV^ zwd(OVK!8+8*h$b@%6GqO9!Vw;sqTBveuSCz&YCrA)=b9qhrQT`Snujv>~gl87-sA# zlggw{J`!krD8&vlhq+i;H-F$cAiv|`RDS_ndM`d+nnTyH%(yPkrPUL*V~@(JRcdN^ zM8s8XJlCHs`w_|ATD#Lz`#p+4@|D)<*4wQ-%A~TXTn6y{YPJ3?Z!TvuxzcYoZyqY8 zp2qsUdQ*F7SF2sEm(Q@?_jXGFm0I;?sR!~ND*X;^!1W@d(MK z>cvAvYm{#CpE5w(RXdv2dbqAvdbND^@RJXzY4x*OFaPn-hg3^yuieRKb{08!fwaNO#;RtFa#doqY09v{p6e+kJH@z8BodlZXBw46y1 zl5&H*4&}|r@UI6FxhR6upLJloDfw|$rvGuE$l#$kPX~O*tjlEOqfheD5#=GSqu`TI za`yP6eDVpvH(I07zUJh)6F_9;T$WnZ=kIv*Son7~7TT&aZS zp{q4CwMR^G^qD?%bqHaG>2>O7XAm05wT;O{w>@~Zt@gWwVQdYTPC#F&cT434L5vIs z4`uSW#l(lDR!%ot%oQ>}eP^h~X%Kuf3H2EVyaKa;j)xxP*9%LfQHY89Yd zYmuDcmw>C>?)6~q2qXi`b**`rN(fR)Glqb4hPJMo9>rC?qO}?F$r$NY2>#G+38%e=18Pe8+8b`UJZ!PYFymR7(OQ5DbP-) zK3%`lZHqdWwqu2K)|*X|6k$G70%JbcZO3@heQ(qo4bNL+V>T1~L@_LP5!Z_}$!BBa zPRR&FQnP`GU|{1B$-`68HV^aT1`o@h4-Ku_3$aXfV={G9a?70Ya~|$u@59;hB!c9UAgk1R%|?Dz?r0@QoyCEjK85A?vZMm>zBzCf z1tj-MWv?SXK|u*}1Z1q@5JP@&V#67B9OZx|sr5mO1_JbHq(Gl}9{_BC)(5A>G-Cy& z^=gNf3Poc~3WY6U6gsf%k!~vonS&V2eQO3UF;Nao>mY__GwV6X3Ce+MFLe%94)79U z9@0tdLqRu(_R9hiS#qwA3=EKfEA|28+C$LV?Woi|W(+Zp4qMUKw2RPi^h39ILsRKC zRm^c;W;&5eNPI3fVnt_x%`Lerf?OBV1j$JQ1yLMZI-(`e;EYx&(!5g_XC;LL@-(j3 za-&UGqm{6BRkU*dj78!|A1o)qdQ;`e+c3v|?!GQ{_-uK`wx6@LPN&T$qHf!k?Z+{T z^03Jb?MiD9cQmzb7wVO@U|$Ce);b#&2DKTRFE%!vv1R-D&&NM}*E;PDqU0~#wzesA zl})Ja2TJ-sx25EFocxtZ zeoj3k?-Tz{Gt^8;-~LC=uhw_BclQK&mrQ6_AJ0rXxs2VJpv%4Iv@Vz$zq?EQzWoon zyStY@c!uLAP;loYe#8I&_Fz8&_OCC2+CZmH>|AB!^(p)DI3^zaE`933#vZH~rZp7& zi?yZ-erBylN_*%NT`1{&-n>@uh&C>jE+ZZ)=^{t=l|Y{bJby1Ox8MOx0Q@WW+3(Mx zKMT+{bSFXgZ|LIr!s|D{q6BZZpq=LJrjk~8vqJ{JchX(rE`6umb6iisn92R2q#ryT zB_%EM_6^8P@%EL1N@W%HIA^u``9-7IYF~csbbI})>u)#T@n8rWrODLz@i?2C*5Ys5 zahFfeKVN=jvWK~&?% z!avmGUuBphcXvqgA$TMo0N_A?{31jql3+`^w=TF-!%0D50Nb7`Qhr;eppE&Lk{C`E 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 Date: Wed, 15 Feb 2023 20:23:27 +0300 Subject: [PATCH 09/18] rutor search added to MSX --- server/web/msx/msx.go | 61 +++++++++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 16 deletions(-) diff --git a/server/web/msx/msx.go b/server/web/msx/msx.go index 4d411b0..52aa8f6 100644 --- a/server/web/msx/msx.go +++ b/server/web/msx/msx.go @@ -11,9 +11,11 @@ import ( var ( //go:embed assets/tvx.js.gz tvx []byte - //go:embed assets/tizen.html.gz + //go:embed assets/tizen.js.gz tzn []byte - //go:embed assets/torrents.min.html.gz + //go:embed assets/torrents.js.gz + trs []byte + //go:embed assets/torrent.js.gz trn []byte //go:embed assets/html5x.html.gz h5x []byte @@ -27,18 +29,45 @@ func ass(b []byte, t string) func(*gin.Context) { c.Data(200, t+"; charset=UTF-8", b) } } - -func SetupRoute(r *gin.RouterGroup) { - r.GET("/msx/start.json", func(c *gin.Context) { - c.JSON(200, gin.H{ - "name": "TorrServer", - "version": version.Version, - "parameter": "content:request:interaction:init@{PREFIX}{SERVER}/msx/torrents", - }) - }) - r.GET("/msx/russian.json", ass(rus, "application/json")) - r.GET("/msx/tvx.js", ass(tvx, "text/javascript")) - r.GET("/msx/torrents", ass(trn, "text/html")) - r.GET("/msx/tizen", ass(tzn, "text/html")) - r.GET("/msx/html5x", ass(h5x, "text/html")) +func ass(c *gin.Context, b []byte, t string) { + c.Header("Content-Encoding", "gzip") + c.Data(200, t+"; charset=UTF-8", b) +} +func SetupRoute(r *gin.RouterGroup) { + r.GET("/msx/:pth", func(c *gin.Context) { + s := []string{"tvx", "tizen"} + switch p := c.Param("pth"); p { + case "start.json": + c.JSON(200, gin.H{ + "name": "TorrServer", + "version": version.Version, + "parameter": "content:request:interaction:init@{PREFIX}{SERVER}/msx/torrents", + }) + 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") + case "torrents.js": + ass(c, trs, "text/javascript") + case "torrent.js": + ass(c, trn, "text/javascript") + case "torrents": + s = append(s, p) + 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"...) + } + c.Data(200, "text/html", append(b, "\n\n"...)) + default: + c.AbortWithStatus(404) + } + }) } From efe92280613f1ab1c83c8b31f86a787dc6cfa232 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Feb 2023 21:33:33 +0300 Subject: [PATCH 10/18] Bump github.com/pion/dtls/v2 from 2.1.5 to 2.2.4 in /server (#216) Bumps [github.com/pion/dtls/v2](https://github.com/pion/dtls) from 2.1.5 to 2.2.4. - [Release notes](https://github.com/pion/dtls/releases) - [Commits](https://github.com/pion/dtls/compare/v2.1.5...v2.2.4) --- updated-dependencies: - dependency-name: github.com/pion/dtls/v2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- server/go.mod | 13 +++++++------ server/go.sum | 23 +++++++++++++++-------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/server/go.mod b/server/go.mod index 9d0b588..0f3d945 100644 --- a/server/go.mod +++ b/server/go.mod @@ -68,7 +68,7 @@ require ( github.com/mschoch/smat v0.2.0 // indirect github.com/pelletier/go-toml/v2 v2.0.6 // indirect github.com/pion/datachannel v1.5.5 // indirect - github.com/pion/dtls/v2 v2.1.5 // indirect + github.com/pion/dtls/v2 v2.2.4 // indirect github.com/pion/ice/v2 v2.2.12 // indirect github.com/pion/interceptor v0.1.12 // indirect github.com/pion/logging v0.2.2 // indirect @@ -81,20 +81,21 @@ require ( github.com/pion/srtp/v2 v2.0.10 // indirect github.com/pion/stun v0.3.5 // indirect github.com/pion/transport v0.14.1 // indirect + github.com/pion/transport/v2 v2.0.0 // indirect github.com/pion/turn/v2 v2.0.9 // indirect - github.com/pion/udp v0.1.1 // indirect + github.com/pion/udp v0.1.4 // indirect github.com/pion/webrtc/v3 v3.1.50 // indirect github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 // indirect github.com/tidwall/btree v1.6.0 // indirect github.com/ugorji/go/codec v1.2.8 // indirect go.opentelemetry.io/otel v1.11.2 // indirect go.opentelemetry.io/otel/trace v1.11.2 // indirect - golang.org/x/crypto v0.4.0 // indirect + golang.org/x/crypto v0.5.0 // indirect golang.org/x/exp v0.0.0-20221227203929-1b447090c38c // indirect - golang.org/x/net v0.4.0 // indirect + golang.org/x/net v0.5.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.3.0 // indirect - golang.org/x/text v0.5.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/server/go.sum b/server/go.sum index 1fb6b57..3e5370e 100644 --- a/server/go.sum +++ b/server/go.sum @@ -290,8 +290,9 @@ github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pion/datachannel v1.5.5 h1:10ef4kwdjije+M9d7Xm9im2Y3O6A6ccQb0zcqZcJew8= github.com/pion/datachannel v1.5.5/go.mod h1:iMz+lECmfdCMqFRhXhcA/219B0SQlbpoR2V118yimL0= -github.com/pion/dtls/v2 v2.1.5 h1:jlh2vtIyUBShchoTDqpCCqiYCyRFJ/lvf/gQ8TALs+c= github.com/pion/dtls/v2 v2.1.5/go.mod h1:BqCE7xPZbPSubGasRoDFJeTsyJtdD1FanJYL0JGheqY= +github.com/pion/dtls/v2 v2.2.4 h1:YSfYwDQgrxMYXLBc/m7PFY5BVtWlNm/DN4qoU2CbcWg= +github.com/pion/dtls/v2 v2.2.4/go.mod h1:WGKfxqhrddne4Kg3p11FUMJrynkOY4lb25zHNO49wuw= github.com/pion/ice/v2 v2.2.12 h1:n3M3lUMKQM5IoofhJo73D3qVla+mJN2nVvbSPq32Nig= github.com/pion/ice/v2 v2.2.12/go.mod h1:z2KXVFyRkmjetRlaVRgjO9U3ShKwzhlUylvxKfHfd5A= github.com/pion/interceptor v0.1.11/go.mod h1:tbtKjZY14awXd7Bq0mmWvgtHB5MDaRN7HV3OZ/uy7s8= @@ -321,11 +322,14 @@ github.com/pion/transport v0.13.0/go.mod h1:yxm9uXpK9bpBBWkITk13cLo1y5/ur5VQpG22 github.com/pion/transport v0.13.1/go.mod h1:EBxbqzyv+ZrmDb82XswEE0BjfQFtuw1Nu6sjnjWCsGg= github.com/pion/transport v0.14.1 h1:XSM6olwW+o8J4SCmOBb/BpwZypkHeyM0PGFCxNQBr40= github.com/pion/transport v0.14.1/go.mod h1:4tGmbk00NeYA3rUa9+n+dzCCoKkcy3YlYb99Jn2fNnI= +github.com/pion/transport/v2 v2.0.0 h1:bsMYyqHCbkvHwj+eNCFBuxtlKndKfyGI2vaQmM3fIE4= +github.com/pion/transport/v2 v2.0.0/go.mod h1:HS2MEBJTwD+1ZI2eSXSvHJx/HnzQqRy2/LXxt6eVMHc= github.com/pion/turn/v2 v2.0.8/go.mod h1:+y7xl719J8bAEVpSXBXvTxStjJv3hbz9YFflvkpcGPw= github.com/pion/turn/v2 v2.0.9 h1:jcDPw0Vfd5I4iTc7s0Upfc2aMnyu2lgJ9vV0SUrNC1o= github.com/pion/turn/v2 v2.0.9/go.mod h1:DQlwUwx7hL8Xya6TTAabbd9DdKXTNR96Xf5g5Qqso/M= -github.com/pion/udp v0.1.1 h1:8UAPvyqmsxK8oOjloDk4wUt63TzFe9WEJkg5lChlj7o= github.com/pion/udp v0.1.1/go.mod h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M= +github.com/pion/udp v0.1.4 h1:OowsTmu1Od3sD6i3fQUJxJn2fEvJO6L1TidgadtbTI8= +github.com/pion/udp v0.1.4/go.mod h1:G8LDo56HsFwC24LIcnT4YIDU5qcB6NepqqjP0keL2us= github.com/pion/webrtc/v3 v3.1.50 h1:wLMo1+re4WMZ9Kun9qcGcY+XoHkE3i0CXrrc0sjhVCk= github.com/pion/webrtc/v3 v3.1.50/go.mod h1:y9n09weIXB+sjb9mi0GBBewNxo4TKUQm5qdtT5v3/X4= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= @@ -417,8 +421,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= -golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20221227203929-1b447090c38c h1:Govq2W3bnHJimHT2ium65kXcI7ZzTniZHcFATnLJM0Q= golang.org/x/exp v0.0.0-20221227203929-1b447090c38c/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= @@ -454,8 +458,8 @@ golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -501,20 +505,23 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= From 6b7ab254dbbe81ae2866da2921f7cb8106d80540 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Thu, 16 Feb 2023 23:27:34 +0300 Subject: [PATCH 11/18] bump ver for tag --- server/version/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/version/version.go b/server/version/version.go index f48d27d..5c99b03 100644 --- a/server/version/version.go +++ b/server/version/version.go @@ -1,3 +1,3 @@ package version -const Version = "MatriX.120.2" +const Version = "MatriX.120.3" From 06427b39debe64c58ec12b7f745771a31eff627d Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Fri, 17 Feb 2023 02:50:18 +0300 Subject: [PATCH 12/18] add ffprobe path lookup --- server/web/api/ffprobe.go | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/server/web/api/ffprobe.go b/server/web/api/ffprobe.go index 045f0e0..1ca2894 100644 --- a/server/web/api/ffprobe.go +++ b/server/web/api/ffprobe.go @@ -4,14 +4,21 @@ import ( "context" "errors" "fmt" - "github.com/gin-gonic/gin" - "gopkg.in/vansante/go-ffprobe.v2" "net/http" "os" + "os/exec" "path/filepath" "server/utils" + + "github.com/gin-gonic/gin" + "gopkg.in/vansante/go-ffprobe.v2" ) +func commandExists(cmd string) bool { + _, err := exec.LookPath(cmd) + return err == nil +} + func ffp(c *gin.Context) { hash := c.Param("hash") indexStr := c.Param("id") @@ -22,13 +29,22 @@ func ffp(c *gin.Context) { } host := utils.GetScheme(c) + "://" + c.Request.Host + "/stream?link=" + hash + "&index=" + indexStr + "&play" - fmt.Println(host) + // log.Println("ffprobe", host) ctx, cancelFn := context.WithCancel(context.Background()) defer cancelFn() - if _, err := os.Stat("ffprobe"); os.IsNotExist(err) { - ffprobe.SetFFProbeBinPath(filepath.Dir(os.Args[0]) + "/ffprobe") + // path lookup + path, err := exec.LookPath("ffprobe") + if err == nil { + // log.Println("ffprobe found in", path) + ffprobe.SetFFProbeBinPath(path) + } else { + // log.Println("ffprobe not found in $PATH") + // working dir + if _, err := os.Stat("ffprobe"); os.IsNotExist(err) { + ffprobe.SetFFProbeBinPath(filepath.Dir(os.Args[0]) + "/ffprobe") + } } data, err := ffprobe.ProbeURL(ctx, host) From 3541310ab36819605c1beaa2c1fe41b869b6eaf6 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Fri, 17 Feb 2023 18:17:33 +0300 Subject: [PATCH 13/18] bump ver for tag --- server/version/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/version/version.go b/server/version/version.go index 5c99b03..06e1ca7 100644 --- a/server/version/version.go +++ b/server/version/version.go @@ -1,3 +1,3 @@ package version -const Version = "MatriX.120.3" +const Version = "MatriX.120.4" From 1f2ae234ad3d067861bdc22624016e8384459d59 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Fri, 17 Feb 2023 18:33:14 +0300 Subject: [PATCH 14/18] fix build gofmt -l -w . --- server/web/api/cache.go | 2 +- server/web/api/torrents.go | 2 +- server/web/msx/msx.go | 9 ++------- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/server/web/api/cache.go b/server/web/api/cache.go index e8da18b..a27d4d6 100644 --- a/server/web/api/cache.go +++ b/server/web/api/cache.go @@ -9,7 +9,7 @@ import ( "github.com/pkg/errors" ) -//Action: get +// Action: get type cacheReqJS struct { requestI Hash string `json:"hash,omitempty"` diff --git a/server/web/api/torrents.go b/server/web/api/torrents.go index d67a084..c7f843f 100644 --- a/server/web/api/torrents.go +++ b/server/web/api/torrents.go @@ -15,7 +15,7 @@ import ( "github.com/pkg/errors" ) -//Action: add, get, set, rem, list, drop +// Action: add, get, set, rem, list, drop type torrReqJS struct { requestI Link string `json:"link,omitempty"` diff --git a/server/web/msx/msx.go b/server/web/msx/msx.go index 52aa8f6..dfb8fe5 100644 --- a/server/web/msx/msx.go +++ b/server/web/msx/msx.go @@ -2,7 +2,7 @@ package msx import ( _ "embed" - + "server/version" "github.com/gin-gonic/gin" @@ -23,16 +23,11 @@ var ( rus []byte ) -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) { c.Header("Content-Encoding", "gzip") c.Data(200, t+"; charset=UTF-8", b) } + func SetupRoute(r *gin.RouterGroup) { r.GET("/msx/:pth", func(c *gin.Context) { s := []string{"tvx", "tizen"} From 2f07b6f9180e12b22ffada1fe24646ea46cdac11 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Fri, 17 Feb 2023 18:42:05 +0300 Subject: [PATCH 15/18] go get github.com/anacrolix/torrent@master --- server/go.mod | 6 +++--- server/go.sum | 11 ++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/server/go.mod b/server/go.mod index 0f3d945..f6f539a 100644 --- a/server/go.mod +++ b/server/go.mod @@ -9,7 +9,7 @@ require ( github.com/anacrolix/log v0.13.2-0.20221123232138-02e2764801c3 github.com/anacrolix/missinggo v1.3.0 github.com/anacrolix/publicip v0.3.0 - github.com/anacrolix/torrent v1.48.1-0.20230130214106-5a185c45c08c + github.com/anacrolix/torrent v1.48.1-0.20230214014649-2cb7121a93c7 github.com/gin-contrib/cors v1.4.0 github.com/gin-contrib/location v0.0.2 github.com/gin-gonic/gin v1.8.2 @@ -91,10 +91,10 @@ require ( go.opentelemetry.io/otel v1.11.2 // indirect go.opentelemetry.io/otel/trace v1.11.2 // indirect golang.org/x/crypto v0.5.0 // indirect - golang.org/x/exp v0.0.0-20221227203929-1b447090c38c // indirect + golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb // indirect golang.org/x/net v0.5.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.4.0 // indirect + golang.org/x/sys v0.5.0 // indirect golang.org/x/text v0.6.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/server/go.sum b/server/go.sum index 3e5370e..6565759 100644 --- a/server/go.sum +++ b/server/go.sum @@ -87,8 +87,8 @@ github.com/anacrolix/sync v0.4.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DC github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw= github.com/anacrolix/tagflag v1.0.0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw= github.com/anacrolix/tagflag v1.1.0/go.mod h1:Scxs9CV10NQatSmbyjqmqmeQNwGzlNe0CMUMIxqHIG8= -github.com/anacrolix/torrent v1.48.1-0.20230130214106-5a185c45c08c h1:dLLwhIfTfKt8TY3wUWEfac+Vm3DKOxxWE5TSY56ETrs= -github.com/anacrolix/torrent v1.48.1-0.20230130214106-5a185c45c08c/go.mod h1:CSREuKRFlbHifecdogdFDt+geYf5MnDQyRPg+1O8W8E= +github.com/anacrolix/torrent v1.48.1-0.20230214014649-2cb7121a93c7 h1:R8QhMYfNfbubLrVPnAOa1NsbyCCbWPKJOV6q1m7BolM= +github.com/anacrolix/torrent v1.48.1-0.20230214014649-2cb7121a93c7/go.mod h1:xZTzaCylzaU7v79t6W6goTkAABwI8hMB+3uYixVyqbc= github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 h1:QAVZ3pN/J4/UziniAhJR2OZ9Ox5kOY2053tBbbqUPYA= github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96/go.mod h1:Wa6n8cYIdaG35x15aH3Zy6d03f7P728QfdcDeD/IEOs= github.com/anacrolix/utp v0.1.0 h1:FOpQOmIwYsnENnz7tAGohA+r6iXpRjrq8ssKSre2Cp4= @@ -424,8 +424,8 @@ golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20221227203929-1b447090c38c h1:Govq2W3bnHJimHT2ium65kXcI7ZzTniZHcFATnLJM0Q= -golang.org/x/exp v0.0.0-20221227203929-1b447090c38c/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb h1:PaBZQdo+iSDyHT053FjUCgZQ/9uqVwPOcl7KSWhKn6w= +golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -506,8 +506,9 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= From ec4deb8afe1594a4f0c307614f22915696f7d824 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Feb 2023 18:45:00 +0300 Subject: [PATCH 16/18] Bump golang.org/x/net from 0.5.0 to 0.7.0 in /server (#220) Bumps [golang.org/x/net](https://github.com/golang/net) from 0.5.0 to 0.7.0. - [Release notes](https://github.com/golang/net/releases) - [Commits](https://github.com/golang/net/compare/v0.5.0...v0.7.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- server/go.mod | 4 ++-- server/go.sum | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/server/go.mod b/server/go.mod index f6f539a..0f0746b 100644 --- a/server/go.mod +++ b/server/go.mod @@ -92,10 +92,10 @@ require ( go.opentelemetry.io/otel/trace v1.11.2 // indirect golang.org/x/crypto v0.5.0 // indirect golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb // indirect - golang.org/x/net v0.5.0 // indirect + golang.org/x/net v0.7.0 // indirect golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.5.0 // indirect - golang.org/x/text v0.6.0 // indirect + golang.org/x/text v0.7.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/server/go.sum b/server/go.sum index 6565759..e7c334b 100644 --- a/server/go.sum +++ b/server/go.sum @@ -458,8 +458,9 @@ golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -521,8 +522,9 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= From 7822157ff2c601b0ca24420e0f63df5db04b5973 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Sat, 18 Feb 2023 23:23:11 +0300 Subject: [PATCH 17/18] gofumpt --- server/dlna/list.go | 6 +----- server/log/log.go | 18 +++++++++++------- server/mimetype/mimetype.go | 1 - server/rutor/mem_test.go | 5 +++-- server/rutor/rutor.go | 12 +++++++----- server/rutor/torrsearch/tokenizer.go | 2 +- server/settings/btsets.go | 4 +--- server/settings/db.go | 8 +------- server/settings/migrate.go | 6 ++---- server/settings/viewed.go | 4 ++-- server/torr/apihelper.go | 4 +--- server/torr/dbwrapper.go | 3 ++- server/torr/storage/torrstor/cache.go | 5 ++--- server/torr/storage/torrstor/diskpiece.go | 4 ++-- server/torr/storage/torrstor/reader.go | 18 +++++++++--------- server/torr/utils/webImageChecker.go | 1 + server/web/api/ffprobe.go | 1 + server/web/api/m3u.go | 12 ++++++------ server/web/api/settings.go | 1 + server/web/api/stream.go | 1 - server/web/blocker/iplist.go | 2 +- server/web/server.go | 13 +++++++------ 22 files changed, 62 insertions(+), 69 deletions(-) diff --git a/server/dlna/list.go b/server/dlna/list.go index f16eafa..fa216a4 100644 --- a/server/dlna/list.go +++ b/server/dlna/list.go @@ -20,7 +20,6 @@ import ( ) func getRoot() (ret []interface{}) { - // Torrents Object tObj := upnpav.Object{ ID: "%2FTR", @@ -37,18 +36,16 @@ func getRoot() (ret []interface{}) { ret = append(ret, cnt) return - } func getTorrents() (ret []interface{}) { - torrs := torr.ListTorrent() // sort by title as in cds SortCaps sort.Slice(torrs, func(i, j int) bool { return torrs[i].Title < torrs[j].Title }) - var vol = 0 + vol := 0 for _, t := range torrs { vol++ obj := upnpav.Object{ @@ -251,7 +248,6 @@ func getLink(host, path string) string { } func getObjFromTorrent(path, parent, host string, torr *torr.Torrent, file *state.TorrentFileStat) (ret interface{}) { - mime, err := mt.MimeTypeByPath(file.Path) if err != nil { if settings.BTsets.EnableDebug { diff --git a/server/log/log.go b/server/log/log.go index b92343d..ae730ec 100644 --- a/server/log/log.go +++ b/server/log/log.go @@ -12,20 +12,24 @@ import ( "github.com/gin-gonic/gin" ) -var logPath = "" -var webLogPath = "" +var ( + logPath = "" + webLogPath = "" +) var webLog *log.Logger -var logFile *os.File -var webLogFile *os.File +var ( + logFile *os.File + webLogFile *os.File +) func Init(path, webpath string) { webLogPath = webpath logPath = path if webpath != "" { - ff, err := os.OpenFile(webLogPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) + ff, err := os.OpenFile(webLogPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o666) if err != nil { TLogln("Error create web log file:", err) } else { @@ -40,7 +44,7 @@ func Init(path, webpath string) { os.Remove(path) } } - ff, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) + ff, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o666) if err != nil { TLogln("Error create log file:", err) return @@ -87,7 +91,7 @@ func WebLogger() gin.HandlerFunc { return } body := "" - //save body if not form or file + // save body if not form or file if !strings.HasPrefix(c.Request.Header.Get("Content-Type"), "multipart/form-data") { body, _ := ioutil.ReadAll(c.Request.Body) c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body)) diff --git a/server/mimetype/mimetype.go b/server/mimetype/mimetype.go index c9b91f7..03685aa 100644 --- a/server/mimetype/mimetype.go +++ b/server/mimetype/mimetype.go @@ -10,7 +10,6 @@ import ( ) func init() { - // Add a minimal number of mime types to augment go's built in types // for environments which don't have access to a mime.types file (e.g. // Termux on android) diff --git a/server/rutor/mem_test.go b/server/rutor/mem_test.go index 273314f..70e1400 100644 --- a/server/rutor/mem_test.go +++ b/server/rutor/mem_test.go @@ -6,12 +6,13 @@ import ( "fmt" "os" "path/filepath" - "server/rutor/models" "testing" + + "server/rutor/models" ) func TestParseChannel(t *testing.T) { - var channel = make(chan *models.TorrentDetails, 0) + channel := make(chan *models.TorrentDetails, 0) var ftors []*models.TorrentDetails go func() { for torr := range channel { diff --git a/server/rutor/rutor.go b/server/rutor/rutor.go index fb6eaed..5565e59 100644 --- a/server/rutor/rutor.go +++ b/server/rutor/rutor.go @@ -3,21 +3,23 @@ package rutor import ( "compress/flate" "encoding/json" - "github.com/agnivade/levenshtein" "io" "net/http" "os" "path/filepath" + "sort" + "strconv" + "strings" + "time" + + "github.com/agnivade/levenshtein" + "server/log" "server/rutor/models" "server/rutor/torrsearch" "server/rutor/utils" "server/settings" utils2 "server/torr/utils" - "sort" - "strconv" - "strings" - "time" ) var ( diff --git a/server/rutor/torrsearch/tokenizer.go b/server/rutor/torrsearch/tokenizer.go index 58c3cff..be75275 100644 --- a/server/rutor/torrsearch/tokenizer.go +++ b/server/rutor/torrsearch/tokenizer.go @@ -18,6 +18,6 @@ func analyze(text string) []string { tokens := tokenize(text) tokens = lowercaseFilter(tokens) tokens = stopwordFilter(tokens) - //tokens = stemmerFilter(tokens) + // tokens = stemmerFilter(tokens) return tokens } diff --git a/server/settings/btsets.go b/server/settings/btsets.go index 5c57696..6dc4299 100644 --- a/server/settings/btsets.go +++ b/server/settings/btsets.go @@ -53,9 +53,7 @@ func (v *BTSets) String() string { return string(buf) } -var ( - BTsets *BTSets -) +var BTsets *BTSets func SetBTSets(sets *BTSets) { if ReadOnly { diff --git a/server/settings/db.go b/server/settings/db.go index 05c9c92..03ec985 100644 --- a/server/settings/db.go +++ b/server/settings/db.go @@ -16,7 +16,7 @@ type TDB struct { } func NewTDB() *TDB { - db, err := bolt.Open(filepath.Join(Path, "config.db"), 0666, &bolt.Options{Timeout: 5 * time.Second}) + db, err := bolt.Open(filepath.Join(Path, "config.db"), 0o666, &bolt.Options{Timeout: 5 * time.Second}) if err != nil { log.TLogln(err) return nil @@ -60,7 +60,6 @@ func (v *TDB) Get(xpath, name string) []byte { ret = buckt.Get([]byte(name)) return nil }) - if err != nil { log.TLogln("Error get sets", xpath+"/"+name, ", error:", err) } @@ -95,12 +94,10 @@ func (v *TDB) Set(xpath, name string, value []byte) { return buckt.Put([]byte(name), value) }) - if err != nil { log.TLogln("Error put sets", xpath+"/"+name, ", error:", err) log.TLogln("value:", value) } - } func (v *TDB) List(xpath string) []string { @@ -134,7 +131,6 @@ func (v *TDB) List(xpath string) []string { return nil }) - if err != nil { log.TLogln("Error list sets", xpath, ", error:", err) } @@ -169,9 +165,7 @@ func (v *TDB) Rem(xpath, name string) { return buckt.Delete([]byte(name)) }) - if err != nil { log.TLogln("Error rem sets", xpath+"/"+name, ", error:", err) } - } diff --git a/server/settings/migrate.go b/server/settings/migrate.go index d0ed0ed..e0c6ce1 100644 --- a/server/settings/migrate.go +++ b/server/settings/migrate.go @@ -11,9 +11,7 @@ import ( "server/web/api/utils" ) -var ( - dbTorrentsName = []byte("Torrents") -) +var dbTorrentsName = []byte("Torrents") type torrentOldDB struct { Name string @@ -29,7 +27,7 @@ func Migrate() { return } - db, err := bolt.Open(filepath.Join(Path, "torrserver.db"), 0666, nil) + db, err := bolt.Open(filepath.Join(Path, "torrserver.db"), 0o666, nil) if err != nil { return } diff --git a/server/settings/viewed.go b/server/settings/viewed.go index 55e4e73..bf02562 100644 --- a/server/settings/viewed.go +++ b/server/settings/viewed.go @@ -69,7 +69,7 @@ func ListViewed(hash string) []*Viewed { err = json.Unmarshal(buf, &indeces) if err == nil { var ret []*Viewed - for i, _ := range indeces { + for i := range indeces { ret = append(ret, &Viewed{hash, i}) } return ret @@ -85,7 +85,7 @@ func ListViewed(hash string) []*Viewed { var indeces map[int]struct{} err = json.Unmarshal(buf, &indeces) if err == nil { - for i, _ := range indeces { + for i := range indeces { ret = append(ret, &Viewed{key, i}) } } diff --git a/server/torr/apihelper.go b/server/torr/apihelper.go index 93d9ee2..e2773a4 100644 --- a/server/torr/apihelper.go +++ b/server/torr/apihelper.go @@ -15,9 +15,7 @@ import ( sets "server/settings" ) -var ( - bts *BTServer -) +var bts *BTServer func InitApiHelper(bt *BTServer) { bts = bt diff --git a/server/torr/dbwrapper.go b/server/torr/dbwrapper.go index 1eb532d..4aca82f 100644 --- a/server/torr/dbwrapper.go +++ b/server/torr/dbwrapper.go @@ -2,9 +2,10 @@ package torr import ( "encoding/json" - "server/torr/utils" "time" + "server/torr/utils" + "server/settings" "server/torr/state" diff --git a/server/torr/storage/torrstor/cache.go b/server/torr/storage/torrstor/cache.go index b84365b..e8657d6 100644 --- a/server/torr/storage/torrstor/cache.go +++ b/server/torr/storage/torrstor/cache.go @@ -64,7 +64,7 @@ func (c *Cache) Init(info *metainfo.Info, hash metainfo.Hash) { if settings.BTsets.UseDisk { name := filepath.Join(settings.BTsets.TorrentsSavePath, hash.HexString()) - err := os.MkdirAll(name, 0777) + err := os.MkdirAll(name, 0o777) if err != nil { log.TLogln("Error create dir:", err) } @@ -235,7 +235,7 @@ func (c *Cache) getRemPieces() []*Piece { } } else { // on preload clean - //TODO проверить + // TODO проверить if p.Size > 0 && !c.isIdInFileBE(ranges, id) { piecesRemove = append(piecesRemove, p) } @@ -288,7 +288,6 @@ func (c *Cache) getRemPieces() []*Piece { } func (c *Cache) isIdInFileBE(ranges []Range, id int) bool { - // keep 8/16 MB FileRangeNotDelete := int64(c.pieceLength) if FileRangeNotDelete < 8*1024*1024 { diff --git a/server/torr/storage/torrstor/diskpiece.go b/server/torr/storage/torrstor/diskpiece.go index b20de74..822a68e 100644 --- a/server/torr/storage/torrstor/diskpiece.go +++ b/server/torr/storage/torrstor/diskpiece.go @@ -35,7 +35,7 @@ func (p *DiskPiece) WriteAt(b []byte, off int64) (n int, err error) { p.mu.Lock() defer p.mu.Unlock() - ff, err := os.OpenFile(p.name, os.O_RDWR|os.O_CREATE, 0666) + ff, err := os.OpenFile(p.name, os.O_RDWR|os.O_CREATE, 0o666) if err != nil { log.TLogln("Error open file:", err) return 0, err @@ -55,7 +55,7 @@ func (p *DiskPiece) ReadAt(b []byte, off int64) (n int, err error) { p.mu.Lock() defer p.mu.Unlock() - ff, err := os.OpenFile(p.name, os.O_RDONLY, 0666) + ff, err := os.OpenFile(p.name, os.O_RDONLY, 0o666) if os.IsNotExist(err) { return 0, io.EOF } diff --git a/server/torr/storage/torrstor/reader.go b/server/torr/storage/torrstor/reader.go index 80afb8a..ffb2cf6 100644 --- a/server/torr/storage/torrstor/reader.go +++ b/server/torr/storage/torrstor/reader.go @@ -71,21 +71,21 @@ func (r *Reader) Read(p []byte) (n int, err error) { r.readerOn() n, err = r.Reader.Read(p) - //samsung tv fix xvid/divx + // samsung tv fix xvid/divx if r.offset == 0 && len(p) >= 192 { str := strings.ToLower(string(p[112:116])) if str == "xvid" || str == "divx" { - p[112] = 0x4D //M - p[113] = 0x50 //P - p[114] = 0x34 //4 - p[115] = 0x56 //V + p[112] = 0x4D // M + p[113] = 0x50 // P + p[114] = 0x34 // 4 + p[115] = 0x56 // V } str = strings.ToLower(string(p[188:192])) if str == "xvid" || str == "divx" { - p[188] = 0x4D //M - p[189] = 0x50 //P - p[190] = 0x34 //4 - p[191] = 0x56 //V + p[188] = 0x4D // M + p[189] = 0x50 // P + p[190] = 0x34 // 4 + p[191] = 0x56 // V } } diff --git a/server/torr/utils/webImageChecker.go b/server/torr/utils/webImageChecker.go index 11d83d4..3b457d7 100644 --- a/server/torr/utils/webImageChecker.go +++ b/server/torr/utils/webImageChecker.go @@ -5,6 +5,7 @@ import ( _ "image/jpeg" _ "image/png" "net/http" + "server/log" ) diff --git a/server/web/api/ffprobe.go b/server/web/api/ffprobe.go index 1ca2894..f8a3f33 100644 --- a/server/web/api/ffprobe.go +++ b/server/web/api/ffprobe.go @@ -8,6 +8,7 @@ import ( "os" "os/exec" "path/filepath" + "server/utils" "github.com/gin-gonic/gin" diff --git a/server/web/api/m3u.go b/server/web/api/m3u.go index afce025..076e492 100644 --- a/server/web/api/m3u.go +++ b/server/web/api/m3u.go @@ -100,10 +100,10 @@ func getM3uList(tor *state.TorrentStatus, host string, fromLast bool) string { fn = f.Path } m3u += "#EXTINF:0," + fn + "\n" - fileNamesakes := findFileNamesakes(tor.FileStats, f) //find external media with same name (audio/subtiles tracks) + fileNamesakes := findFileNamesakes(tor.FileStats, f) // find external media with same name (audio/subtiles tracks) if fileNamesakes != nil { - m3u += "#EXTVLCOPT:input-slave=" //include VLC option for external media - for _, namesake := range fileNamesakes { //include play-links to external media, with # splitter + m3u += "#EXTVLCOPT:input-slave=" // include VLC option for external media + for _, namesake := range fileNamesakes { // include play-links to external media, with # splitter sname := filepath.Base(namesake.Path) m3u += host + "/stream/" + url.PathEscape(sname) + "?link=" + tor.Hash + "&index=" + fmt.Sprint(namesake.Id) + "&play#" } @@ -118,12 +118,12 @@ func getM3uList(tor *state.TorrentStatus, host string, fromLast bool) string { } func findFileNamesakes(files []*state.TorrentFileStat, file *state.TorrentFileStat) []*state.TorrentFileStat { - //find files with the same name in torrent + // find files with the same name in torrent name := filepath.Base(strings.TrimSuffix(file.Path, filepath.Ext(file.Path))) var namesakes []*state.TorrentFileStat for _, f := range files { - if strings.Contains(f.Path, name) { //external tracks always include name of videofile - if f != file { //exclude itself + if strings.Contains(f.Path, name) { // external tracks always include name of videofile + if f != file { // exclude itself namesakes = append(namesakes, f) } } diff --git a/server/web/api/settings.go b/server/web/api/settings.go index 42ae959..6edf6c1 100644 --- a/server/web/api/settings.go +++ b/server/web/api/settings.go @@ -2,6 +2,7 @@ package api import ( "net/http" + "server/rutor" "github.com/gin-gonic/gin" diff --git a/server/web/api/stream.go b/server/web/api/stream.go index 9c5f39e..b33f22b 100644 --- a/server/web/api/stream.go +++ b/server/web/api/stream.go @@ -211,5 +211,4 @@ func streamNoAuth(c *gin.Context) { } c.Header("WWW-Authenticate", "Basic realm=Authorization Required") c.AbortWithStatus(http.StatusUnauthorized) - } diff --git a/server/web/blocker/iplist.go b/server/web/blocker/iplist.go index 105fb43..690a7d0 100644 --- a/server/web/blocker/iplist.go +++ b/server/web/blocker/iplist.go @@ -68,7 +68,7 @@ func (ipl *IPList) Lookup(ip net.IP) (r Range, ok bool) { // Return the range the given IP is in. Returns nil if no range is found. func (ipl *IPList) lookup(ip net.IP) (Range, bool) { var rng Range - var ok = false + ok := false for _, r := range ipl.ranges { ok = bytes.Compare(r.First, ip) <= 0 && bytes.Compare(ip, r.Last) <= 0 if ok { diff --git a/server/web/server.go b/server/web/server.go index e3f3cc1..c7de238 100644 --- a/server/web/server.go +++ b/server/web/server.go @@ -2,9 +2,10 @@ package web import ( "net" - "server/rutor" "sort" + "server/rutor" + "github.com/gin-contrib/cors" "github.com/gin-contrib/location" "github.com/gin-gonic/gin" @@ -42,11 +43,11 @@ func Start(port string) { gin.SetMode(gin.ReleaseMode) - //corsCfg := cors.DefaultConfig() - //corsCfg.AllowAllOrigins = true - //corsCfg.AllowHeaders = []string{"*"} - //corsCfg.AllowMethods = []string{"*"} - //corsCfg.AllowPrivateNetwork = true + // corsCfg := cors.DefaultConfig() + // corsCfg.AllowAllOrigins = true + // corsCfg.AllowHeaders = []string{"*"} + // corsCfg.AllowMethods = []string{"*"} + // corsCfg.AllowPrivateNetwork = true corsCfg := cors.DefaultConfig() corsCfg.AllowAllOrigins = true corsCfg.AllowHeaders = []string{"Origin", "Content-Length", "Content-Type", "X-Requested-With", "Accept", "Authorization"} From 31e8e924e86330ffa9bc023de4af38664e5b27f0 Mon Sep 17 00:00:00 2001 From: nikk gitanes Date: Sun, 19 Feb 2023 21:38:18 +0300 Subject: [PATCH 18/18] temp timer test --- server/torr/torrent.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/torr/torrent.go b/server/torr/torrent.go index 7be01c4..e6d783c 100644 --- a/server/torr/torrent.go +++ b/server/torr/torrent.go @@ -135,13 +135,14 @@ func (t *Torrent) AddExpiredTime(duration time.Duration) { } func (t *Torrent) watch() { - t.progressTicker = time.NewTicker(time.Second) + t.progressTicker = time.NewTicker(time.Second / 2) defer t.progressTicker.Stop() for { select { case <-t.progressTicker.C: go t.progressEvent() + time.Sleep(time.Second / 2) // FIXME! TEMP TEST TIMER case <-t.closed: return }