mirror of
https://github.com/redphx/better-xcloud.git
synced 2025-06-06 15:47:18 +02:00
Linting
This commit is contained in:
parent
557a38214d
commit
4011eb402a
20
dist/better-xcloud.lite.user.js
vendored
20
dist/better-xcloud.lite.user.js
vendored
@ -38,7 +38,7 @@ try {
|
|||||||
if (!BX_FLAGS.DeviceInfo.userAgent) BX_FLAGS.DeviceInfo.userAgent = window.navigator.userAgent;
|
if (!BX_FLAGS.DeviceInfo.userAgent) BX_FLAGS.DeviceInfo.userAgent = window.navigator.userAgent;
|
||||||
BxLogger.info("BxFlags", BX_FLAGS);
|
BxLogger.info("BxFlags", BX_FLAGS);
|
||||||
var NATIVE_FETCH = window.fetch;
|
var NATIVE_FETCH = window.fetch;
|
||||||
var SMART_TV_UNIQUE_ID = "FC4A1DA2-711C-4E9C-BC7F-047AF8A672EA", CHROMIUM_VERSION = "123.0.0.0";
|
var SMART_TV_UNIQUE_ID = "FC4A1DA2-711C-4E9C-BC7F-047AF8A672EA", CHROMIUM_VERSION = "125.0.0.0";
|
||||||
if (!!window.chrome || window.navigator.userAgent.includes("Chrome")) {
|
if (!!window.chrome || window.navigator.userAgent.includes("Chrome")) {
|
||||||
let match = window.navigator.userAgent.match(/\s(?:Chrome|Edg)\/([\d\.]+)/);
|
let match = window.navigator.userAgent.match(/\s(?:Chrome|Edg)\/([\d\.]+)/);
|
||||||
if (match) CHROMIUM_VERSION = match[1];
|
if (match) CHROMIUM_VERSION = match[1];
|
||||||
@ -2515,6 +2515,7 @@ class ControllerSettingsTable extends BaseLocalTable {
|
|||||||
async getControllersData() {
|
async getControllersData() {
|
||||||
let all = await this.getAll(), results = {};
|
let all = await this.getAll(), results = {};
|
||||||
for (let key in all) {
|
for (let key in all) {
|
||||||
|
if (!all[key]) continue;
|
||||||
let settings = all[key].data;
|
let settings = all[key].data;
|
||||||
settings.vibrationIntensity /= 100, results[key] = settings;
|
settings.vibrationIntensity /= 100, results[key] = settings;
|
||||||
}
|
}
|
||||||
@ -3085,8 +3086,14 @@ class EmulatedMkbHandler extends MkbHandler {
|
|||||||
else this.mouseDataProvider = new PointerLockMouseDataProvider(this);
|
else this.mouseDataProvider = new PointerLockMouseDataProvider(this);
|
||||||
if (this.mouseDataProvider.init(), window.addEventListener("keydown", this.onKeyboardEvent), window.addEventListener("keyup", this.onKeyboardEvent), window.addEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.onPollingModeChanged), window.addEventListener(BxEvent.XCLOUD_DIALOG_SHOWN, this.onDialogShown), AppInterface) window.addEventListener(BxEvent.POINTER_LOCK_REQUESTED, this), window.addEventListener(BxEvent.POINTER_LOCK_EXITED, this);
|
if (this.mouseDataProvider.init(), window.addEventListener("keydown", this.onKeyboardEvent), window.addEventListener("keyup", this.onKeyboardEvent), window.addEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.onPollingModeChanged), window.addEventListener(BxEvent.XCLOUD_DIALOG_SHOWN, this.onDialogShown), AppInterface) window.addEventListener(BxEvent.POINTER_LOCK_REQUESTED, this), window.addEventListener(BxEvent.POINTER_LOCK_EXITED, this);
|
||||||
else document.addEventListener("pointerlockchange", this.onPointerLockChange), document.addEventListener("pointerlockerror", this.onPointerLockError);
|
else document.addEventListener("pointerlockchange", this.onPointerLockChange), document.addEventListener("pointerlockerror", this.onPointerLockError);
|
||||||
if (MkbPopup.getInstance().reset(), AppInterface) Toast.show(t("press-key-to-toggle-mkb", { key: "<b>F8</b>" }), t("virtual-controller"), { html: !0 }), this.waitForMouseData(!1);
|
if (MkbPopup.getInstance().reset(), AppInterface) {
|
||||||
else this.waitForMouseData(!0);
|
let shortcutKey = StreamSettings.findKeyboardShortcut("mkb.toggle");
|
||||||
|
if (shortcutKey) {
|
||||||
|
let msg = t("press-key-to-toggle-mkb", { key: `<b>${KeyHelper.codeToKeyName(shortcutKey)}</b>` });
|
||||||
|
Toast.show(msg, t("native-mkb"), { html: !0 });
|
||||||
|
}
|
||||||
|
this.waitForMouseData(!1);
|
||||||
|
} else this.waitForMouseData(!0);
|
||||||
}
|
}
|
||||||
destroy() {
|
destroy() {
|
||||||
if (!this.initialized) return;
|
if (!this.initialized) return;
|
||||||
@ -3295,7 +3302,7 @@ class NavigationDialogManager {
|
|||||||
if (this.gamepadLastStates[gamepad.index] = null, lastKeyPressed) return;
|
if (this.gamepadLastStates[gamepad.index] = null, lastKeyPressed) return;
|
||||||
if (this.updateActiveInput("gamepad"), this.handleGamepad(gamepad, releasedButton)) return;
|
if (this.updateActiveInput("gamepad"), this.handleGamepad(gamepad, releasedButton)) return;
|
||||||
if (releasedButton === 0) {
|
if (releasedButton === 0) {
|
||||||
document.activeElement && document.activeElement.dispatchEvent(new MouseEvent("click", { bubbles: !0 }));
|
document.activeElement?.dispatchEvent(new MouseEvent("click", { bubbles: !0 }));
|
||||||
return;
|
return;
|
||||||
} else if (releasedButton === 1) {
|
} else if (releasedButton === 1) {
|
||||||
this.hide();
|
this.hide();
|
||||||
@ -3560,6 +3567,7 @@ class BxSelectElement extends HTMLSelectElement {
|
|||||||
$btnPrev.classList.toggle("bx-inactive", disableButtons), $btnNext.classList.toggle("bx-inactive", disableButtons);
|
$btnPrev.classList.toggle("bx-inactive", disableButtons), $btnNext.classList.toggle("bx-inactive", disableButtons);
|
||||||
for (let i = 0;i < optionsList.length; i++) {
|
for (let i = 0;i < optionsList.length; i++) {
|
||||||
let $option2 = optionsList[i], $indicator = indicatorsList[i];
|
let $option2 = optionsList[i], $indicator = indicatorsList[i];
|
||||||
|
if (!$option2 || !$indicator) continue;
|
||||||
if (clearDataSet($indicator), $option2.selected) $indicator.dataset.selected = "true";
|
if (clearDataSet($indicator), $option2.selected) $indicator.dataset.selected = "true";
|
||||||
if ($option2.index === visibleIndex) $indicator.dataset.highlighted = "true";
|
if ($option2.index === visibleIndex) $indicator.dataset.highlighted = "true";
|
||||||
}
|
}
|
||||||
@ -5489,7 +5497,7 @@ class XcloudInterceptor {
|
|||||||
let PREF_STREAM_TARGET_RESOLUTION = getPref("stream.video.resolution"), PREF_STREAM_PREFERRED_LOCALE = getPref("stream.locale"), url = typeof request === "string" ? request : request.url, parsedUrl = new URL(url), badgeRegion = parsedUrl.host.split(".", 1)[0];
|
let PREF_STREAM_TARGET_RESOLUTION = getPref("stream.video.resolution"), PREF_STREAM_PREFERRED_LOCALE = getPref("stream.locale"), url = typeof request === "string" ? request : request.url, parsedUrl = new URL(url), badgeRegion = parsedUrl.host.split(".", 1)[0];
|
||||||
for (let regionName in STATES.serverRegions) {
|
for (let regionName in STATES.serverRegions) {
|
||||||
let region = STATES.serverRegions[regionName];
|
let region = STATES.serverRegions[regionName];
|
||||||
if (parsedUrl.origin == region.baseUri) {
|
if (region && parsedUrl.origin === region.baseUri) {
|
||||||
badgeRegion = regionName;
|
badgeRegion = regionName;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -6307,7 +6315,7 @@ class XboxApi {
|
|||||||
let url = `https://displaycatalog.mp.microsoft.com/v7.0/products/lookup?market=US&languages=en&value=${xboxTitleId}&alternateId=XboxTitleId&fieldsTemplate=browse`, productTitle = (await (await NATIVE_FETCH(url)).json()).Products[0].LocalizedProperties[0].ProductTitle;
|
let url = `https://displaycatalog.mp.microsoft.com/v7.0/products/lookup?market=US&languages=en&value=${xboxTitleId}&alternateId=XboxTitleId&fieldsTemplate=browse`, productTitle = (await (await NATIVE_FETCH(url)).json()).Products[0].LocalizedProperties[0].ProductTitle;
|
||||||
return XboxApi.CACHED_TITLES[xboxTitleId] = productTitle, productTitle;
|
return XboxApi.CACHED_TITLES[xboxTitleId] = productTitle, productTitle;
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
class RootDialogObserver {
|
class RootDialogObserver {
|
||||||
|
32
dist/better-xcloud.user.js
vendored
32
dist/better-xcloud.user.js
vendored
@ -40,7 +40,7 @@ try {
|
|||||||
if (!BX_FLAGS.DeviceInfo.userAgent) BX_FLAGS.DeviceInfo.userAgent = window.navigator.userAgent;
|
if (!BX_FLAGS.DeviceInfo.userAgent) BX_FLAGS.DeviceInfo.userAgent = window.navigator.userAgent;
|
||||||
BxLogger.info("BxFlags", BX_FLAGS);
|
BxLogger.info("BxFlags", BX_FLAGS);
|
||||||
var NATIVE_FETCH = window.fetch;
|
var NATIVE_FETCH = window.fetch;
|
||||||
var SMART_TV_UNIQUE_ID = "FC4A1DA2-711C-4E9C-BC7F-047AF8A672EA", CHROMIUM_VERSION = "123.0.0.0";
|
var SMART_TV_UNIQUE_ID = "FC4A1DA2-711C-4E9C-BC7F-047AF8A672EA", CHROMIUM_VERSION = "125.0.0.0";
|
||||||
if (!!window.chrome || window.navigator.userAgent.includes("Chrome")) {
|
if (!!window.chrome || window.navigator.userAgent.includes("Chrome")) {
|
||||||
let match = window.navigator.userAgent.match(/\s(?:Chrome|Edg)\/([\d\.]+)/);
|
let match = window.navigator.userAgent.match(/\s(?:Chrome|Edg)\/([\d\.]+)/);
|
||||||
if (match) CHROMIUM_VERSION = match[1];
|
if (match) CHROMIUM_VERSION = match[1];
|
||||||
@ -2624,6 +2624,7 @@ class ControllerSettingsTable extends BaseLocalTable {
|
|||||||
async getControllersData() {
|
async getControllersData() {
|
||||||
let all = await this.getAll(), results = {};
|
let all = await this.getAll(), results = {};
|
||||||
for (let key in all) {
|
for (let key in all) {
|
||||||
|
if (!all[key]) continue;
|
||||||
let settings = all[key].data;
|
let settings = all[key].data;
|
||||||
settings.vibrationIntensity /= 100, results[key] = settings;
|
settings.vibrationIntensity /= 100, results[key] = settings;
|
||||||
}
|
}
|
||||||
@ -3200,8 +3201,14 @@ class EmulatedMkbHandler extends MkbHandler {
|
|||||||
else this.mouseDataProvider = new PointerLockMouseDataProvider(this);
|
else this.mouseDataProvider = new PointerLockMouseDataProvider(this);
|
||||||
if (this.mouseDataProvider.init(), window.addEventListener("keydown", this.onKeyboardEvent), window.addEventListener("keyup", this.onKeyboardEvent), window.addEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.onPollingModeChanged), window.addEventListener(BxEvent.XCLOUD_DIALOG_SHOWN, this.onDialogShown), AppInterface) window.addEventListener(BxEvent.POINTER_LOCK_REQUESTED, this), window.addEventListener(BxEvent.POINTER_LOCK_EXITED, this);
|
if (this.mouseDataProvider.init(), window.addEventListener("keydown", this.onKeyboardEvent), window.addEventListener("keyup", this.onKeyboardEvent), window.addEventListener(BxEvent.XCLOUD_POLLING_MODE_CHANGED, this.onPollingModeChanged), window.addEventListener(BxEvent.XCLOUD_DIALOG_SHOWN, this.onDialogShown), AppInterface) window.addEventListener(BxEvent.POINTER_LOCK_REQUESTED, this), window.addEventListener(BxEvent.POINTER_LOCK_EXITED, this);
|
||||||
else document.addEventListener("pointerlockchange", this.onPointerLockChange), document.addEventListener("pointerlockerror", this.onPointerLockError);
|
else document.addEventListener("pointerlockchange", this.onPointerLockChange), document.addEventListener("pointerlockerror", this.onPointerLockError);
|
||||||
if (MkbPopup.getInstance().reset(), AppInterface) Toast.show(t("press-key-to-toggle-mkb", { key: "<b>F8</b>" }), t("virtual-controller"), { html: !0 }), this.waitForMouseData(!1);
|
if (MkbPopup.getInstance().reset(), AppInterface) {
|
||||||
else this.waitForMouseData(!0);
|
let shortcutKey = StreamSettings.findKeyboardShortcut("mkb.toggle");
|
||||||
|
if (shortcutKey) {
|
||||||
|
let msg = t("press-key-to-toggle-mkb", { key: `<b>${KeyHelper.codeToKeyName(shortcutKey)}</b>` });
|
||||||
|
Toast.show(msg, t("native-mkb"), { html: !0 });
|
||||||
|
}
|
||||||
|
this.waitForMouseData(!1);
|
||||||
|
} else this.waitForMouseData(!0);
|
||||||
}
|
}
|
||||||
destroy() {
|
destroy() {
|
||||||
if (!this.initialized) return;
|
if (!this.initialized) return;
|
||||||
@ -3418,7 +3425,7 @@ class NavigationDialogManager {
|
|||||||
if (this.gamepadLastStates[gamepad.index] = null, lastKeyPressed) return;
|
if (this.gamepadLastStates[gamepad.index] = null, lastKeyPressed) return;
|
||||||
if (this.updateActiveInput("gamepad"), this.handleGamepad(gamepad, releasedButton)) return;
|
if (this.updateActiveInput("gamepad"), this.handleGamepad(gamepad, releasedButton)) return;
|
||||||
if (releasedButton === 0) {
|
if (releasedButton === 0) {
|
||||||
document.activeElement && document.activeElement.dispatchEvent(new MouseEvent("click", { bubbles: !0 }));
|
document.activeElement?.dispatchEvent(new MouseEvent("click", { bubbles: !0 }));
|
||||||
return;
|
return;
|
||||||
} else if (releasedButton === 1) {
|
} else if (releasedButton === 1) {
|
||||||
this.hide();
|
this.hide();
|
||||||
@ -3869,6 +3876,7 @@ class BxSelectElement extends HTMLSelectElement {
|
|||||||
$btnPrev.classList.toggle("bx-inactive", disableButtons), $btnNext.classList.toggle("bx-inactive", disableButtons);
|
$btnPrev.classList.toggle("bx-inactive", disableButtons), $btnNext.classList.toggle("bx-inactive", disableButtons);
|
||||||
for (let i = 0;i < optionsList.length; i++) {
|
for (let i = 0;i < optionsList.length; i++) {
|
||||||
let $option2 = optionsList[i], $indicator = indicatorsList[i];
|
let $option2 = optionsList[i], $indicator = indicatorsList[i];
|
||||||
|
if (!$option2 || !$indicator) continue;
|
||||||
if (clearDataSet($indicator), $option2.selected) $indicator.dataset.selected = "true";
|
if (clearDataSet($indicator), $option2.selected) $indicator.dataset.selected = "true";
|
||||||
if ($option2.index === visibleIndex) $indicator.dataset.highlighted = "true";
|
if ($option2.index === visibleIndex) $indicator.dataset.highlighted = "true";
|
||||||
}
|
}
|
||||||
@ -4329,7 +4337,9 @@ BxEvent.dispatch(window, BxEvent.XCLOUD_POLLING_MODE_CHANGED);
|
|||||||
patchXcloudTitleInfo(str) {
|
patchXcloudTitleInfo(str) {
|
||||||
let text = "async cloudConnect", index = str.indexOf(text);
|
let text = "async cloudConnect", index = str.indexOf(text);
|
||||||
if (index < 0) return !1;
|
if (index < 0) return !1;
|
||||||
let backetIndex = str.indexOf("{", index), titleInfoVar = str.substring(index, backetIndex).match(/\(([^)]+)\)/)[1].split(",")[0], newCode = `
|
let backetIndex = str.indexOf("{", index), params = str.substring(index, backetIndex).match(/\(([^)]+)\)/)[1];
|
||||||
|
if (!params) return !1;
|
||||||
|
let titleInfoVar = params.split(",")[0], newCode = `
|
||||||
${titleInfoVar} = window.BX_EXPOSED.modifyTitleInfo(${titleInfoVar});
|
${titleInfoVar} = window.BX_EXPOSED.modifyTitleInfo(${titleInfoVar});
|
||||||
BxLogger.info('patchXcloudTitleInfo', ${titleInfoVar});
|
BxLogger.info('patchXcloudTitleInfo', ${titleInfoVar});
|
||||||
`;
|
`;
|
||||||
@ -4338,7 +4348,9 @@ BxLogger.info('patchXcloudTitleInfo', ${titleInfoVar});
|
|||||||
patchRemotePlayMkb(str) {
|
patchRemotePlayMkb(str) {
|
||||||
let text = "async homeConsoleConnect", index = str.indexOf(text);
|
let text = "async homeConsoleConnect", index = str.indexOf(text);
|
||||||
if (index < 0) return !1;
|
if (index < 0) return !1;
|
||||||
let backetIndex = str.indexOf("{", index), configsVar = str.substring(index, backetIndex).match(/\(([^)]+)\)/)[1].split(",")[1], newCode = `
|
let backetIndex = str.indexOf("{", index), params = str.substring(index, backetIndex).match(/\(([^)]+)\)/)[1];
|
||||||
|
if (!params) return !1;
|
||||||
|
let configsVar = params.split(",")[1], newCode = `
|
||||||
Object.assign(${configsVar}.inputConfiguration, {
|
Object.assign(${configsVar}.inputConfiguration, {
|
||||||
enableMouseInput: false,
|
enableMouseInput: false,
|
||||||
enableKeyboardInput: false,
|
enableKeyboardInput: false,
|
||||||
@ -7317,7 +7329,7 @@ class XhomeInterceptor {
|
|||||||
XhomeInterceptor.consoleAddrs = {};
|
XhomeInterceptor.consoleAddrs = {};
|
||||||
for (let pair of pairs) {
|
for (let pair of pairs) {
|
||||||
let [keyAddr, keyPort] = pair;
|
let [keyAddr, keyPort] = pair;
|
||||||
if (serverDetails[keyAddr]) {
|
if (keyAddr && keyPort && serverDetails[keyAddr]) {
|
||||||
let port = serverDetails[keyPort], ports = new Set;
|
let port = serverDetails[keyPort], ports = new Set;
|
||||||
port && ports.add(port), ports.add(9002), XhomeInterceptor.consoleAddrs[serverDetails[keyAddr]] = Array.from(ports);
|
port && ports.add(port), ports.add(9002), XhomeInterceptor.consoleAddrs[serverDetails[keyAddr]] = Array.from(ports);
|
||||||
}
|
}
|
||||||
@ -7836,7 +7848,7 @@ class XcloudInterceptor {
|
|||||||
let PREF_STREAM_TARGET_RESOLUTION = getPref("stream.video.resolution"), PREF_STREAM_PREFERRED_LOCALE = getPref("stream.locale"), url = typeof request === "string" ? request : request.url, parsedUrl = new URL(url), badgeRegion = parsedUrl.host.split(".", 1)[0];
|
let PREF_STREAM_TARGET_RESOLUTION = getPref("stream.video.resolution"), PREF_STREAM_PREFERRED_LOCALE = getPref("stream.locale"), url = typeof request === "string" ? request : request.url, parsedUrl = new URL(url), badgeRegion = parsedUrl.host.split(".", 1)[0];
|
||||||
for (let regionName in STATES.serverRegions) {
|
for (let regionName in STATES.serverRegions) {
|
||||||
let region = STATES.serverRegions[regionName];
|
let region = STATES.serverRegions[regionName];
|
||||||
if (parsedUrl.origin == region.baseUri) {
|
if (region && parsedUrl.origin === region.baseUri) {
|
||||||
badgeRegion = regionName;
|
badgeRegion = regionName;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -8814,7 +8826,7 @@ class XcloudApi {
|
|||||||
async getTitleInfo(id) {
|
async getTitleInfo(id) {
|
||||||
if (id in this.CACHE_TITLES) return this.CACHE_TITLES[id];
|
if (id in this.CACHE_TITLES) return this.CACHE_TITLES[id];
|
||||||
let baseUri = STATES.selectedRegion.baseUri;
|
let baseUri = STATES.selectedRegion.baseUri;
|
||||||
if (!baseUri || !STATES.gsToken) return null;
|
if (!baseUri || !STATES.gsToken) return;
|
||||||
let json;
|
let json;
|
||||||
try {
|
try {
|
||||||
json = (await (await NATIVE_FETCH(`${baseUri}/v2/titles`, {
|
json = (await (await NATIVE_FETCH(`${baseUri}/v2/titles`, {
|
||||||
@ -9048,7 +9060,7 @@ class XboxApi {
|
|||||||
let url = `https://displaycatalog.mp.microsoft.com/v7.0/products/lookup?market=US&languages=en&value=${xboxTitleId}&alternateId=XboxTitleId&fieldsTemplate=browse`, productTitle = (await (await NATIVE_FETCH(url)).json()).Products[0].LocalizedProperties[0].ProductTitle;
|
let url = `https://displaycatalog.mp.microsoft.com/v7.0/products/lookup?market=US&languages=en&value=${xboxTitleId}&alternateId=XboxTitleId&fieldsTemplate=browse`, productTitle = (await (await NATIVE_FETCH(url)).json()).Products[0].LocalizedProperties[0].ProductTitle;
|
||||||
return XboxApi.CACHED_TITLES[xboxTitleId] = productTitle, productTitle;
|
return XboxApi.CACHED_TITLES[xboxTitleId] = productTitle, productTitle;
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
class RootDialogObserver {
|
class RootDialogObserver {
|
||||||
|
@ -95,7 +95,7 @@ export class KeyHelper {
|
|||||||
const tmp = str.split(':');
|
const tmp = str.split(':');
|
||||||
|
|
||||||
const code = tmp[0] as KeyEventInfo['code'];
|
const code = tmp[0] as KeyEventInfo['code'];
|
||||||
const modifiers = parseInt(tmp[1]);
|
const modifiers = parseInt(tmp[1] as string);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
code,
|
code,
|
||||||
|
@ -16,6 +16,8 @@ import { getPref } from "@/utils/settings-storages/global-settings-storage";
|
|||||||
import { GamepadKey, GamepadStick } from "@/enums/gamepad";
|
import { GamepadKey, GamepadStick } from "@/enums/gamepad";
|
||||||
import { MkbPopup } from "./mkb-popup";
|
import { MkbPopup } from "./mkb-popup";
|
||||||
import type { MkbConvertedPresetData } from "@/types/presets";
|
import type { MkbConvertedPresetData } from "@/types/presets";
|
||||||
|
import { StreamSettings } from "@/utils/stream-settings";
|
||||||
|
import { ShortcutAction } from "@/enums/shortcut-actions";
|
||||||
|
|
||||||
const PointerToMouseButton = {
|
const PointerToMouseButton = {
|
||||||
1: 0,
|
1: 0,
|
||||||
@ -529,7 +531,12 @@ export class EmulatedMkbHandler extends MkbHandler {
|
|||||||
MkbPopup.getInstance().reset();
|
MkbPopup.getInstance().reset();
|
||||||
|
|
||||||
if (AppInterface) {
|
if (AppInterface) {
|
||||||
Toast.show(t('press-key-to-toggle-mkb', {key: `<b>F8</b>`}), t('virtual-controller'), {html: true});
|
const shortcutKey = StreamSettings.findKeyboardShortcut(ShortcutAction.MKB_TOGGLE);
|
||||||
|
if (shortcutKey) {
|
||||||
|
const msg = t('press-key-to-toggle-mkb', { key: `<b>${KeyHelper.codeToKeyName(shortcutKey)}</b>` });
|
||||||
|
Toast.show(msg, t('native-mkb'), { html: true });
|
||||||
|
}
|
||||||
|
|
||||||
this.waitForMouseData(false);
|
this.waitForMouseData(false);
|
||||||
} else {
|
} else {
|
||||||
this.waitForMouseData(true);
|
this.waitForMouseData(true);
|
||||||
|
@ -480,6 +480,10 @@ BxEvent.dispatch(window, BxEvent.XCLOUD_POLLING_MODE_CHANGED);
|
|||||||
|
|
||||||
// Get param name
|
// Get param name
|
||||||
const params = str.substring(index, backetIndex).match(/\(([^)]+)\)/)![1];
|
const params = str.substring(index, backetIndex).match(/\(([^)]+)\)/)![1];
|
||||||
|
if (!params) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const titleInfoVar = params.split(',')[0];
|
const titleInfoVar = params.split(',')[0];
|
||||||
|
|
||||||
const newCode = `
|
const newCode = `
|
||||||
@ -502,6 +506,10 @@ BxLogger.info('patchXcloudTitleInfo', ${titleInfoVar});
|
|||||||
|
|
||||||
// Get param name
|
// Get param name
|
||||||
const params = str.substring(index, backetIndex).match(/\(([^)]+)\)/)![1];
|
const params = str.substring(index, backetIndex).match(/\(([^)]+)\)/)![1];
|
||||||
|
if (!params) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const configsVar = params.split(',')[1];
|
const configsVar = params.split(',')[1];
|
||||||
|
|
||||||
const newCode = `
|
const newCode = `
|
||||||
|
@ -239,7 +239,7 @@ export class TouchController {
|
|||||||
msg = t('touch-control-layout');
|
msg = t('touch-control-layout');
|
||||||
}
|
}
|
||||||
|
|
||||||
layoutChanged && Toast.show(msg, layout.name, {html: html});
|
layoutChanged && Toast.show(msg, layout.name, { html });
|
||||||
|
|
||||||
window.setTimeout(() => {
|
window.setTimeout(() => {
|
||||||
// Show gyroscope control in the "More options" dialog if this layout has gyroscope
|
// Show gyroscope control in the "More options" dialog if this layout has gyroscope
|
||||||
|
@ -393,7 +393,7 @@ export class NavigationDialogManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (releasedButton === GamepadKey.A) {
|
if (releasedButton === GamepadKey.A) {
|
||||||
document.activeElement && document.activeElement.dispatchEvent(new MouseEvent('click', {bubbles: true}));
|
document.activeElement?.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
||||||
return;
|
return;
|
||||||
} else if (releasedButton === GamepadKey.B) {
|
} else if (releasedButton === GamepadKey.B) {
|
||||||
this.hide();
|
this.hide();
|
||||||
|
@ -32,7 +32,7 @@ export class RemotePlayDialog extends NavigationDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private setupDialog() {
|
private setupDialog() {
|
||||||
const $fragment = CE('div', {'class': 'bx-remote-play-container'});
|
const $fragment = CE('div', { class: 'bx-remote-play-container' });
|
||||||
|
|
||||||
const $settingNote = CE('p', {});
|
const $settingNote = CE('p', {});
|
||||||
|
|
||||||
|
@ -859,7 +859,7 @@ export class SettingsDialog extends NavigationDialog {
|
|||||||
|
|
||||||
setting.options[value] = label;
|
setting.options[value] = label;
|
||||||
|
|
||||||
const $option = CE<HTMLOptionElement>('option', {value: value}, label);
|
const $option = CE<HTMLOptionElement>('option', { value }, label);
|
||||||
const continent = continents[region.contintent];
|
const continent = continents[region.contintent];
|
||||||
if (!continent.children) {
|
if (!continent.children) {
|
||||||
continent.children = [];
|
continent.children = [];
|
||||||
|
@ -28,7 +28,7 @@ export class GameTile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (typeof totalWaitTime === 'number' && isElementVisible($elm)) {
|
if (typeof totalWaitTime === 'number' && isElementVisible($elm)) {
|
||||||
const $div = CE('div', {'class': 'bx-game-tile-wait-time'},
|
const $div = CE('div', { class: 'bx-game-tile-wait-time' },
|
||||||
createSvgIcon(BxIcon.PLAYTIME),
|
createSvgIcon(BxIcon.PLAYTIME),
|
||||||
CE('span', {}, secondsToHms(totalWaitTime)),
|
CE('span', {}, secondsToHms(totalWaitTime)),
|
||||||
);
|
);
|
||||||
|
@ -26,6 +26,10 @@ export class ControllerSettingsTable extends BaseLocalTable<ControllerSettingsRe
|
|||||||
const results: { [key: string]: ControllerSettingsRecord['data'] } = {};
|
const results: { [key: string]: ControllerSettingsRecord['data'] } = {};
|
||||||
|
|
||||||
for (const key in all) {
|
for (const key in all) {
|
||||||
|
if (!all[key]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const settings = all[key].data;
|
const settings = all[key].data;
|
||||||
// Pre-calculate virabtionIntensity
|
// Pre-calculate virabtionIntensity
|
||||||
settings.vibrationIntensity /= 100;
|
settings.vibrationIntensity /= 100;
|
||||||
|
@ -20,7 +20,7 @@ export class ScreenshotManager {
|
|||||||
|
|
||||||
this.$download = CE<HTMLAnchorElement>('a');
|
this.$download = CE<HTMLAnchorElement>('a');
|
||||||
|
|
||||||
this.$canvas = CE<HTMLCanvasElement>('canvas', {'class': 'bx-gone'});
|
this.$canvas = CE<HTMLCanvasElement>('canvas', { class: 'bx-gone' });
|
||||||
this.canvasContext = this.$canvas.getContext('2d', {
|
this.canvasContext = this.$canvas.getContext('2d', {
|
||||||
alpha: false,
|
alpha: false,
|
||||||
willReadFrequently: false,
|
willReadFrequently: false,
|
||||||
|
@ -41,7 +41,7 @@ export class SettingElement {
|
|||||||
for (let value in setting.options) {
|
for (let value in setting.options) {
|
||||||
const label = setting.options[value];
|
const label = setting.options[value];
|
||||||
|
|
||||||
const $option = CE<HTMLOptionElement>('option', {value: value}, label);
|
const $option = CE<HTMLOptionElement>('option', { value }, label);
|
||||||
$parent.appendChild($option);
|
$parent.appendChild($option);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ export class SettingElement {
|
|||||||
for (const value in setting.multipleOptions) {
|
for (const value in setting.multipleOptions) {
|
||||||
const label = setting.multipleOptions[value];
|
const label = setting.multipleOptions[value];
|
||||||
|
|
||||||
const $option = CE<HTMLOptionElement>('option', {value: value}, label) as HTMLOptionElement;
|
const $option = CE<HTMLOptionElement>('option', { value }, label) as HTMLOptionElement;
|
||||||
$option.selected = currentValue.indexOf(value) > -1;
|
$option.selected = currentValue.indexOf(value) > -1;
|
||||||
|
|
||||||
$option.addEventListener('mousedown', function(e) {
|
$option.addEventListener('mousedown', function(e) {
|
||||||
|
@ -9,12 +9,12 @@ type UserAgentConfig = {
|
|||||||
|
|
||||||
const SMART_TV_UNIQUE_ID = 'FC4A1DA2-711C-4E9C-BC7F-047AF8A672EA';
|
const SMART_TV_UNIQUE_ID = 'FC4A1DA2-711C-4E9C-BC7F-047AF8A672EA';
|
||||||
|
|
||||||
let CHROMIUM_VERSION = '123.0.0.0';
|
let CHROMIUM_VERSION = '125.0.0.0';
|
||||||
if (!!(window as any).chrome || window.navigator.userAgent.includes('Chrome')) {
|
if (!!(window as any).chrome || window.navigator.userAgent.includes('Chrome')) {
|
||||||
// Get Chromium version in the original User-Agent value
|
// Get Chromium version in the original User-Agent value
|
||||||
const match = window.navigator.userAgent.match(/\s(?:Chrome|Edg)\/([\d\.]+)/);
|
const match = window.navigator.userAgent.match(/\s(?:Chrome|Edg)\/([\d\.]+)/);
|
||||||
if (match) {
|
if (match) {
|
||||||
CHROMIUM_VERSION = match[1];
|
CHROMIUM_VERSION = match[1] as string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ export function parseDetailsPath(path: string) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const titleSlug = matches.groups.titleSlug.replaceAll('\%' + '7C', '-');
|
const titleSlug = matches.groups.titleSlug!.replaceAll('\%' + '7C', '-');
|
||||||
const productId = matches.groups.productId;
|
const productId = matches.groups.productId;
|
||||||
|
|
||||||
return { titleSlug, productId };
|
return { titleSlug, productId };
|
||||||
|
@ -3,7 +3,7 @@ import { NATIVE_FETCH } from "./bx-flags"
|
|||||||
export class XboxApi {
|
export class XboxApi {
|
||||||
private static CACHED_TITLES: Record<string, string> = {};
|
private static CACHED_TITLES: Record<string, string> = {};
|
||||||
|
|
||||||
static async getProductTitle(xboxTitleId: number | string): Promise<string | null> {
|
static async getProductTitle(xboxTitleId: number | string): Promise<string | undefined> {
|
||||||
xboxTitleId = xboxTitleId.toString();
|
xboxTitleId = xboxTitleId.toString();
|
||||||
if (XboxApi.CACHED_TITLES[xboxTitleId]) {
|
if (XboxApi.CACHED_TITLES[xboxTitleId]) {
|
||||||
return XboxApi.CACHED_TITLES[xboxTitleId];
|
return XboxApi.CACHED_TITLES[xboxTitleId];
|
||||||
@ -20,6 +20,6 @@ export class XboxApi {
|
|||||||
return productTitle;
|
return productTitle;
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,14 +14,14 @@ export class XcloudApi {
|
|||||||
BxLogger.info(this.LOG_TAG, 'constructor()');
|
BxLogger.info(this.LOG_TAG, 'constructor()');
|
||||||
}
|
}
|
||||||
|
|
||||||
async getTitleInfo(id: string): Promise<XcloudTitleInfo | null> {
|
async getTitleInfo(id: string): Promise<XcloudTitleInfo | undefined> {
|
||||||
if (id in this.CACHE_TITLES) {
|
if (id in this.CACHE_TITLES) {
|
||||||
return this.CACHE_TITLES[id];
|
return this.CACHE_TITLES[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
const baseUri = STATES.selectedRegion.baseUri;
|
const baseUri = STATES.selectedRegion.baseUri;
|
||||||
if (!baseUri || !STATES.gsToken) {
|
if (!baseUri || !STATES.gsToken) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let json;
|
let json;
|
||||||
|
@ -116,7 +116,7 @@ export class XcloudInterceptor {
|
|||||||
|
|
||||||
let match = serverRegex.exec(region.baseUri);
|
let match = serverRegex.exec(region.baseUri);
|
||||||
if (match) {
|
if (match) {
|
||||||
shortName = match[1];
|
shortName = match[1] as string;
|
||||||
if (serverExtra[regionName]) {
|
if (serverExtra[regionName]) {
|
||||||
shortName = serverExtra[regionName][0] + ' ' + shortName;
|
shortName = serverExtra[regionName][0] + ' ' + shortName;
|
||||||
region.contintent = serverExtra[regionName][1];
|
region.contintent = serverExtra[regionName][1];
|
||||||
@ -155,10 +155,10 @@ export class XcloudInterceptor {
|
|||||||
const url = (typeof request === 'string') ? request : (request as Request).url;
|
const url = (typeof request === 'string') ? request : (request as Request).url;
|
||||||
const parsedUrl = new URL(url);
|
const parsedUrl = new URL(url);
|
||||||
|
|
||||||
let badgeRegion: string = parsedUrl.host.split('.', 1)[0];
|
let badgeRegion: string = parsedUrl.host.split('.', 1)[0] as string;
|
||||||
for (let regionName in STATES.serverRegions) {
|
for (let regionName in STATES.serverRegions) {
|
||||||
const region = STATES.serverRegions[regionName];
|
const region = STATES.serverRegions[regionName];
|
||||||
if (parsedUrl.origin == region.baseUri) {
|
if (region && parsedUrl.origin === region.baseUri) {
|
||||||
badgeRegion = regionName;
|
badgeRegion = regionName;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ export class XhomeInterceptor {
|
|||||||
XhomeInterceptor.consoleAddrs = {};
|
XhomeInterceptor.consoleAddrs = {};
|
||||||
for (const pair of pairs) {
|
for (const pair of pairs) {
|
||||||
const [keyAddr, keyPort] = pair;
|
const [keyAddr, keyPort] = pair;
|
||||||
if (serverDetails[keyAddr]) {
|
if (keyAddr && keyPort && serverDetails[keyAddr]) {
|
||||||
const port = serverDetails[keyPort];
|
const port = serverDetails[keyPort];
|
||||||
// Add port 9002 to the list of ports
|
// Add port 9002 to the list of ports
|
||||||
const ports = new Set<number>();
|
const ports = new Set<number>();
|
||||||
|
@ -260,6 +260,9 @@ export class BxSelectElement extends HTMLSelectElement {
|
|||||||
for (let i = 0; i < optionsList.length; i++) {
|
for (let i = 0; i < optionsList.length; i++) {
|
||||||
const $option = optionsList[i];
|
const $option = optionsList[i];
|
||||||
const $indicator = indicatorsList[i];
|
const $indicator = indicatorsList[i];
|
||||||
|
if (!$option || !$indicator) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
clearDataSet($indicator);
|
clearDataSet($indicator);
|
||||||
if ($option.selected) {
|
if ($option.selected) {
|
||||||
@ -288,7 +291,7 @@ export class BxSelectElement extends HTMLSelectElement {
|
|||||||
visibleIndex: currentIndex,
|
visibleIndex: currentIndex,
|
||||||
} = this;
|
} = this;
|
||||||
|
|
||||||
const goNext = (e.target as any).closest('button') === $btnNext;
|
const goNext = (e.target as HTMLElement).closest('button') === $btnNext;
|
||||||
|
|
||||||
let newIndex = goNext ? currentIndex + 1 : currentIndex - 1;
|
let newIndex = goNext ? currentIndex + 1 : currentIndex - 1;
|
||||||
if (newIndex > this.optionsList.length - 1) {
|
if (newIndex > this.optionsList.length - 1) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user