diff --git a/BetterDiscordApp/src/modules/utils.js b/BetterDiscordApp/src/modules/utils.js index 79a7372..ba5caac 100644 --- a/BetterDiscordApp/src/modules/utils.js +++ b/BetterDiscordApp/src/modules/utils.js @@ -483,7 +483,7 @@ export default class Utils { } function removeDa(className){ - if(!className)return className + if(typeof className !== "string" || !className)return className return className.split(" ").filter(e => !e.startsWith("da-")).join(" ") } diff --git a/BetterDiscordApp/src/ui/addoncard.jsx b/BetterDiscordApp/src/ui/addoncard.jsx index 830ff61..2f03355 100644 --- a/BetterDiscordApp/src/ui/addoncard.jsx +++ b/BetterDiscordApp/src/ui/addoncard.jsx @@ -52,9 +52,6 @@ export default class V2C_PluginCard extends BDV2.reactComponent { componentDidUpdate() { if (!this.state.settings) return; - if (typeof this.settingsPanel === "object") { - this.refs.settingspanel.appendChild(this.settingsPanel); - } if (!settingsCookie["fork-ps-3"]) return; setImmediate(() => { @@ -97,15 +94,28 @@ export default class V2C_PluginCard extends BDV2.reactComponent { try { this.settingsPanel = this.props.addon.plugin.getSettingsPanel(); } catch (err) { Utils.err("Plugins", "Unable to get settings panel for " + this.name + ".", err); } + let settingPanel + if(typeof this.settingsPanel === "object"){ + if(this.settingsPanel instanceof Node){ + settingPanel = BVD2.react.createElement("div", {id: `plugin-settings-${this.name}`, className: "plugin-settings", ref: (elem) => { + elem.appendChild(this.settingsPanel) + }}) + }else{ + settingPanel = BDV2.react.createElement("div", {id: `plugin-settings-${this.name}`, className: "plugin-settings"}, + this.settingsPanel) + } + }else if(typeof this.settingsPanel === "string"){ + settingPanel = BVD2.react.createElement("div", {id: `plugin-settings-${this.name}`, className: "plugin-settings", dangerouslySetInnerHTML: {__html: this.settingsPanel}}) + } return BDV2.react.createElement("div", {className: "bd-card bd-addon-card settings-open ui-switch-item", ref: "cardNode"}, BDV2.react.createElement("div", {style: {"float": "right", "cursor": "pointer"}, onClick: () => { - this.refs.settingspanel.innerHTML = ""; - this.setState({settings: false}); + this.setState({ + settings: false + }); }}, BDV2.react.createElement(XSvg, null) ), - typeof this.settingsPanel === "object" && BDV2.react.createElement("div", {id: `plugin-settings-${this.name}`, className: "plugin-settings", ref: "settingspanel"}), - typeof this.settingsPanel !== "object" && BDV2.react.createElement("div", {id: `plugin-settings-${this.name}`, className: "plugin-settings", ref: "settingspanel", dangerouslySetInnerHTML: {__html: this.settingsPanel}}) + settingPanel ); } diff --git a/BetterDiscordApp/src/ui/errorBoundary.js b/BetterDiscordApp/src/ui/errorBoundary.js index dca266d..54faec2 100644 --- a/BetterDiscordApp/src/ui/errorBoundary.js +++ b/BetterDiscordApp/src/ui/errorBoundary.js @@ -6,7 +6,8 @@ export default class BDErrorBoundary extends BDV2.reactComponent { this.state = {hasError: false}; } - componentDidCatch() { + componentDidCatch(error, errorStack) { + console.log(error, errorStack) this.setState({hasError: true}); } diff --git a/BetterDiscordApp/src/ui/tooltip.js b/BetterDiscordApp/src/ui/tooltip.js index 27ddfa3..3d36c16 100644 --- a/BetterDiscordApp/src/ui/tooltip.js +++ b/BetterDiscordApp/src/ui/tooltip.js @@ -107,7 +107,7 @@ export default class EmulatedTooltip { /** Container where the tooltip will be appended. */ get container() { - return document.querySelector("."+Utils.removeDa(BDModules.get(e => e.popouts)[0].popouts)+" ~ ."+Utils.removeDa(BDModules.get(e => e.layerContainer)[0].layerContainer)); + return document.querySelector("."+Utils.removeDa(BDModules.get(e => typeof e.popouts === "string")[0].popouts)+" ~ ."+Utils.removeDa(BDModules.get(e => typeof e.layerContainer === "string")[0].layerContainer)); } /** Boolean representing if the tooltip will fit on screen above the element */ get canShowAbove() { return this.node.getBoundingClientRect().top - this.element.offsetHeight >= 0; } diff --git a/modules/discord_cloudsync/discord_cloudsync_darwin.node b/modules/discord_cloudsync/discord_cloudsync_darwin.node index 22e2532..3486c5a 100644 Binary files a/modules/discord_cloudsync/discord_cloudsync_darwin.node and b/modules/discord_cloudsync/discord_cloudsync_darwin.node differ diff --git a/modules/discord_desktop_core/core/app/BetterDiscord/index.js b/modules/discord_desktop_core/core/app/BetterDiscord/index.js index 6ad8259..d061259 100644 --- a/modules/discord_desktop_core/core/app/BetterDiscord/index.js +++ b/modules/discord_desktop_core/core/app/BetterDiscord/index.js @@ -20,9 +20,11 @@ const localStorage = window.localStorage const UserAgent = electron.ipcRenderer.sendSync("LIGHTCORD_GET_USER_AGENT").replace(/lightcord\/[^ ]+/g, "discord/"+require("../discord_native/renderer/app").getVersion()) electron.ipcRenderer.sendSync("LIGHTCORD_SET_USER_AGENT", UserAgent) -exports.init = function(){ +exports.init = function({ + isTab +}){ if(hasInit == true){ - console.warn(new Error("Lightcord has already inited.")) + console.warn(new Error("Lightcord has already started.")) return } formatLogger.log("The app is", isPackaged ? "packaged." : "not packaged.") @@ -33,6 +35,7 @@ exports.init = function(){ try{ if(!global.webpackJsonp)return if(isTab && !hasReplacedLocalstorage){ + console.log("Replacing localStorage...") hasReplacedLocalstorage = true const localstr = require("localstorage-polyfill") Object.defineProperty(window, "localStorage", { @@ -66,10 +69,10 @@ async function privateInit(){ ModuleLoader.get(e => e.getCurrentHub)[0].getCurrentHub().getClient().getOptions().enabled = false // setting react in require cache - const React = ModuleLoader.get(e => !["Component", "PureComponent", "Children", "createElement", "cloneElement"].find(k => !e[k]))[0] + const React = await ensureExported(e => !["Component", "PureComponent", "Children", "createElement", "cloneElement"].find(k => !e[k])) window.React = React - const ReactDOM = ModuleLoader.get(e => e.findDOMNode)[0] + const ReactDOM = await ensureExported(e => e.findDOMNode) window.ReactDOM = ReactDOM //stop here if betterdiscord is disabled. @@ -108,7 +111,7 @@ async function privateInit(){ // fix notifications here let dispatcher = ModuleLoader.get(m=>m.Dispatcher&&m.default&&m.default.dispatch)[0].default dispatcher.subscribe("USER_SETTINGS_UPDATE", (data) => { - DiscordNative.ipc.send("UPDATE_THEME", data.settings.theme) + ipcRenderer.send("DISCORD_UPDATE_THEME", data.settings.theme) }) let constants = ModuleLoader.get(m=>m.API_HOST)[0] @@ -153,11 +156,12 @@ async function privateInit(){ return } - let createSoundOriginal = ModuleLoader.get((e) => e.createSound)[0].createSound - ModuleLoader.get((e) => e.createSound)[0].createSound = function(sound){ + let soundModule = await ensureExported((e) => e.createSound) + let createSound = soundModule.createSound + soundModule.createSound = function(sound){ let isCalling = sound === "call_ringing_beat" || sound === "call_ringing" if(isCalling){ - let returned = createSoundOriginal.call(this, ...arguments) + let returned = createSound.call(this, ...arguments) Object.defineProperty(returned, "name", { get(){ return window.Lightcord.Settings.callRingingBeat ? "call_ringing_beat" : "call_ringing" @@ -169,7 +173,7 @@ async function privateInit(){ }) return returned }else{ - return createSoundOriginal(...arguments) + return createSound(...arguments) } } @@ -187,7 +191,7 @@ async function privateInit(){ return undefined } - window.$ = window.jQuery = require("./jquery.min.js") + window.$ = window.jQuery = require("./jquery-3.6.0.slim.min.js") require("./ace.js") installReactDevtools() @@ -305,7 +309,7 @@ async function privateInit(){ }) dispatcher.subscribe("USER_SETTINGS_UPDATE", (data) => { - DiscordNative.ipc.send("UPDATE_THEME", data.settings.theme) + ipcRenderer.send("DISCORD_UPDATE_THEME", data.settings.theme) }) require(formatMinified("lightcordapi/js/main{min}.js")) diff --git a/modules/discord_desktop_core/core/app/BetterDiscord/jquery-3.6.0.slim.min.js b/modules/discord_desktop_core/core/app/BetterDiscord/jquery-3.6.0.slim.min.js new file mode 100644 index 0000000..7556941 --- /dev/null +++ b/modules/discord_desktop_core/core/app/BetterDiscord/jquery-3.6.0.slim.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(g,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,v=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),m={},b=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},w=g.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function C(e,t,n){var r,i,o=(n=n||w).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function T(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/Tween,-effects/animatedSelector",E=function(e,t){return new E.fn.init(e,t)};function d(e){var t=!!e&&"length"in e&&e.length,n=T(e);return!b(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+R+")"+R+"*"),U=new RegExp(R+"|>"),V=new RegExp(W),X=new RegExp("^"+B+"$"),Q={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),TAG:new RegExp("^("+B+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+I+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,G=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+R+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){C()},ae=xe(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{O.apply(t=P.call(d.childNodes),d.childNodes),t[d.childNodes.length].nodeType}catch(e){O={apply:t.length?function(e,t){q.apply(e,P.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==d&&9!==d&&11!==d)return n;if(!r&&(C(e),e=e||T,E)){if(11!==d&&(u=Z.exec(t)))if(i=u[1]){if(9===d){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return O.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&p.getElementsByClassName&&e.getElementsByClassName)return O.apply(n,e.getElementsByClassName(i)),n}if(p.qsa&&!k[t+" "]&&(!v||!v.test(t))&&(1!==d||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===d&&(U.test(t)||_.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&p.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=A)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+be(l[o]);c=l.join(",")}try{return O.apply(n,f.querySelectorAll(c)),n}catch(e){k(t,!0)}finally{s===A&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>x.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[A]=!0,e}function ce(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)x.attrHandle[n[r]]=t}function de(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pe(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in p=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},C=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:d;return r!=T&&9===r.nodeType&&r.documentElement&&(a=(T=r).documentElement,E=!i(T),d!=T&&(n=T.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),p.scope=ce(function(e){return a.appendChild(e).appendChild(T.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),p.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),p.getElementsByTagName=ce(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),p.getElementsByClassName=J.test(T.getElementsByClassName),p.getById=ce(function(e){return a.appendChild(e).id=A,!T.getElementsByName||!T.getElementsByName(A).length}),p.getById?(x.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(x.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),x.find.TAG=p.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):p.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},x.find.CLASS=p.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(p.qsa=J.test(T.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+R+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+A+"-]").length||v.push("~="),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+R+"*name"+R+"*="+R+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+A+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(p.matchesSelector=J.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){p.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",W)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=J.test(a.compareDocumentPosition),y=t||J.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===n?e==T||e.ownerDocument==d&&y(d,e)?-1:t==T||t.ownerDocument==d&&y(d,t)?1:u?H(u,e)-H(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==T?-1:t==T?1:i?-1:o?1:u?H(u,e)-H(u,t):0;if(i===o)return de(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?de(a[r],s[r]):a[r]==d?-1:s[r]==d?1:0}),T},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(C(e),p.matchesSelector&&E&&!k[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){k(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return b(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||L,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:j.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:w,!0)),k.test(r[1])&&E.isPlainObject(t))for(r in t)b(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=w.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):b(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,L=E(w);var q=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i;le=w.createDocumentFragment().appendChild(w.createElement("div")),(ce=w.createElement("input")).setAttribute("type","radio"),ce.setAttribute("checked","checked"),ce.setAttribute("name","t"),le.appendChild(ce),m.checkClone=le.cloneNode(!0).cloneNode(!0).lastChild.checked,le.innerHTML="",m.noCloneChecked=!!le.cloneNode(!0).lastChild.defaultValue,le.innerHTML="",m.option=!!le.lastChild;var he={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ge(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&S(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var ye=/<|&#?\w+;/;function me(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),d=[],p=0,h=e.length;p\s*$/g;function ke(e,t){return S(e,"table")&&S(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Le(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function je(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n
",2===lt.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(m.createHTMLDocument?((r=(t=w.implementation.createHTMLDocument("")).createElement("base")).href=w.location.href,t.head.appendChild(r)):t=w),o=!n&&[],(i=k.exec(e))?[t.createElement(i[1])]:(i=me([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),b(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=Me(m.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0 e.default && e.default.theme)) .then(themeStore => { settingStore = themeStore - ipcRenderer.send("UPDATE_THEME", themeStore.default.theme) + ipcRenderer.send("DISCORD_UPDATE_THEME", themeStore.default.theme) }).catch(console.error) \ No newline at end of file diff --git a/modules/discord_desktop_core/core/app/index.js b/modules/discord_desktop_core/core/app/index.js index a01b37e..09b0956 100644 --- a/modules/discord_desktop_core/core/app/index.js +++ b/modules/discord_desktop_core/core/app/index.js @@ -13,7 +13,7 @@ const { } = require('electron'); const fetch = require("node-fetch").default -let mainScreen; +let mainScreen function startup(bootstrapModules) { // below modules are required and initted @@ -109,7 +109,7 @@ function startup(bootstrapModules) { global.mainWindowId = Constants.DEFAULT_MAIN_WINDOW_ID; global.moduleUpdater = moduleUpdater; - const applicationMenu = require('./applicationMenu'); + let applicationMenu = require('./applicationMenu'); if(appSettings().get("isTabs", false)){ applicationMenu = applicationMenu.map(e => { @@ -180,7 +180,7 @@ function startup(bootstrapModules) { let initByUpdate = false if(Date.now() - global.appSettings.get("LAST_UPDATE_CHECK_TIMESTAMP", 0) < 6.48e+8){ - console.log("Starting with version "+version+" because it haven't been 1 week since the last check.") + console.log("Starting with version "+version+" because it hasn't been 1 week since the last check.") mainScreen.init(false) const { getWindow: getPopoutWindowByKey } = require('./popoutWindows'); diff --git a/modules/discord_desktop_core/core/app/mainScreen.js b/modules/discord_desktop_core/core/app/mainScreen.js index 0f82df7..f978bbc 100644 --- a/modules/discord_desktop_core/core/app/mainScreen.js +++ b/modules/discord_desktop_core/core/app/mainScreen.js @@ -83,13 +83,6 @@ const connectionBackoff = new _Backoff.default(1000, 20000); const DISCORD_NAMESPACE = 'DISCORD_'; let isTabs = false -function checkCanMigrate() { - return _fs.default.existsSync(_path.default.join(paths.getUserData(), 'userDataCache.json')); -} - -function checkAlreadyMigrated() { - return _fs.default.existsSync(_path.default.join(paths.getUserData(), 'domainMigrated')); -} const getWebappEndpoint = () => { isTabs = settings.get("isTabs", false) @@ -447,7 +440,7 @@ function launchMainAppWindow(isVisible) { } : { nodeIntegration: false, webviewTag: false, - contextIsolation: true, + contextIsolation: false, preload: _path.default.join(__dirname, 'mainScreenPreload.js') }), // NB: this is required in order to give popouts (or any child window opened via window.open w/ nativeWindowOpen) @@ -494,7 +487,7 @@ function launchMainAppWindow(isVisible) { mainWindow.webContents.on('new-window', (e, windowURL, frameName, disposition, options) => { e.preventDefault(); - if (frameNames.tartsWith(DISCORD_NAMESPACE) && checkUrlOriginMatches(windowURL, WEBAPP_ENDPOINT) && getSanitizedPath(windowURL) === '/popout') { + if (frameName.startsWith(DISCORD_NAMESPACE) && checkUrlOriginMatches(windowURL, WEBAPP_ENDPOINT) && getSanitizedPath(windowURL) === '/popout') { popoutWindows.openOrFocusWindow(e, windowURL, frameName, options); return; } diff --git a/modules/discord_desktop_core/core/app/mainScreenPreload.js b/modules/discord_desktop_core/core/app/mainScreenPreload.js index 9196ccd..66cea28 100644 --- a/modules/discord_desktop_core/core/app/mainScreenPreload.js +++ b/modules/discord_desktop_core/core/app/mainScreenPreload.js @@ -49,7 +49,7 @@ const DiscordNative = { DiscordNative.remoteApp = DiscordNative.app; DiscordNative.remotePowerMonitor = DiscordNative.powerMonitor; -contextBridge.exposeInMainWorld('DiscordNative', DiscordNative); +window.DiscordNative = DiscordNative const BetterDiscord = require("./BetterDiscord") process.once('loaded', () => { @@ -64,7 +64,7 @@ process.once('loaded', () => { let startTime = Date.now() BetterDiscord.init({ // Detect if tabPreload was used. - isTab: require.main !== module + isTab: false }) BetterDiscord.events.on("debug", BetterDiscord.logger.log.bind(BetterDiscord.logger)) BetterDiscord.events.on("ready", () => { diff --git a/modules/discord_dispatch/discord_dispatch_darwin.node b/modules/discord_dispatch/discord_dispatch_darwin.node index 91893c1..9c638aa 100644 Binary files a/modules/discord_dispatch/discord_dispatch_darwin.node and b/modules/discord_dispatch/discord_dispatch_darwin.node differ diff --git a/modules/discord_erlpack/discord_erlpack_darwin.node b/modules/discord_erlpack/discord_erlpack_darwin.node index f3edec1..7b06a69 100644 Binary files a/modules/discord_erlpack/discord_erlpack_darwin.node and b/modules/discord_erlpack/discord_erlpack_darwin.node differ diff --git a/modules/discord_game_utils/discord_game_utils_darwin.node b/modules/discord_game_utils/discord_game_utils_darwin.node index 3a449fe..d94dfd7 100644 Binary files a/modules/discord_game_utils/discord_game_utils_darwin.node and b/modules/discord_game_utils/discord_game_utils_darwin.node differ diff --git a/modules/discord_hook/9981ab6e5e2/DiscordHook.dll b/modules/discord_hook/2e1ff455c11/DiscordHook.dll similarity index 54% rename from modules/discord_hook/9981ab6e5e2/DiscordHook.dll rename to modules/discord_hook/2e1ff455c11/DiscordHook.dll index d5731ac..9797628 100644 Binary files a/modules/discord_hook/9981ab6e5e2/DiscordHook.dll and b/modules/discord_hook/2e1ff455c11/DiscordHook.dll differ diff --git a/modules/discord_hook/9981ab6e5e2/DiscordHook64.dll b/modules/discord_hook/2e1ff455c11/DiscordHook64.dll similarity index 55% rename from modules/discord_hook/9981ab6e5e2/DiscordHook64.dll rename to modules/discord_hook/2e1ff455c11/DiscordHook64.dll index 6696804..9f37bce 100644 Binary files a/modules/discord_hook/9981ab6e5e2/DiscordHook64.dll and b/modules/discord_hook/2e1ff455c11/DiscordHook64.dll differ diff --git a/modules/discord_hook/9981ab6e5e2/DiscordHookHelper.exe b/modules/discord_hook/2e1ff455c11/DiscordHookHelper.exe similarity index 59% rename from modules/discord_hook/9981ab6e5e2/DiscordHookHelper.exe rename to modules/discord_hook/2e1ff455c11/DiscordHookHelper.exe index 09b36dd..8dac793 100644 Binary files a/modules/discord_hook/9981ab6e5e2/DiscordHookHelper.exe and b/modules/discord_hook/2e1ff455c11/DiscordHookHelper.exe differ diff --git a/modules/discord_hook/9981ab6e5e2/DiscordHookHelper64.exe b/modules/discord_hook/2e1ff455c11/DiscordHookHelper64.exe similarity index 55% rename from modules/discord_hook/9981ab6e5e2/DiscordHookHelper64.exe rename to modules/discord_hook/2e1ff455c11/DiscordHookHelper64.exe index cc0c6ec..cc7f28b 100644 Binary files a/modules/discord_hook/9981ab6e5e2/DiscordHookHelper64.exe and b/modules/discord_hook/2e1ff455c11/DiscordHookHelper64.exe differ diff --git a/modules/discord_hook/9981ab6e5e2/discord_overlay_sdk_x64.dll b/modules/discord_hook/2e1ff455c11/discord_overlay_sdk_x64.dll similarity index 55% rename from modules/discord_hook/9981ab6e5e2/discord_overlay_sdk_x64.dll rename to modules/discord_hook/2e1ff455c11/discord_overlay_sdk_x64.dll index 02a1f5e..a695a0d 100644 Binary files a/modules/discord_hook/9981ab6e5e2/discord_overlay_sdk_x64.dll and b/modules/discord_hook/2e1ff455c11/discord_overlay_sdk_x64.dll differ diff --git a/modules/discord_hook/9981ab6e5e2/discord_overlay_sdk_x86.dll b/modules/discord_hook/2e1ff455c11/discord_overlay_sdk_x86.dll similarity index 51% rename from modules/discord_hook/9981ab6e5e2/discord_overlay_sdk_x86.dll rename to modules/discord_hook/2e1ff455c11/discord_overlay_sdk_x86.dll index d011660..8eb4d41 100644 Binary files a/modules/discord_hook/9981ab6e5e2/discord_overlay_sdk_x86.dll and b/modules/discord_hook/2e1ff455c11/discord_overlay_sdk_x86.dll differ diff --git a/modules/discord_hook/discord_hook_win32.node b/modules/discord_hook/discord_hook_win32.node index 40b7f86..cb36b7a 100644 Binary files a/modules/discord_hook/discord_hook_win32.node and b/modules/discord_hook/discord_hook_win32.node differ diff --git a/modules/discord_krisp/discord_krisp_darwin.node b/modules/discord_krisp/discord_krisp_darwin.node index c718337..36f0079 100644 Binary files a/modules/discord_krisp/discord_krisp_darwin.node and b/modules/discord_krisp/discord_krisp_darwin.node differ diff --git a/modules/discord_modules/397863cd8f/2/discord_game_sdk_x64.dll b/modules/discord_modules/397863cd8f/2/discord_game_sdk_x64.dll deleted file mode 100644 index 945b071..0000000 Binary files a/modules/discord_modules/397863cd8f/2/discord_game_sdk_x64.dll and /dev/null differ diff --git a/modules/discord_modules/397863cd8f/2/discord_game_sdk_x86.dll b/modules/discord_modules/397863cd8f/2/discord_game_sdk_x86.dll deleted file mode 100644 index 3896781..0000000 Binary files a/modules/discord_modules/397863cd8f/2/discord_game_sdk_x86.dll and /dev/null differ diff --git a/modules/discord_modules/397863cd8f/discord_aegis_x64.dll b/modules/discord_modules/397863cd8f/discord_aegis_x64.dll deleted file mode 100644 index adf348b..0000000 Binary files a/modules/discord_modules/397863cd8f/discord_aegis_x64.dll and /dev/null differ diff --git a/modules/discord_modules/397863cd8f/discord_aegis_x86.dll b/modules/discord_modules/397863cd8f/discord_aegis_x86.dll deleted file mode 100644 index 2366663..0000000 Binary files a/modules/discord_modules/397863cd8f/discord_aegis_x86.dll and /dev/null differ diff --git a/modules/discord_modules/discord_modules_darwin.node b/modules/discord_modules/discord_modules_darwin.node index 30a81b0..b390ed0 100644 Binary files a/modules/discord_modules/discord_modules_darwin.node and b/modules/discord_modules/discord_modules_darwin.node differ diff --git a/modules/discord_utils/discord_utils_darwin.node b/modules/discord_utils/discord_utils_darwin.node index 46c05d3..f11ddc2 100644 Binary files a/modules/discord_utils/discord_utils_darwin.node and b/modules/discord_utils/discord_utils_darwin.node differ diff --git a/modules/discord_utils/discord_utils_linux.node b/modules/discord_utils/discord_utils_linux.node index c649bb1..8a31a70 100644 Binary files a/modules/discord_utils/discord_utils_linux.node and b/modules/discord_utils/discord_utils_linux.node differ diff --git a/modules/discord_utils/discord_utils_win32.node b/modules/discord_utils/discord_utils_win32.node index 255bfee..6c0b55e 100644 Binary files a/modules/discord_utils/discord_utils_win32.node and b/modules/discord_utils/discord_utils_win32.node differ diff --git a/modules/discord_voice/discord_voice_darwin.node b/modules/discord_voice/discord_voice_darwin.node index f0cdf00..3469226 100644 Binary files a/modules/discord_voice/discord_voice_darwin.node and b/modules/discord_voice/discord_voice_darwin.node differ diff --git a/modules/discord_voice/discord_voice_linux.node b/modules/discord_voice/discord_voice_linux.node index bc3a7df..079cc8b 100644 Binary files a/modules/discord_voice/discord_voice_linux.node and b/modules/discord_voice/discord_voice_linux.node differ diff --git a/modules/discord_voice/discord_voice_win32.node b/modules/discord_voice/discord_voice_win32.node index 31e89a9..5f08bf5 100644 Binary files a/modules/discord_voice/discord_voice_win32.node and b/modules/discord_voice/discord_voice_win32.node differ diff --git a/modules/discord_voice/index.js b/modules/discord_voice/index.js index 0f18501..c5dcd08 100644 --- a/modules/discord_voice/index.js +++ b/modules/discord_voice/index.js @@ -1,4 +1,4 @@ -const VoiceEngine = require('./discord_voice_'+process.platform+'.node'); +const VoiceEngine = require('./discord_voice.node'); const ChildProcess = require('child_process'); const fs = require('fs'); const path = require('path'); @@ -82,6 +82,7 @@ features.declareSupported('experiment_config'); features.declareSupported('remote_locus_network_control'); features.declareSupported('connection_replay'); features.declareSupported('simulcast'); +features.declareSupported('direct_video'); if (process.platform === 'win32') { features.declareSupported('voice_legacy_subsystem'); @@ -120,6 +121,7 @@ function bindConnectionInstance(instance) { configureConnectionRetries: (baseDelay, maxDelay, maxAttempts) => instance.configureConnectionRetries(baseDelay, maxDelay, maxAttempts), setOnSpeakingCallback: (callback) => instance.setOnSpeakingCallback(callback), + setOnSpeakingWhileMutedCallback: (callback) => instance.setOnSpeakingWhileMutedCallback(callback), setPingInterval: (interval) => instance.setPingInterval(interval), setPingCallback: (callback) => instance.setPingCallback(callback), setPingTimeoutCallback: (callback) => instance.setPingTimeoutCallback(callback), @@ -166,7 +168,7 @@ VoiceEngine.createReplayConnection = function (audioEngineId, callback, replayLo return null; } - return new VoiceEngine.VoiceReplayConnection(replayLog, audioEngineId, callback); + return bindConnectionInstance(new VoiceEngine.VoiceReplayConnection(replayLog, audioEngineId, callback)); }; VoiceEngine.setAudioSubsystem = function (subsystem) { diff --git a/modules/discord_voice/libopenh264.4.dylib b/modules/discord_voice/libopenh264.4.dylib index 191624e..87917db 100644 Binary files a/modules/discord_voice/libopenh264.4.dylib and b/modules/discord_voice/libopenh264.4.dylib differ diff --git a/src/requireNative.ts b/src/requireNative.ts index b926e0c..67750eb 100644 --- a/src/requireNative.ts +++ b/src/requireNative.ts @@ -1,5 +1,7 @@ import * as path from "path" +global["modulePath"] = path.join(__dirname, "..", "modules") + export default function requireNativeDiscordModule(id){ return require(path.join(__dirname, "..", "modules", id)) } \ No newline at end of file