aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRblSb <msrblsb@gmail.com>2021-08-20 15:08:35 +0300
committerRblSb <msrblsb@gmail.com>2021-08-20 15:08:35 +0300
commit34f50a628249cccfd746d05a3ff1bfaaba0efd0b (patch)
tree4e5c19ab69d1d905c763e46ee77feaa284d91447
parentf2d28c726ba46f03716ed37667d0e94c60ad3459 (diff)
Fix subs for linux chrome
With trackEl.srclang = "en"
-rw-r--r--build/server.js6
-rw-r--r--res/client.js106
-rw-r--r--src/client/Main.hx2
-rw-r--r--src/client/players/RawSubs.hx25
-rw-r--r--src/client/players/Youtube.hx2
-rw-r--r--src/server/HttpServer.hx6
6 files changed, 90 insertions, 57 deletions
diff --git a/build/server.js b/build/server.js
index 93dec79..5f39892 100644
--- a/build/server.js
+++ b/build/server.js
@@ -3597,7 +3597,7 @@ server_HttpServer.serveFiles = function(req,res) {
}
if(StringTools.startsWith(url,"/proxy")) {
if(!server_HttpServer.proxyUrl(req,res)) {
- res.end("Cannot proxy " + req.url);
+ res.end("Proxy error: " + req.url);
}
return;
}
@@ -3690,7 +3690,7 @@ server_HttpServer.proxyUrl = function(req,res) {
return false;
});
if(proxy2 == null) {
- res.end("Proxy error for redirected " + url);
+ res.end("Proxy error: multiple redirects for url " + url);
return true;
}
req.pipe(proxy2,{ end : true});
@@ -3721,7 +3721,7 @@ server_HttpServer.proxyRequest = function(url,req,res,fn) {
proxyReq.pipe(res,{ end : true});
});
proxy.on("error",function(err) {
- res.end("Proxy error for " + url1.href);
+ res.end("Proxy error: " + url1.href);
});
return proxy;
};
diff --git a/res/client.js b/res/client.js
index bad1a65..6347346 100644
--- a/res/client.js
+++ b/res/client.js
@@ -1105,6 +1105,41 @@ client_Main.__name__ = true;
client_Main.main = function() {
new client_Main();
};
+client_Main.serverMessage = function(type,text,isText) {
+ if(isText == null) {
+ isText = true;
+ }
+ var msgBuf = window.document.querySelector("#messagebuffer");
+ var div = window.document.createElement("div");
+ var time = HxOverrides.dateStr(new Date()).split(" ")[1];
+ switch(type) {
+ case 1:
+ div.className = "server-msg-reconnect";
+ div.textContent = Lang.get("msgConnected");
+ break;
+ case 2:
+ div.className = "server-msg-disconnect";
+ div.textContent = Lang.get("msgDisconnected");
+ break;
+ case 3:
+ div.className = "server-whisper";
+ div.textContent = time + text + " " + Lang.get("entered");
+ break;
+ case 4:
+ div.className = "server-whisper";
+ div.innerHTML = "<div class=\"head\">\n\t\t\t\t\t<div class=\"server-whisper\"></div>\n\t\t\t\t\t<span class=\"timestamp\">" + time + "</span>\n\t\t\t\t</div>";
+ var textDiv = div.querySelector(".server-whisper");
+ if(isText) {
+ textDiv.textContent = text;
+ } else {
+ textDiv.innerHTML = text;
+ }
+ break;
+ default:
+ }
+ msgBuf.appendChild(div);
+ msgBuf.scrollTop = msgBuf.scrollHeight;
+};
client_Main.prototype = {
settingsPatcher: function(data,version) {
switch(version) {
@@ -1142,12 +1177,12 @@ client_Main.prototype = {
this.ws = new WebSocket("" + protocol + "//" + this.host + colonPort + path);
this.ws.onmessage = $bind(this,this.onMessage);
this.ws.onopen = function() {
- _gthis.serverMessage(1);
+ client_Main.serverMessage(1);
return _gthis.isConnected = true;
};
this.ws.onclose = function() {
if(_gthis.isConnected) {
- _gthis.serverMessage(2);
+ client_Main.serverMessage(2);
}
_gthis.isConnected = false;
_gthis.player.pause();
@@ -1293,7 +1328,7 @@ client_Main.prototype = {
}
this.player.getVideoData({ url : url, atEnd : atEnd},function(data) {
if(data.duration == 0) {
- _gthis.serverMessage(4,Lang.get("addVideoError"));
+ client_Main.serverMessage(4,Lang.get("addVideoError"));
return;
}
if(data.title == null) {
@@ -1322,7 +1357,7 @@ client_Main.prototype = {
var isTemp = window.document.querySelector("#customembed").querySelector(".add-temp").checked;
this.player.getIframeData({ url : iframe, atEnd : atEnd},function(data) {
if(data.duration == 0) {
- _gthis.serverMessage(4,Lang.get("addVideoError"));
+ client_Main.serverMessage(4,Lang.get("addVideoError"));
return;
}
if(title.length > 0) {
@@ -1495,7 +1530,7 @@ client_Main.prototype = {
break;
case "ServerMessage":
var id = data.serverMessage.textId;
- this.serverMessage(4,id == "usernameError" ? StringTools.replace(Lang.get(id),"$MAX","" + this.config.maxLoginLength) : Lang.get(id));
+ client_Main.serverMessage(4,id == "usernameError" ? StringTools.replace(Lang.get(id),"$MAX","" + this.config.maxLoginLength) : Lang.get(id));
break;
case "SetLeader":
ClientTools.setLeader(this.clients,data.setLeader.clientName);
@@ -1581,7 +1616,7 @@ client_Main.prototype = {
this.setLeaderButton((this.personal.group & 4) != 0);
this.setPlaylistLock(connected.isPlaylistOpen);
this.clearChat();
- this.serverMessage(1);
+ client_Main.serverMessage(1);
var _g = 0;
var _g1 = connected.history;
while(_g < _g1.length) {
@@ -1720,41 +1755,6 @@ client_Main.prototype = {
}
this.ws.send(JSON.stringify(data));
}
- ,serverMessage: function(type,text,isText) {
- if(isText == null) {
- isText = true;
- }
- var msgBuf = window.document.querySelector("#messagebuffer");
- var div = window.document.createElement("div");
- var time = HxOverrides.dateStr(new Date()).split(" ")[1];
- switch(type) {
- case 1:
- div.className = "server-msg-reconnect";
- div.textContent = Lang.get("msgConnected");
- break;
- case 2:
- div.className = "server-msg-disconnect";
- div.textContent = Lang.get("msgDisconnected");
- break;
- case 3:
- div.className = "server-whisper";
- div.textContent = time + text + " " + Lang.get("entered");
- break;
- case 4:
- div.className = "server-whisper";
- div.innerHTML = "<div class=\"head\">\n\t\t\t\t\t<div class=\"server-whisper\"></div>\n\t\t\t\t\t<span class=\"timestamp\">" + time + "</span>\n\t\t\t\t</div>";
- var textDiv = div.querySelector(".server-whisper");
- if(isText) {
- textDiv.textContent = text;
- } else {
- textDiv.innerHTML = text;
- }
- break;
- default:
- }
- msgBuf.appendChild(div);
- msgBuf.scrollTop = msgBuf.scrollHeight;
- }
,updateUserList: function() {
window.document.querySelector("#usercount").textContent = this.clients.length + " " + Lang.get("online");
window.document.title = this.getPageTitle();
@@ -2826,6 +2826,10 @@ client_players_RawSubs.loadSubs = function(item,video) {
}
var url = encodeURI(item.subs);
if(!StringTools.startsWith(url,"/")) {
+ var protocol = $global.location.protocol;
+ if(!StringTools.startsWith(url,"http")) {
+ url = "" + protocol + "//" + url;
+ }
url = "/proxy?url=" + url;
}
switch(ext) {
@@ -2844,6 +2848,9 @@ client_players_RawSubs.parseSrt = function(video,url) {
window.fetch(url).then(function(response) {
return response.text();
}).then(function(text) {
+ if(client_players_RawSubs.isProxyError(text)) {
+ return;
+ }
var subs = [];
var blocks = StringTools.replace(text,"\r\n","\n").split("\n\n");
var _g = 0;
@@ -2875,6 +2882,9 @@ client_players_RawSubs.parseAss = function(video,url) {
window.fetch(url).then(function(response) {
return response.text();
}).then(function(text) {
+ if(client_players_RawSubs.isProxyError(text)) {
+ return;
+ }
var subs = [];
var lines = StringTools.replace(text,"\r\n","\n").split("\n");
var matchFormat = new EReg("^Format:","");
@@ -2965,12 +2975,20 @@ client_players_RawSubs.convertAssTime = function(time) {
var ms = Std.parseInt(client_players_RawSubs.assTimeStamp.matched(4)) * 10;
return "" + StringTools.lpad("" + h,"0",2) + ":" + StringTools.lpad("" + m,"0",2) + ":" + StringTools.lpad("" + s,"0",2) + "." + HxOverrides.substr(StringTools.lpad("" + ms,"0",3),0,3);
};
+client_players_RawSubs.isProxyError = function(text) {
+ if(StringTools.startsWith(text,"Proxy error:")) {
+ client_Main.serverMessage(4,"Failed to add subs: proxy error");
+ haxe_Log.trace("Failed to add subs: " + text,{ fileName : "src/client/players/RawSubs.hx", lineNumber : 191, className : "client.players.RawSubs", methodName : "isProxyError"});
+ return true;
+ }
+ return false;
+};
client_players_RawSubs.onParsed = function(video,name,dataUrl) {
var trackEl = window.document.createElement("track");
+ trackEl.kind = "captions";
trackEl.label = name;
- trackEl.kind = "subtitles";
+ trackEl.srclang = "en";
trackEl.src = dataUrl;
- trackEl.default = true;
video.appendChild(trackEl);
trackEl.track.mode = "showing";
};
@@ -3125,7 +3143,7 @@ client_players_Youtube.prototype = {
loadJson(dataUrl);
}
,youtubeApiError: function(error) {
- this.main.serverMessage(4,"Error " + error.code + ": " + error.message,false);
+ client_Main.serverMessage(4,"Error " + error.code + ": " + error.message,false);
}
,getRemoteDataFallback: function(url,callback) {
var _gthis = this;
diff --git a/src/client/Main.hx b/src/client/Main.hx
index 28fefe8..bfbe97e 100644
--- a/src/client/Main.hx
+++ b/src/client/Main.hx
@@ -692,7 +692,7 @@ class Main {
ws.send(Json.stringify(data));
}
- public function serverMessage(type:Int, ?text:String, isText = true):Void {
+ public static function serverMessage(type:Int, ?text:String, isText = true):Void {
final msgBuf = ge("#messagebuffer");
final div = document.createDivElement();
final time = Date.now().toString().split(" ")[1];
diff --git a/src/client/players/RawSubs.hx b/src/client/players/RawSubs.hx
index aa77bf8..eede788 100644
--- a/src/client/players/RawSubs.hx
+++ b/src/client/players/RawSubs.hx
@@ -5,6 +5,7 @@ import haxe.crypto.Base64;
import haxe.io.Bytes;
import js.Browser.document;
import js.Browser.window;
+import js.Browser;
import js.html.VideoElement;
using StringTools;
@@ -24,6 +25,8 @@ class RawSubs {
if (JsApi.hasSubtitleSupport(ext)) return;
var url = encodeURI(item.subs);
if (!url.startsWith("/")) {
+ final protocol = Browser.location.protocol;
+ if (!url.startsWith("http")) url = '$protocol//$url';
url = '/proxy?url=$url';
}
@@ -42,6 +45,7 @@ class RawSubs {
window.fetch(url).then(response -> {
return response.text();
}).then(text -> {
+ if (isProxyError(text)) return;
final subs:Array<{
counter:String,
time:String,
@@ -76,6 +80,7 @@ class RawSubs {
window.fetch(url).then(response -> {
return response.text();
}).then(text -> {
+ if (isProxyError(text)) return;
final subs:Array<{
counter:Int,
start:String,
@@ -142,7 +147,6 @@ class RawSubs {
data += '${sub.start} --> ${sub.end}\n';
data += '${sub.text}\n\n';
}
- // trace(data);
final textBase64 = "data:text/plain;base64,";
final url = textBase64 + Base64.encode(Bytes.ofString(data));
onParsed(video, "ASS subtitles", url);
@@ -173,19 +177,30 @@ class RawSubs {
}
static function parseVtt(video:VideoElement, url:String):Void {
- window.fetch(url).then(response -> response.text()).then(data -> {
+ window.fetch(url).then(response -> response.text()).then(text -> {
+ if (isProxyError(text)) return;
final textBase64 = "data:text/plain;base64,";
- final url = textBase64 + Base64.encode(Bytes.ofString(data));
+ final url = textBase64 + Base64.encode(Bytes.ofString(text));
onParsed(video, "VTT subtitles", url);
});
}
+ static function isProxyError(text:String):Bool {
+ if (text.startsWith("Proxy error:")) {
+ Main.serverMessage(4, 'Failed to add subs: proxy error');
+ trace('Failed to add subs: $text');
+ return true;
+ }
+ return false;
+ }
+
static function onParsed(video:VideoElement, name:String, dataUrl:String) {
final trackEl = document.createTrackElement();
+ trackEl.kind = "captions";
trackEl.label = name;
- trackEl.kind = "subtitles";
+ trackEl.srclang = "en";
trackEl.src = dataUrl;
- trackEl.default_ = true;
+ // trackEl.default_ = true;
video.appendChild(trackEl);
final track = trackEl.track;
track.mode = SHOWING;
diff --git a/src/client/players/Youtube.hx b/src/client/players/Youtube.hx
index d4db8ed..23b2439 100644
--- a/src/client/players/Youtube.hx
+++ b/src/client/players/Youtube.hx
@@ -171,7 +171,7 @@ class Youtube implements IPlayer {
function youtubeApiError(error:Dynamic):Void {
final code:Int = error.code;
final msg:String = error.message;
- main.serverMessage(4, 'Error $code: $msg', false);
+ Main.serverMessage(4, 'Error $code: $msg', false);
}
function getRemoteDataFallback(url:String, callback:(data:VideoData) -> Void):Void {
diff --git a/src/server/HttpServer.hx b/src/server/HttpServer.hx
index 1198ca1..0edf4e3 100644
--- a/src/server/HttpServer.hx
+++ b/src/server/HttpServer.hx
@@ -74,7 +74,7 @@ class HttpServer {
}
if (url.startsWith("/proxy")) {
- if (!proxyUrl(req, res)) res.end('Cannot proxy ${req.url}');
+ if (!proxyUrl(req, res)) res.end('Proxy error: ${req.url}');
return;
}
@@ -167,7 +167,7 @@ class HttpServer {
if (url == null) return false;
final proxy2 = proxyRequest(url, req, res, proxyReq -> false);
if (proxy2 == null) {
- res.end('Proxy error for redirected $url');
+ res.end('Proxy error: multiple redirects for url $url');
return true;
}
req.pipe(proxy2, {end: true});
@@ -200,7 +200,7 @@ class HttpServer {
proxyReq.pipe(res, {end: true});
});
proxy.on("error", err -> {
- res.end('Proxy error for ${url.href}');
+ res.end('Proxy error: ${url.href}');
});
return proxy;
}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage