mirror of
https://github.com/FrankerFaceZ/FrankerFaceZ.git
synced 2025-08-09 15:50:53 +00:00
Merge branch 'master' into patch-4
This commit is contained in:
commit
bd1051b4c1
11 changed files with 96 additions and 39 deletions
|
@ -1,3 +1,19 @@
|
||||||
|
<div class="list-header">3.5.524 <time datetime="2017-09-15">(2017-09-15)</time></div>
|
||||||
|
<ul class="chat-menu-content menu-side-padding">
|
||||||
|
<li>Fixed: Tooltips for global emotes not saying where they're from.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="list-header">3.5.523 <time datetime="2017-09-15">(2017-09-15)</time></div>
|
||||||
|
<ul class="chat-menu-content menu-side-padding">
|
||||||
|
<li>Added: Socket server status to the Debug menu.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="list-header">3.5.522 <time datetime="2017-09-15">(2017-09-15)</time></div>
|
||||||
|
<ul class="chat-menu-content menu-side-padding">
|
||||||
|
<li>Fixed: Emote data should be loading properly now with the socket servers under control.</li>
|
||||||
|
<li>Fixed: Update the emoji parsing regular expression.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<div class="list-header">3.5.521 <time datetime="2017-09-15">(2017-09-15)</time></div>
|
<div class="list-header">3.5.521 <time datetime="2017-09-15">(2017-09-15)</time></div>
|
||||||
<ul class="chat-menu-content menu-side-padding">
|
<ul class="chat-menu-content menu-side-padding">
|
||||||
<li>Changed: Hopefully a more resilient way of grabbing emote data.</li>
|
<li>Changed: Hopefully a more resilient way of grabbing emote data.</li>
|
||||||
|
@ -55,16 +71,5 @@
|
||||||
<li>Fixed: Dark CSS tweaks for the dashboard.</li>
|
<li>Fixed: Dark CSS tweaks for the dashboard.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="list-header">3.5.511 <time datetime="2017-08-12">(2017-08-12)</time></div>
|
|
||||||
<ul class="chat-menu-content menu-side-padding">
|
|
||||||
<li>Fixed: Bits rendering after Twitch removed the Ember bits-tags service.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="list-header">3.5.510 <time datetime="2017-08-10">(2017-08-10)</time></div>
|
|
||||||
<ul class="chat-menu-content menu-side-padding">
|
|
||||||
<li>Added: <code>Chat Appearance > Enable Custom Badge Images</code> setting that can be used to disable custom mod badges for channels.</li>
|
|
||||||
<li>Fixed: Re-sub messages not showing in channels without custom sub badges and with <code>Chat Appearance > Old-Style Subscriber Notices</code> enabled.</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="list-header" id="ffz-old-news-button"><a href="#">View Older</a></div>
|
<div class="list-header" id="ffz-old-news-button"><a href="#">View Older</a></div>
|
||||||
<div id="ffz-old-news"></div>
|
<div id="ffz-old-news"></div>
|
|
@ -1,3 +1,14 @@
|
||||||
|
<div class="list-header">3.5.511 <time datetime="2017-08-12">(2017-08-12)</time></div>
|
||||||
|
<ul class="chat-menu-content menu-side-padding">
|
||||||
|
<li>Fixed: Bits rendering after Twitch removed the Ember bits-tags service.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="list-header">3.5.510 <time datetime="2017-08-10">(2017-08-10)</time></div>
|
||||||
|
<ul class="chat-menu-content menu-side-padding">
|
||||||
|
<li>Added: <code>Chat Appearance > Enable Custom Badge Images</code> setting that can be used to disable custom mod badges for channels.</li>
|
||||||
|
<li>Fixed: Re-sub messages not showing in channels without custom sub badges and with <code>Chat Appearance > Old-Style Subscriber Notices</code> enabled.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<div class="list-header">3.5.509 <time datetime="2017-08-07">(2017-08-07)</time></div>
|
<div class="list-header">3.5.509 <time datetime="2017-08-07">(2017-08-07)</time></div>
|
||||||
<ul class="chat-menu-content menu-side-padding">
|
<ul class="chat-menu-content menu-side-padding">
|
||||||
<li>API Changed: Throw the <code>room-recent-highlights</code> event even if the Recent Highlights feature is disabled.</li>
|
<li>API Changed: Throw the <code>room-recent-highlights</code> event even if the Recent Highlights feature is disabled.</li>
|
||||||
|
|
|
@ -140,7 +140,14 @@ func (backend *backendInfo) SendRemoteCommand(remoteCommand, data string, auth A
|
||||||
if resp.StatusCode == 401 {
|
if resp.StatusCode == 401 {
|
||||||
return "", ErrAuthorizationNeeded
|
return "", ErrAuthorizationNeeded
|
||||||
} else if resp.StatusCode < 200 || resp.StatusCode > 299 { // any non-2xx
|
} else if resp.StatusCode < 200 || resp.StatusCode > 299 { // any non-2xx
|
||||||
if resp.Header.Get("Content-Type") == "application/json" {
|
// If the Content-Type header includes a charset, ignore it.
|
||||||
|
typeStr := resp.Header.Get("Content-Type")
|
||||||
|
splitIdx := strings.IndexRune(typeStr, ';')
|
||||||
|
if ( splitIdx != -1 ) {
|
||||||
|
typeStr = strings.TrimSpace(typeStr[0:splitIdx])
|
||||||
|
}
|
||||||
|
|
||||||
|
if typeStr == "application/json" {
|
||||||
var err2 ErrForwardedFromBackend
|
var err2 ErrForwardedFromBackend
|
||||||
err := json.Unmarshal(respBytes, &err2.JSONError)
|
err := json.Unmarshal(respBytes, &err2.JSONError)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -108,31 +108,20 @@ func callHandler(handler CommandHandler, conn *websocket.Conn, client *ClientInf
|
||||||
return handler(conn, client, cmsg)
|
return handler(conn, client, cmsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
var DebugHello = ""
|
|
||||||
|
|
||||||
// C2SHello implements the `hello` C2S Command.
|
// C2SHello implements the `hello` C2S Command.
|
||||||
// It calls SubscribeGlobal() and SubscribeDefaults() with the client, and fills out ClientInfo.Version and ClientInfo.ClientID.
|
// It calls SubscribeGlobal() and SubscribeDefaults() with the client, and fills out ClientInfo.Version and ClientInfo.ClientID.
|
||||||
func C2SHello(_ *websocket.Conn, client *ClientInfo, msg ClientMessage) (_ ClientMessage, err error) {
|
func C2SHello(_ *websocket.Conn, client *ClientInfo, msg ClientMessage) (_ ClientMessage, err error) {
|
||||||
ary, ok := msg.Arguments.([]interface{})
|
ary, ok := msg.Arguments.([]interface{})
|
||||||
if !ok {
|
if !ok {
|
||||||
if DebugHello != "" {
|
|
||||||
fmt.Println("Hello error: was not an array:", ary)
|
|
||||||
}
|
|
||||||
err = ErrExpectedTwoStrings
|
err = ErrExpectedTwoStrings
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if len(ary) != 2 {
|
if len(ary) != 2 {
|
||||||
if DebugHello != "" {
|
|
||||||
fmt.Println("Hello error: array wrong length:", ary)
|
|
||||||
}
|
|
||||||
err = ErrExpectedTwoStrings
|
err = ErrExpectedTwoStrings
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
version, ok := ary[0].(string)
|
version, ok := ary[0].(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
if DebugHello != "" {
|
|
||||||
fmt.Println("Hello error: version not a string:", ary)
|
|
||||||
}
|
|
||||||
err = ErrExpectedTwoStrings
|
err = ErrExpectedTwoStrings
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -149,9 +138,6 @@ func C2SHello(_ *websocket.Conn, client *ClientInfo, msg ClientMessage) (_ Clien
|
||||||
} else if ary[1] == nil {
|
} else if ary[1] == nil {
|
||||||
clientID = uuid.NewV4()
|
clientID = uuid.NewV4()
|
||||||
} else {
|
} else {
|
||||||
if DebugHello != "" {
|
|
||||||
fmt.Println("Hello error: client id not acceptable:", ary)
|
|
||||||
}
|
|
||||||
err = ErrExpectedTwoStrings
|
err = ErrExpectedTwoStrings
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -528,6 +528,7 @@ func UnmarshalClientMessage(data []byte, _ int, v interface{}) (err error) {
|
||||||
if spaceIdx == -1 {
|
if spaceIdx == -1 {
|
||||||
out.Command = CommandPool.InternCommand(dataStr)
|
out.Command = CommandPool.InternCommand(dataStr)
|
||||||
out.Arguments = nil
|
out.Arguments = nil
|
||||||
|
out.origArguments = ""
|
||||||
return nil
|
return nil
|
||||||
} else {
|
} else {
|
||||||
out.Command = CommandPool.InternCommand(dataStr[:spaceIdx])
|
out.Command = CommandPool.InternCommand(dataStr[:spaceIdx])
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -61,7 +61,7 @@ FFZ.channel_metadata = {};
|
||||||
|
|
||||||
// Version
|
// Version
|
||||||
var VER = FFZ.version_info = {
|
var VER = FFZ.version_info = {
|
||||||
major: 3, minor: 5, revision: 521,
|
major: 3, minor: 5, revision: 524,
|
||||||
toString: function() {
|
toString: function() {
|
||||||
return [VER.major, VER.minor, VER.revision].join(".") + (VER.extra || "");
|
return [VER.major, VER.minor, VER.revision].join(".") + (VER.extra || "");
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,6 +165,7 @@ FFZ.prototype.ws_create = function() {
|
||||||
|
|
||||||
ws.onopen = function(e) {
|
ws.onopen = function(e) {
|
||||||
f._ws_open = true;
|
f._ws_open = true;
|
||||||
|
f._ws_authenticated = false;
|
||||||
f._ws_delay = 0;
|
f._ws_delay = 0;
|
||||||
f.log("Socket Connected.");
|
f.log("Socket Connected.");
|
||||||
|
|
||||||
|
|
|
@ -399,8 +399,14 @@ FFZ.prototype.get_twitch_set_for = function(emote_id, callback) {
|
||||||
|
|
||||||
this._twitch_emote_to_set[emote_id] = null;
|
this._twitch_emote_to_set[emote_id] = null;
|
||||||
var f = this,
|
var f = this,
|
||||||
use_ss = this._ws_open && Math.random() > .5,
|
use_ss = this._ws_open,
|
||||||
|
timer = null,
|
||||||
cb = function(success, data) {
|
cb = function(success, data) {
|
||||||
|
if ( timer ) {
|
||||||
|
clearTimeout(timer);
|
||||||
|
timer = null;
|
||||||
|
}
|
||||||
|
|
||||||
if ( ! success ) {
|
if ( ! success ) {
|
||||||
f._twitch_emote_to_set[emote_id] = UNSET;
|
f._twitch_emote_to_set[emote_id] = UNSET;
|
||||||
return;
|
return;
|
||||||
|
@ -417,9 +423,10 @@ FFZ.prototype.get_twitch_set_for = function(emote_id, callback) {
|
||||||
callback(set_id);
|
callback(set_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
if ( use_ss )
|
if ( use_ss ) {
|
||||||
this.ws_send("get_emote", emote_id, cb);
|
this.ws_send("get_emote", emote_id, cb);
|
||||||
else
|
timer = setTimeout(cb.bind(this, false, null), 1000);
|
||||||
|
} else
|
||||||
fetch(constants.API_SERVER = "ed/emote/" + emote_id)
|
fetch(constants.API_SERVER = "ed/emote/" + emote_id)
|
||||||
.then(function(resp) {
|
.then(function(resp) {
|
||||||
if ( ! resp.ok )
|
if ( ! resp.ok )
|
||||||
|
@ -428,6 +435,8 @@ FFZ.prototype.get_twitch_set_for = function(emote_id, callback) {
|
||||||
cb(true, data);
|
cb(true, data);
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -444,8 +453,14 @@ FFZ.prototype.get_twitch_set = function(set_id, callback) {
|
||||||
this._twitch_set_to_channel[set_id] = null;
|
this._twitch_set_to_channel[set_id] = null;
|
||||||
|
|
||||||
var f = this,
|
var f = this,
|
||||||
use_ss = this._ws_open && Math.random() > .5,
|
use_ss = this._ws_open,
|
||||||
|
timer = null,
|
||||||
cb = function(success, data) {
|
cb = function(success, data) {
|
||||||
|
if ( timer ) {
|
||||||
|
clearTimeout(timer);
|
||||||
|
timer = null;
|
||||||
|
}
|
||||||
|
|
||||||
if ( ! success ) {
|
if ( ! success ) {
|
||||||
f._twitch_set_to_channel[set_id] = UNSET;
|
f._twitch_set_to_channel[set_id] = UNSET;
|
||||||
return;
|
return;
|
||||||
|
@ -456,9 +471,10 @@ FFZ.prototype.get_twitch_set = function(set_id, callback) {
|
||||||
callback(data || null);
|
callback(data || null);
|
||||||
};
|
};
|
||||||
|
|
||||||
if ( use_ss )
|
if ( use_ss ) {
|
||||||
this.ws_send("get_emote_set", set_id, cb);
|
this.ws_send("get_emote_set", set_id, cb);
|
||||||
else
|
timer = setTimeout(cb.bind(this, false, null), 1000);
|
||||||
|
} else
|
||||||
fetch(constants.API_SERVER + "ed/set/" + set_id)
|
fetch(constants.API_SERVER + "ed/set/" + set_id)
|
||||||
.then(function(resp) {
|
.then(function(resp) {
|
||||||
if ( ! resp.ok )
|
if ( ! resp.ok )
|
||||||
|
@ -467,6 +483,8 @@ FFZ.prototype.get_twitch_set = function(set_id, callback) {
|
||||||
cb(true, data);
|
cb(true, data);
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -568,8 +586,8 @@ FFZ.prototype.render_tooltip = function(el) {
|
||||||
|
|
||||||
emote_id = this.getAttribute('data-emote');
|
emote_id = this.getAttribute('data-emote');
|
||||||
if ( emote_id ) {
|
if ( emote_id ) {
|
||||||
set_id = f._twitch_emote_to_set[emote_id];
|
set_id = f.get_twitch_set_for(emote_id);
|
||||||
var set_data = set_id && f.get_twitch_set(set_id);
|
var set_data = set_id !== null && f.get_twitch_set(set_id);
|
||||||
emote_set = set_data && set_data.c_name;
|
emote_set = set_data && set_data.c_name;
|
||||||
|
|
||||||
var set_type = "Channel",
|
var set_type = "Channel",
|
||||||
|
|
|
@ -115,12 +115,38 @@ FFZ.debugging_blocks = {
|
||||||
return [
|
return [
|
||||||
['Client ID', localStorage.ffzClientId || '<i>not set</i>'],
|
['Client ID', localStorage.ffzClientId || '<i>not set</i>'],
|
||||||
['Socket Server', this._ws_sock && this._ws_sock.url || '<i>disconnected</i>'],
|
['Socket Server', this._ws_sock && this._ws_sock.url || '<i>disconnected</i>'],
|
||||||
|
['Authenticated', this._ws_open && this._ws_authenticated],
|
||||||
['Server Ping', last_ping || '<i>unknown</i>'],
|
['Server Ping', last_ping || '<i>unknown</i>'],
|
||||||
['Time Offset', offset || '<i>unknown</i>']
|
['Time Offset', offset || '<i>unknown</i>']
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
socket_servers: {
|
||||||
|
order: 3,
|
||||||
|
title: 'WS Server Status',
|
||||||
|
refresh: 5000,
|
||||||
|
type: 'list',
|
||||||
|
|
||||||
|
render: function() {
|
||||||
|
var f = this;
|
||||||
|
return new Promise(function(succeed, fail) {
|
||||||
|
f.ws_send("get_server_status", null, function(s,data) {
|
||||||
|
if ( ! s )
|
||||||
|
return fail();
|
||||||
|
|
||||||
|
f._ws_authenticated = data['authenticated'];
|
||||||
|
var output = [];
|
||||||
|
for(var key in data)
|
||||||
|
if ( key !== 'authenticated' )
|
||||||
|
output.push([key, data[key]]);
|
||||||
|
|
||||||
|
succeed(output);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
logviewer: {
|
logviewer: {
|
||||||
order: 4,
|
order: 4,
|
||||||
title: "Logviewer Status",
|
title: "Logviewer Status",
|
||||||
|
|
|
@ -103,9 +103,11 @@ FFZ.prototype.modify_user_emotes = function(service) {
|
||||||
for(var set_id in emotes) {
|
for(var set_id in emotes) {
|
||||||
f.get_twitch_set(set_id);
|
f.get_twitch_set(set_id);
|
||||||
var es = emotes[set_id] || [],
|
var es = emotes[set_id] || [],
|
||||||
esl = es.length;
|
esl = es.length,
|
||||||
|
sid = typeof set_id === "number" ? set_id : parseInt(set_id);
|
||||||
|
|
||||||
for(var i=0; i < esl; i++)
|
for(var i=0; i < esl; i++)
|
||||||
f._twitch_emote_to_set[es[i].id] = set_id;
|
f._twitch_emote_to_set[es[i].id] = sid;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( f._inputv )
|
if ( f._inputv )
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue