mirror of
https://github.com/redphx/better-xcloud.git
synced 2025-06-07 08:07:18 +02:00
Improve Patcher class
This commit is contained in:
parent
49550eed0a
commit
a5b77ae8c0
@ -4285,16 +4285,6 @@ class Patcher {
|
|||||||
return funcStr.replace(text, '.disableTelemetry=function(){return!0}');
|
return funcStr.replace(text, '.disableTelemetry=function(){return!0}');
|
||||||
},
|
},
|
||||||
|
|
||||||
enableXcloudLogger: ENABLE_XCLOUD_LOGGER && function(funcStr) {
|
|
||||||
const text = 'if(t!==Ke.LogLevel.Error&&t!==Ke.LogLevel.Warn)';
|
|
||||||
if (!funcStr.includes(text)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
funcStr = funcStr.replaceAll(text, 'console.log(arguments);' + text);
|
|
||||||
return funcStr;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Set TV layout
|
// Set TV layout
|
||||||
tvLayout: PREFS.get(Preferences.UI_LAYOUT) === 'tv' && function(funcStr) {
|
tvLayout: PREFS.get(Preferences.UI_LAYOUT) === 'tv' && function(funcStr) {
|
||||||
const text = '?"tv":"default"';
|
const text = '?"tv":"default"';
|
||||||
@ -4315,16 +4305,6 @@ class Patcher {
|
|||||||
return funcStr.replace(funcStr.substring(index - 9, index + 15), 'https://www.xbox.com/play');
|
return funcStr.replace(funcStr.substring(index - 9, index + 15), 'https://www.xbox.com/play');
|
||||||
},
|
},
|
||||||
|
|
||||||
// Disable trackEvent() function
|
|
||||||
disableTrackEvent: PREFS.get(Preferences.BLOCK_TRACKING) && function(funcStr) {
|
|
||||||
const text = 'this.trackEvent=';
|
|
||||||
if (!funcStr.includes(text)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return funcStr.replace(text, 'this.trackEvent=e=>{},this.uwuwu=');
|
|
||||||
},
|
|
||||||
|
|
||||||
remotePlayKeepAlive: PREFS.get(Preferences.REMOTE_PLAY_ENABLED) && function(funcStr) {
|
remotePlayKeepAlive: PREFS.get(Preferences.REMOTE_PLAY_ENABLED) && function(funcStr) {
|
||||||
if (!funcStr.includes('onServerDisconnectMessage(e){')) {
|
if (!funcStr.includes('onServerDisconnectMessage(e){')) {
|
||||||
return false;
|
return false;
|
||||||
@ -4352,6 +4332,16 @@ class Patcher {
|
|||||||
return funcStr.replace(text, `connectMode:window.BX_REMOTE_PLAY_CONFIG?"xhome-connect":"cloud-connect",remotePlayServerId:(window.BX_REMOTE_PLAY_CONFIG&&window.BX_REMOTE_PLAY_CONFIG.serverId)||''`);
|
return funcStr.replace(text, `connectMode:window.BX_REMOTE_PLAY_CONFIG?"xhome-connect":"cloud-connect",remotePlayServerId:(window.BX_REMOTE_PLAY_CONFIG&&window.BX_REMOTE_PLAY_CONFIG.serverId)||''`);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Disable trackEvent() function
|
||||||
|
disableTrackEvent: PREFS.get(Preferences.BLOCK_TRACKING) && function(funcStr) {
|
||||||
|
const text = 'this.trackEvent=';
|
||||||
|
if (!funcStr.includes(text)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return funcStr.replace(text, 'this.trackEvent=e=>{},this.uwuwu=');
|
||||||
|
},
|
||||||
|
|
||||||
// Block WebRTC stats collector
|
// Block WebRTC stats collector
|
||||||
blockWebRtcStatsCollector: PREFS.get(Preferences.BLOCK_TRACKING) && function(funcStr) {
|
blockWebRtcStatsCollector: PREFS.get(Preferences.BLOCK_TRACKING) && function(funcStr) {
|
||||||
const text = 'this.intervalMs=0,';
|
const text = 'this.intervalMs=0,';
|
||||||
@ -4362,6 +4352,16 @@ class Patcher {
|
|||||||
return funcStr.replace(text, 'false,' + text);
|
return funcStr.replace(text, 'false,' + text);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
enableXcloudLogger: ENABLE_XCLOUD_LOGGER && function(funcStr) {
|
||||||
|
const text = 'if(t!==Ke.LogLevel.Error&&t!==Ke.LogLevel.Warn)';
|
||||||
|
if (!funcStr.includes(text)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
funcStr = funcStr.replaceAll(text, 'console.log(arguments);' + text);
|
||||||
|
return funcStr;
|
||||||
|
},
|
||||||
|
|
||||||
// Enable Mouse and Keyboard support
|
// Enable Mouse and Keyboard support
|
||||||
enableMouseAndKeyboard: PREFS.get(Preferences.MKB_ENABLED) && function(funcStr) {
|
enableMouseAndKeyboard: PREFS.get(Preferences.MKB_ENABLED) && function(funcStr) {
|
||||||
if (!funcStr.includes('EnableMouseAndKeyboard:')) {
|
if (!funcStr.includes('EnableMouseAndKeyboard:')) {
|
||||||
@ -4377,6 +4377,26 @@ class Patcher {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static #PATCH_ORDERS = [
|
||||||
|
[
|
||||||
|
'disableAiTrack',
|
||||||
|
'disableTelemetry',
|
||||||
|
],
|
||||||
|
|
||||||
|
['tvLayout'],
|
||||||
|
|
||||||
|
[
|
||||||
|
'enableMouseAndKeyboard',
|
||||||
|
'enableXcloudLogger',
|
||||||
|
'remotePlayDirectConnectUrl',
|
||||||
|
'disableTrackEvent',
|
||||||
|
'remotePlayKeepAlive',
|
||||||
|
'blockWebRtcStatsCollector',
|
||||||
|
],
|
||||||
|
|
||||||
|
['remotePlayConnectMode'],
|
||||||
|
];
|
||||||
|
|
||||||
static #patchFunctionBind() {
|
static #patchFunctionBind() {
|
||||||
Function.prototype.nativeBind = Function.prototype.bind;
|
Function.prototype.nativeBind = Function.prototype.bind;
|
||||||
Function.prototype.bind = function() {
|
Function.prototype.bind = function() {
|
||||||
@ -4411,39 +4431,67 @@ class Patcher {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static length() { return Object.keys(Patcher.#PATCHES).length };
|
static length() { return Patcher.#PATCH_ORDERS.length; };
|
||||||
|
|
||||||
static patch(item) {
|
static patch(item) {
|
||||||
let patchName;
|
let patchName;
|
||||||
for (let id in item[1]) {
|
for (let id in item[1]) {
|
||||||
if (Patcher.length() <= 0) {
|
if (Patcher.#PATCH_ORDERS.length <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const func = item[1][id];
|
const func = item[1][id];
|
||||||
const funcStr = func.toString();
|
const funcStr = func.toString();
|
||||||
|
|
||||||
// Only check the first patch
|
for (let groupIndex = 0; groupIndex < Patcher.#PATCH_ORDERS.length; groupIndex++) {
|
||||||
if (!patchName) {
|
const group = Patcher.#PATCH_ORDERS[groupIndex];
|
||||||
patchName = Object.keys(Patcher.#PATCHES)[0];
|
|
||||||
|
for (let patchIndex = 0; patchIndex < group.length; patchIndex++) {
|
||||||
|
const patchName = group[patchIndex];
|
||||||
|
const patchedFuncStr = Patcher.#PATCHES[patchName].call(null, funcStr);
|
||||||
|
if (!patchedFuncStr) {
|
||||||
|
// Only stop if the first patch is failed
|
||||||
|
if (patchIndex === 0) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const patchedFuncStr = Patcher.#PATCHES[patchName].call(null, funcStr);
|
|
||||||
if (patchedFuncStr) {
|
|
||||||
console.log(`[Better xCloud] Applied "${patchName}" patch`);
|
console.log(`[Better xCloud] Applied "${patchName}" patch`);
|
||||||
|
// Apply patched function
|
||||||
item[1][id] = eval(patchedFuncStr);
|
item[1][id] = eval(patchedFuncStr);
|
||||||
delete Patcher.#PATCHES[patchName];
|
|
||||||
patchName = null;
|
// Remove patch from group
|
||||||
|
group.splice(patchIndex, 1);
|
||||||
|
patchIndex--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove empty group
|
||||||
|
if (!group.length) {
|
||||||
|
Patcher.#PATCH_ORDERS.splice(groupIndex, 1);
|
||||||
|
groupIndex--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static initialize() {
|
static initialize() {
|
||||||
// Remove disabled patches
|
// Remove disabled patches
|
||||||
for (const patchName in Patcher.#PATCHES) {
|
for (let groupIndex = Patcher.#PATCH_ORDERS.length - 1; groupIndex >= 0; groupIndex--) {
|
||||||
|
const group = Patcher.#PATCH_ORDERS[groupIndex];
|
||||||
|
|
||||||
|
for (let patchIndex = group.length - 1; patchIndex >= 0; patchIndex--) {
|
||||||
|
const patchName = group[patchIndex];
|
||||||
if (!Patcher.#PATCHES[patchName]) {
|
if (!Patcher.#PATCHES[patchName]) {
|
||||||
delete Patcher.#PATCHES[patchName];
|
// Remove disabled patch
|
||||||
|
group.splice(patchIndex, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove empty group
|
||||||
|
if (!group.length) {
|
||||||
|
Patcher.#PATCH_ORDERS.splice(groupIndex, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user