diff --git a/src/ts/index.ts b/src/ts/index.ts index 371a28a..4c5c273 100644 --- a/src/ts/index.ts +++ b/src/ts/index.ts @@ -26,7 +26,7 @@ if (!fs.existsSync(constants.dxvksDir)) $(() => { if (LauncherLib.version !== null) - document.title = `${constants.gamePlaceholder.uppercase.full} Linux Launcher - ${LauncherLib.version}`; + document.title = `${constants.placeholders.uppercase.full} Linux Launcher - ${LauncherLib.version}`; // On Start configuration of LauncherUI LauncherUI.updateLang(LauncherLib.getConfig('lang.launcher') ?? 'en-us'); @@ -102,7 +102,7 @@ $(() => { }); });*/ - Tools.getGitTags('https://notabug.org/nobody/an-anime-game-launcher').then (tags => { + Tools.getGitTags(constants.uri.launcher).then (tags => { if (tags.filter(entry => semver.gt(entry.tag, launcher_version)).length > 0) { ipcRenderer.send('notification', { @@ -194,11 +194,11 @@ $(() => { if (!await LauncherLib.isTelemetryDisabled()) { - console.log('miHoYo\'s telemetry servers doesn\'t disabled!'); + console.log(`${constants.placeholders.uppercase.company}'s telemetry servers doesn't disabled!`); ipcRenderer.send('notification', { - title: document.title, - body: 'miHoYo\'s telemetry servers doesn\'t disabled!' + title: document.title, // FIXME add translation + body: `${constants.placeholders.uppercase.company}'s telemetry servers doesn't disabled!` }); } @@ -372,23 +372,29 @@ $(() => { // Patch available if (patchInfo.version === data.game.latest.version) { - // TODO: check the patch state + // ..but it's in testing state + if (patchInfo.state === 'testing') + LauncherUI.setState('test-patch-available'); - console.log(`%c> Applying patch...`, 'font-size: 16px'); + // Otherwise it's fully released and tested and we can auto-install it + else + { + console.log(`%c> Applying patch...`, 'font-size: 16px'); - // patch-applying state changes only button text - $('#downloaded').text(LauncherUI.i18n.translate('ApplyPatch')); - $('#speed').text(''); - $('#eta').text(''); + // patch-applying state changes only button text + $('#downloaded').text(LauncherUI.i18n.translate('ApplyPatch')); + $('#speed').text(''); + $('#eta').text(''); - LauncherLib.patchGame(() => { - LauncherUI.setState('game-launch-available'); + LauncherLib.patchGame(() => { + LauncherUI.setState('game-launch-available'); - ipcRenderer.send('notification', { - title: document.title, - body: LauncherUI.i18n.translate('GameDownloaded') - }); - }, data => console.log(data.toString())); + ipcRenderer.send('notification', { + title: document.title, + body: LauncherUI.i18n.translate('GameDownloaded') + }); + }, data => console.log(data.toString())); + } } // Patch is not available diff --git a/src/ts/lib/LauncherLib.ts b/src/ts/lib/LauncherLib.ts index cf2562b..a209cab 100644 --- a/src/ts/lib/LauncherLib.ts +++ b/src/ts/lib/LauncherLib.ts @@ -161,11 +161,11 @@ export class LauncherLib this.getData().then(data => { let gameLatest: string = data.game.latest.version; - fetch(`https://notabug.org/Krock/GI-on-Linux/raw/master/${gameLatest.replaceAll('.', '')}/patch.sh`) + fetch(`${constants.uri.patch}/raw/master/${gameLatest.replaceAll('.', '')}/patch.sh`) .then(response => response.text()) .then((patch: string) => { // patch.sh exists so patch in testing, stable or it's just a preparation - fetch(`https://notabug.org/Krock/GI-on-Linux/raw/master/${gameLatest.replaceAll('.', '')}/patch_files/unityplayer_patch.vcdiff`) + fetch(`${constants.uri.patch}/raw/master/${gameLatest.replaceAll('.', '')}/patch_files/unityplayer_patch.vcdiff`) .then(response => response.text()) .then((unityPatch: string) => { // unityplayer_patch exists so it's testing or stable @@ -195,33 +195,15 @@ export class LauncherLib }); } - /** - * 0.0.0.0 log-upload-os.mihoyo.com - * 0.0.0.0 overseauspider.yuanshen.com - */ - public static isTelemetryDisabled (): Promise + public static isTelemetryDisabled (domainNum: number = 0): Promise { return new Promise((resolve, reject) => { - dns.lookup('log-upload-os.mihoyo.com', (error: any, address: string, family: any) => { - if (error) - reject(error); - - else - { - if (address != '0.0.0.0') - resolve(false); + Tools.domainAvailable(constants.uri.telemetry[domainNum]).then(async (status) => { + if (constants.uri.telemetry[++domainNum] !== undefined) + status &&= await this.isTelemetryDisabled(domainNum); - else - { - dns.lookup('log-upload-os.mihoyo.com', (error: any, address: string, family: any) => { - if (error) - reject(error); - - else resolve(address == '0.0.0.0'); - }); - } - } - }); + resolve(status); + }).catch(reject); }); } diff --git a/src/ts/lib/LauncherUI.ts b/src/ts/lib/LauncherUI.ts index 2e0d847..b685f71 100644 --- a/src/ts/lib/LauncherUI.ts +++ b/src/ts/lib/LauncherUI.ts @@ -14,7 +14,7 @@ type LauncherState = export class LauncherUI { - public static readonly socialUri = `https://${constants.gamePlaceholder.lowercase.first}.${constants.gamePlaceholder.lowercase.company}.com/launcher/10/${LauncherLib.getConfig('lang.launcher')}?api_url=https%3A%2F%2Fapi-os-takumi.${constants.gamePlaceholder.lowercase.company}.com%2Fhk4e_global&prev=false`; + public static readonly socialUri = `https://${constants.placeholders.lowercase.first}.${constants.placeholders.lowercase.company}.com/launcher/10/${LauncherLib.getConfig('lang.launcher')}?api_url=https%3A%2F%2Fapi-os-takumi.${constants.placeholders.lowercase.company}.com%2Fhk4e_global&prev=false`; protected static _launcherState: LauncherState = 'game-launch-available'; protected static _i18n: any; diff --git a/src/ts/lib/Tools.ts b/src/ts/lib/Tools.ts index 2a36532..03747c5 100644 --- a/src/ts/lib/Tools.ts +++ b/src/ts/lib/Tools.ts @@ -2,6 +2,7 @@ const https = require('follow-redirects').https; const fs = require('fs'); const path = require('path'); +const dns = require('dns'); const { spawn } = require('child_process'); type GitTag = { tag: string, commit: string }; @@ -33,6 +34,20 @@ export class Tools }); } + public static async domainAvailable (uri: string): Promise + { + return new Promise((resolve, reject) => { + dns.lookup(uri, (error: any, address: string, family: any) => { + console.log(`${uri} -> ${address}`); + + if (error) + reject(error); + + else resolve(address == '0.0.0.0'); + }); + }); + } + public static async downloadFile (uri: string, savePath: string, progress: (current: number, total: number, difference: number) => void): Promise { return new Promise((resolve, reject) => { diff --git a/src/ts/lib/constants.ts b/src/ts/lib/constants.ts index 1971e62..045e65a 100644 --- a/src/ts/lib/constants.ts +++ b/src/ts/lib/constants.ts @@ -3,12 +3,13 @@ const os = require('os'); export class constants { - public static readonly gamePlaceholder = { + public static readonly placeholders = { uppercase: { first: Buffer.from('R2Vuc2hpbg==', 'base64').toString(), second: Buffer.from('SW1wYWN0', 'base64').toString(), - full: Buffer.from('R2Vuc2hpbiBJbXBhY3Q=', 'base64').toString() + full: Buffer.from('R2Vuc2hpbiBJbXBhY3Q=', 'base64').toString(), + company: Buffer.from('bWlIb1lv', 'base64').toString() }, lowercase: @@ -18,18 +19,28 @@ export class constants } }; + public static readonly uri = { + api: `https://sdk-os-static.${this.placeholders.lowercase.company}.com/hk4e_global/mdk/launcher/api`, + patch: 'https://notabug.org/Krock/GI-on-Linux', + launcher: 'https://notabug.org/nobody/an-anime-game-launcher', + telemetry: [ + `log-upload-os.${this.placeholders.lowercase.company}.com`, + 'overseauspider.yuanshen.com' + ] + }; + public static readonly launcherDir: string = path.join(os.homedir(), '.local', 'share', 'anime-game-launcher'); public static readonly prefixDir: string = path.join(this.launcherDir, 'game'); - public static readonly gameDir: string = path.join(this.prefixDir, 'drive_c', 'Program Files', this.gamePlaceholder.uppercase.full); + public static readonly gameDir: string = path.join(this.prefixDir, 'drive_c', 'Program Files', this.placeholders.uppercase.full); public static readonly runnersDir: string = path.join(this.launcherDir, 'runners'); public static readonly dxvksDir: string = path.join(this.launcherDir, 'dxvks'); - public static readonly versionsUri: string = `https://sdk-os-static.${this.gamePlaceholder.lowercase.company}.com/hk4e_global/mdk/launcher/api/resource?key=gcStgarh&launcher_id=10`; - public static readonly backgroundUri: string = `https://sdk-os-static.${this.gamePlaceholder.lowercase.company}.com/hk4e_global/mdk/launcher/api/content?filter_adv=true&launcher_id=10&language=`; + public static readonly versionsUri: string = `${this.uri.api}/resource?key=gcStgarh&launcher_id=10`; + public static readonly backgroundUri: string = `${this.uri.api}/content?filter_adv=true&launcher_id=10&language=`; - public static readonly patchUri: string = 'https://notabug.org/Krock/GI-on-Linux/archive/master.zip'; + public static readonly patchUri: string = `${this.uri.patch}/archive/master.zip`; - public static readonly runnersUri: string = 'https://notabug.org/nobody/an-anime-game-launcher/raw/main/runners.json'; - public static readonly dxvksUri: string = 'https://notabug.org/nobody/an-anime-game-launcher/raw/main/dxvks.json'; + public static readonly runnersUri: string = `${this.uri.launcher}/raw/main/runners.json`; + public static readonly dxvksUri: string = `${this.uri.launcher}/raw/main/dxvks.json`; }