reworking for multilingual

This commit is contained in:
karl.hudgell 2020-08-28 16:59:05 +01:00
parent a5b71281b3
commit 688167f88e
6 changed files with 203 additions and 160 deletions

1
app.js
View File

@ -1,4 +1,3 @@
const pages = require('./pages/pages') const pages = require('./pages/pages')
pages.connectWatch(); pages.connectWatch();

View File

@ -1,32 +1,40 @@
{ {
"main_menu_question": "What do you want to do?", "main-menu-question": "What do you want to do?",
"main_menu_item_1": "1-Click Karl0ss Klean", "main-menu-item-1": "1-Click Karl0ss Klean",
"main_menu_item_2": "Remove Xiaomi Apps", "main-menu-item-2": "Remove Xiaomi Apps",
"main_menu_item_3": "Restore Xiaomi Apps", "main-menu-item-3": "Restore Xiaomi Apps",
"main_menu_item_4": "Install Compatible Apps", "main-menu-item-4": "Install Compatible Apps",
"main_menu_item_5": "Restore ANY app", "main-menu-item-5": "Restore ANY app",
"main_menu_item_6": "Batch Install APKs", "main-menu-item-6": "Batch Install APKs",
"main_menu_item_7": "Batch Remove Installed Apps", "main-menu-item-7": "Batch Remove Installed Apps",
"main_menu_item_8": "Quit", "main-menu-item-8": "Quit",
"connection_type_message": "How do you want to connect?", "connection-type-message": "How do you want to connect?",
"connect_wifi_message":"What is your MiWatch IpAdress?", "connect-wifi-message":"What is your MiWatch IpAdress?",
"restore_app_message": "What apps do you want to restore?", "restore-app-message": "What apps do you want to restore?",
"install_compatible_apps_message": "What apps do you want to Install?", "install-compatible-apps-message": "What apps do you want to Install?",
"remove_installed_apps_message": "What Installed apps do you want to remove?", "remove-installed-apps-message": "What Installed apps do you want to remove?",
"restore_any_app_message": "What App do you want to restore?", "restore-any-app-message": "What App do you want to restore?",
"remove_installed_apps_header": "Remove Installed Apps", "header-remove-installed-apps": "Remove Installed Apps",
"packages_recieved_from_watch": "Packages recieved from watch", "packages-recieved-from-watch": "Packages recieved from watch",
"device_not_authorised": "Device not authorised", "device-not-authorised": "Device not authorised",
"restarting_adb": "Restarting ADB", "restarting-adb": "Restarting ADB",
"please_reconnect_to_watch": "Please reconnect to watch", "please-reconnect-to-watch": "Please reconnect to watch",
"remove_installed_apps_failed": "Remove Installed Apps Failed", "remove-installed-apps-failed": "Remove Installed Apps Failed",
"removing": "Removing", "removing": "Removing",
"removal-complete": "Removal Complete",
"installing": "Installing", "installing": "Installing",
"restoring": "Restoring", "restoring": "Restoring",
"remove_selected_user_apps": "Removed Selected User Apps", "remove-selected-user-apps": "Removed Selected User Apps",
"install_compatible_apps_header": "Install Compatible Apps", "install-compatible-apps-header": "Install Compatible Apps",
"simple_weather_activated_on_watch": "simpleWeather Activated On Watch", "simple-weather-activated-on-watch": "simpleWeather Activated On Watch",
"morelocale_activated_on_watch": "moreLocale Activated On Watch", "morelocale-activated-on-watch": "moreLocale Activated On Watch",
"alberto_locale_activated_on_watch": "Alberto Locale Activated On Watch", "alberto-locale-activated-on-watch": "Alberto Locale Activated On Watch",
"compatible_apps_installed": "Compatible Apps Installed" "compatible-apps-installed": "Compatible Apps Installed",
"compatible-apps": "Compatible Apps",
"remove-xiaomi-apps": "Remove Xiaomi Apps",
"downloading-compatible-apps": "Downloading Compatible Apps",
"installing-apps": "Installing Apps",
"downloading-latest": "Downloading Latest",
"complete": "Complete",
"failed": "Failed"
} }

View File

@ -18,8 +18,8 @@ module.exports = {
installApk: async (element) => { installApk: async (element) => {
result = await shellExec(adbRun + ' install -r ' + element).then(async function (result) { result = await shellExec(adbRun + ' install -r ' + element).then(async function (result) {
if (result.stderr != '') { if (result.stderr != '') {
logger.info(await Language.get('device_not_authorised')); logger.info(await Language.get('device-not-authorised'));
console.log(chalk.redBright(await Language.get('device_not_authorised'))); console.log(chalk.redBright(await Language.get('device-not-authorised')));
} }
console.log(element + ' - ' + result.stdout); console.log(element + ' - ' + result.stdout);
logger.info(element + ' - ' + result.stdout); logger.info(element + ' - ' + result.stdout);
@ -29,21 +29,21 @@ module.exports = {
await common.downloadFile('http://kithub.cf/Karl/MiWatchKleaner-APKs/raw/master/Others/simpleweather_split_config.xhdpi.apk', './data/apps/simpleweather_split_config.xhdpi.apk') await common.downloadFile('http://kithub.cf/Karl/MiWatchKleaner-APKs/raw/master/Others/simpleweather_split_config.xhdpi.apk', './data/apps/simpleweather_split_config.xhdpi.apk')
await shellExec(adbRun + ' install-multiple "data\\apps\\simpleweather_base.apk" "data\\apps\\simpleweather_split_config.armeabi_v7a.apk" "data\\apps\\simpleweather_split_config.xhdpi.apk"').then(async function (result) { await shellExec(adbRun + ' install-multiple "data\\apps\\simpleweather_base.apk" "data\\apps\\simpleweather_split_config.armeabi_v7a.apk" "data\\apps\\simpleweather_split_config.xhdpi.apk"').then(async function (result) {
console.log(result) console.log(result)
console.log(await Language.get('simple_weather_activated_on_watch')); console.log(await Language.get('simple-weather-activated-on-watch'));
logger.info(await Language.get('simple_weather_activated_on_watch')); logger.info(await Language.get('simple-weather-activated-on-watch'));
}) })
} }
if (element === "data\\apps\\MoreLocale.apk") { if (element === "data\\apps\\MoreLocale.apk") {
await shellExec(adbRun + ' shell pm grant jp.co.c_lis.ccl.morelocale android.permission.CHANGE_CONFIGURATION').then(async function (result) { await shellExec(adbRun + ' shell pm grant jp.co.c_lis.ccl.morelocale android.permission.CHANGE_CONFIGURATION').then(async function (result) {
console.log(await Language.get('morelocale_activated_on_watch')); console.log(await Language.get('morelocale-activated-on-watch'));
logger.info(await Language.get('morelocale_activated_on_watch')); logger.info(await Language.get('morelocale-activated-on-watch'));
}) })
} }
if (element === "data\\apps\\com.alberto.locale.apk") { if (element === "data\\apps\\com.alberto.locale.apk") {
await shellExec(adbRun + ' shell pm grant com.alberto.locale android.permission.CHANGE_CONFIGURATION && ' + adbRun + ' shell am start -n com.alberto.locale/com.alberto.locale.MainActivity && ' + adbRun + ' shell pm grant com.alberto.locale android.permission.CHANGE_CONFIGURATION').then(async function (result) { await shellExec(adbRun + ' shell pm grant com.alberto.locale android.permission.CHANGE_CONFIGURATION && ' + adbRun + ' shell am start -n com.alberto.locale/com.alberto.locale.MainActivity && ' + adbRun + ' shell pm grant com.alberto.locale android.permission.CHANGE_CONFIGURATION').then(async function (result) {
console.log(result) console.log(result)
console.log(await Language.get('alberto_locale_activated_on_watch')); console.log(await Language.get('alberto-locale-activated-on-watch'));
logger.info(await Language.get('alberto_locale_activated_on_watch')); logger.info(await Language.get('alberto-locale-activated-on-watch'));
}); });
} }
}); });
@ -93,17 +93,17 @@ module.exports = {
}, },
getInstalledPacakges: async () => { getInstalledPacakges: async () => {
result = await shellExec(adbRun + ' shell pm list packages -3') result = await shellExec(adbRun + ' shell pm list packages -3')
logger.info(await Language.get('packages_recieved_from_watch')) logger.info(await Language.get('packages-recieved-from-watch'))
if (result.stderr.includes('error')) { if (result.stderr.includes('error')) {
logger.info(result.stderr) logger.info(result.stderr)
console.log(chalk.red(await Language.get('device_not_authorised'))) console.log(chalk.red(await Language.get('device-not-authorised')))
common.pause(3000) common.pause(3000)
await shellExec(adbRun + ' kill-server').then(async function (result) { await shellExec(adbRun + ' kill-server').then(async function (result) {
logger.info(await Language.get('restarting_adb')) logger.info(await Language.get('restarting-adb'))
logger.info(result.stdout) logger.info(result.stdout)
console.log(await Language.get('please_reconnect_to_watch')) console.log(await Language.get('please-reconnect-to-watch'))
common.pause(3000) common.pause(3000)
logger.info(await Language.get('remove_installed_apps_failed')) logger.info(await Language.get('remove-installed-apps-failed'))
module.exports.mainMenu() module.exports.mainMenu()
}) })
} else { } else {

View File

@ -5,11 +5,13 @@ const fs = require('fs')
var pjson = require('../package.json'); var pjson = require('../package.json');
const fetch = require('node-fetch'); const fetch = require('node-fetch');
var shell = require('shelljs'); var shell = require('shelljs');
const logger = require('perfect-logger');
const Language = require("@shypes/language-translator");
const globalVariables = require('../lib/globalVars'); const globalVariables = require('../lib/globalVars');
module.exports = { module.exports = {
header: (page) => { header: async (page) => {
clear(); clear();
console.log( console.log(
chalk.red( chalk.red(
@ -26,7 +28,7 @@ module.exports = {
'-------------------------------------------------------------------------------------------------------' '-------------------------------------------------------------------------------------------------------'
) )
) )
console.log(chalk.blue(page)) console.log(chalk.blue(await Language.get(page)))
module.exports.connectionCheck() module.exports.connectionCheck()
console.log(chalk.red('----------')) console.log(chalk.red('----------'))
}, },
@ -66,4 +68,27 @@ module.exports = {
clearApkFolder: async () => { clearApkFolder: async () => {
await shell.rm('-rf', './data/apps/*.apk'); await shell.rm('-rf', './data/apps/*.apk');
}, },
log: async (item) => {
logger.info(await Language.get(item, 'en'))
},
print: async (item, colour) => {
switch (colour) {
case 'green':
console.log(chalk.green(await Language.get(item)))
break;
case 'red':
console.log(chalk.redBright(await Language.get(item)))
break;
case 'whiteBright':
console.log(chalk.whiteBright(await Language.get(item)))
break;
default:
console.log(chalk.white(await Language.get(item)))
break;
}
},
dualLog: async (item, colour) => {
await module.exports.log(item)
await module.exports.print(item, colour)
}
} }

View File

@ -16,16 +16,16 @@ module.exports = {
const questions = [{ const questions = [{
type: "list", type: "list",
name: "mainMenu", name: "mainMenu",
message: await Language.get('main_menu_question'), message: await Language.get('main-menu-question'),
choices: [ choices: [
await Language.get('main_menu_item_1'), await Language.get('main-menu-item-1'),
await Language.get('main_menu_item_2'), await Language.get('main-menu-item-2'),
await Language.get('main_menu_item_3'), await Language.get('main-menu-item-3'),
await Language.get('main_menu_item_4'), await Language.get('main-menu-item-4'),
await Language.get('main_menu_item_5'), await Language.get('main-menu-item-5'),
await Language.get('main_menu_item_6'), await Language.get('main-menu-item-6'),
await Language.get('main_menu_item_7'), await Language.get('main-menu-item-7'),
await Language.get('main_menu_item_8'), await Language.get('main-menu-item-8'),
], ],
filter: function (val) { filter: function (val) {
return val.toLowerCase(); return val.toLowerCase();
@ -37,7 +37,7 @@ module.exports = {
const questions = [{ const questions = [{
type: "list", type: "list",
name: "connection", name: "connection",
message: await Language.get('connection_type_message'), message: await Language.get('connection-type-message'),
choices: [ choices: [
"USB", "USB",
"Wifi" "Wifi"
@ -52,7 +52,7 @@ module.exports = {
const questions = [{ const questions = [{
type: "input", type: "input",
name: "connectWifi", name: "connectWifi",
message: await Language.get('connect_wifi_message'), message: await Language.get('connect-wifi-message'),
},]; },];
return inquirer.prompt(questions); return inquirer.prompt(questions);
}, },
@ -62,7 +62,7 @@ module.exports = {
const questions = [{ const questions = [{
type: "checkbox", type: "checkbox",
name: "removeAppsList", name: "removeAppsList",
message: await Language.get('restore_app_message'), message: await Language.get('restore-app-message'),
choices: packages.apps, choices: packages.apps,
},]; },];
return inquirer.prompt(questions); return inquirer.prompt(questions);
@ -76,7 +76,7 @@ module.exports = {
const questions = [{ const questions = [{
type: "checkbox", type: "checkbox",
name: "removeAppsList", name: "removeAppsList",
message: await Language.get('install_compatible_apps_message'), message: await Language.get('install-compatible-apps-message'),
choices: appList, choices: appList,
},]; },];
return inquirer.prompt(questions); return inquirer.prompt(questions);
@ -85,7 +85,7 @@ module.exports = {
const questions = [{ const questions = [{
type: "checkbox", type: "checkbox",
name: "removeAppsList", name: "removeAppsList",
message: await Language.get('remove_installed_apps_message'), message: await Language.get('remove-installed-apps-message'),
choices: installedApps, choices: installedApps,
},]; },];
return inquirer.prompt(questions); return inquirer.prompt(questions);
@ -94,7 +94,7 @@ module.exports = {
const questions = [{ const questions = [{
type: "input", type: "input",
name: "restoreAnyApp", name: "restoreAnyApp",
message: await Language.get('restore_any_app_message'), message: await Language.get('restore-any-app-message'),
},]; },];
return inquirer.prompt(questions); return inquirer.prompt(questions);
}, },

View File

@ -20,27 +20,78 @@ logger.initialize('RunTIme', {
}); });
module.exports = { module.exports = {
removeCompatibleApps: async () => { oneClick: async () => {
common.header(await Language.get('remove_installed_apps_header')) common.log('main-menu-item-1')
logger.info(await Language.get('remove_installed_apps_header')) common.header('main-menu-item-1')
common.print('remove-xiaomi-apps', 'whiteBright')
value = await adb.getInstalledPacakges() const removalPackagesList = files.loadPackageList()
for (let package of removalPackagesList.apps) {
for (let element of value.removeAppsList) { await adb.removeXiaomiApk(package)
console.log(await Language.get('removing') + ' ' + element)
logger.info(await Language.get('removing') + ' ' + element)
const package = element.substring(8)
await adb.removeApk(package)
} }
console.log(chalk.green(await Language.get('remove_selected_user_apps'))) common.print('removal-complete', 'green')
logger.info(await Language.get('remove_selected_user_apps')) await common.pause(2000)
common.log('removal-complete')
common.log('compatible-apps')
await common.clearApkFolder()
const compatibleApps = await common.getCompatibleAppsList()
console.log(chalk.whiteBright('----------'))
common.print('downloading-compatible-apps', 'whiteBright')
for (const package of compatibleApps) {
if (package.Klean === "X") {
try {
newPacakgeName = package.name.replace(/\s/g, '');
await common.downloadFile(package.url, './data/apps/' + newPacakgeName + '.apk')
logger.info(await Language.get('downloading-latest', 'en') + ' ' + package.name + ' ' + chalk.green(await Language.get('complete', 'en')))
console.log(await Language.get('downloading-latest') + ' ' + package.name + ' ' + await Language.get('complete'))
} catch (error) {
logger.info(await Language.get('downloading-latest', 'en') + ' ' + package.name + ' ' + chalk.red(await Language.get('failed', 'en')))
console.log(await Language.get('downloading-latest') + ' ' + package.name + ' ' + await Language.get('failed'))
}
}
}
const apkList = await files.getListOfAPk('./data/apps')
console.log(chalk.whiteBright('----------'))
common.print('installing-apps', 'whiteBright')
for (let element of apkList) {
await adb.installApk(element)
}
common.dualLog('compatible-apps-installed', 'green')
await common.pause(2000) await common.pause(2000)
module.exports.mainMenu() module.exports.mainMenu()
}, },
removeXiaomiApps: async () => {
common.header(await Language.get('main-menu-item-2'))
common.log('main-menu-item-2', 'green')
const value = await inquirer.removeAppsList();
for (let package of value.removeAppsList) {
await adb.removeXiaomiApk(package)
}
common.dualLog('removal-complete', 'green')
await common.pause(2000)
module.exports.mainMenu()
},
restoreXiaomiApps: async () => {
logger.info("Restore Apps")
common.header('Restore Apps')
const value = await inquirer.removeAppsList();
for (let package of value.removeAppsList) {
await adb.restoreXiaomiApk(package)
}
console.log(chalk.green('Restore Complete'))
await common.pause(2000)
logger.info("Restore Apps Complete")
module.exports.mainMenu()
},
installCompatibleApps: async () => { installCompatibleApps: async () => {
logger.info(await Language.get('install_compatible_apps_header')) logger.info(await Language.get('install-compatible-apps-header', 'en'))
common.header(await Language.get('install_compatible_apps_header')) common.header(await Language.get('install-compatible-apps-header'))
const compatibleApps = await common.getCompatibleAppsList() const compatibleApps = await common.getCompatibleAppsList()
const value = await inquirer.compatibleApps(); const value = await inquirer.compatibleApps();
@ -60,88 +111,15 @@ module.exports = {
for (let package of apkList) { for (let package of apkList) {
console.log(await Language.get('installing') + ' ' + package) console.log(await Language.get('installing') + ' ' + package)
logger.info(await Language.get('installing') + ' ' + package) logger.info(await Language.get('installing', 'en') + ' ' + package)
await adb.installApk(package) await adb.installApk(package)
} }
console.log(chalk.green(await Language.get('compatible_apps_installed'))) console.log(chalk.green(await Language.get('compatible-apps-installed')))
logger.info(await Language.get('compatible_apps_installed')) logger.info(await Language.get('compatible-apps-installed', 'en'))
await common.pause(2000) await common.pause(2000)
module.exports.mainMenu() module.exports.mainMenu()
}, },
removeApps: async () => {
logger.info("Remove Apps")
common.header('Remove Apps')
const value = await inquirer.removeAppsList();
for (let package of value.removeAppsList) {
await adb.removeXiaomiApk(package)
}
console.log(chalk.green('Removal Complete'))
await common.pause(2000)
logger.info("Remove Complete")
module.exports.mainMenu()
},
restoreApps: async () => {
logger.info("Restore Apps")
common.header('Restore Apps')
const value = await inquirer.removeAppsList();
for (let package of value.removeAppsList) {
await adb.restoreXiaomiApk(package)
}
console.log(chalk.green('Restore Complete'))
await common.pause(2000)
logger.info("Restore Apps Complete")
module.exports.mainMenu()
},
connectWatch: async () => {
logger.info("Connect to watch")
common.header('Connect to watch')
const value = await inquirer.connectionType()
connected = await adb.watchConnection(value)
if (connected != true) {
module.exports.connectWatch()
} else {
module.exports.mainMenu()
}
},
oneClick: async () => {
logger.info("1-Click Karl0ss Klean")
common.header('1-Click Karl0ss Klean')
const removalPackagesList = files.loadPackageList()
for (let package of removalPackagesList.apps) {
await adb.removeXiaomiApk(package)
}
console.log(chalk.green('Removal Complete'))
await common.pause(2000)
logger.info("Remove Complete")
logger.info("Compatible Apps")
await common.clearApkFolder()
const compatibleApps = await common.getCompatibleAppsList()
console.log(chalk.green('Download Compatible APKS'))
for (const package of compatibleApps) {
if (package.Klean === "X") {
try {
newPacakgeName = package.name.replace(/\s/g, '');
await common.downloadFile(package.url, './data/apps/' + newPacakgeName + '.apk')
logger.info('Downloading Latest ' + package.name + ' Complete')
console.log('Downloading Latest ' + package.name + ' Complete')
} catch (error) {
logger.info('Downloading Latest ' + package.name + ' FAILED')
}
}
}
const apkList = await files.getListOfAPk('./data/apps')
console.log(chalk.green('Install Apks'))
for (let element of apkList) {
await adb.installApk(element)
}
console.log(chalk.green('Compatible Apps Installed'))
logger.info('Compatible Apps Installed')
await common.pause(2000)
module.exports.mainMenu()
},
restoreAnyApp: async () => { restoreAnyApp: async () => {
logger.info("Restore Any App") logger.info("Restore Any App")
common.header('Restore Any App') common.header('Restore Any App')
@ -152,13 +130,14 @@ module.exports = {
logger.info("App Restore Complete") logger.info("App Restore Complete")
module.exports.mainMenu() module.exports.mainMenu()
}, },
batchInstallApks: async () => { batchInstallApks: async () => {
logger.info("Batch Install Apks") logger.info("Batch Install Apks")
common.header('Batch Install Apks') common.header('Batch Install Apks')
let apkList = await files.getListOfAPk('./my_apk/') let apkList = await files.getListOfAPk('./my-apk/')
await files.renameLocalApk(apkList) await files.renameLocalApk(apkList)
apkList = await files.getListOfAPk('./my_apk/') apkList = await files.getListOfAPk('./my-apk/')
for (let element of apkList) { for (let element of apkList) {
console.log('Installing ' + element) console.log('Installing ' + element)
@ -170,34 +149,66 @@ module.exports = {
await common.pause(2000) await common.pause(2000)
module.exports.mainMenu() module.exports.mainMenu()
}, },
batchRemoveInstalledApps: async () => {
common.header(await Language.get('header-remove-installed-apps'))
logger.info(await Language.get('header-remove-installed-apps', 'en'))
value = await adb.getInstalledPacakges()
for (let element of value.removeAppsList) {
console.log(await Language.get('removing') + ' ' + element)
logger.info(await Language.get('removing') + ' ' + element)
const package = element.substring(8)
await adb.removeApk(package)
}
console.log(chalk.green(await Language.get('remove-selected-user-apps')))
logger.info(await Language.get('remove-selected-user-apps', 'en'))
await common.pause(2000)
module.exports.mainMenu()
},
connectWatch: async () => {
logger.info("Connect to watch")
common.header('Connect to watch')
const value = await inquirer.connectionType()
connected = await adb.watchConnection(value)
if (connected != true) {
module.exports.connectWatch()
} else {
module.exports.mainMenu()
}
},
mainMenu: async () => { mainMenu: async () => {
common.header('Main Menu') common.header('Main Menu')
const mainMenuSelection = await inquirer.mainMenu(); const mainMenuSelection = await inquirer.mainMenu();
switch (mainMenuSelection.mainMenu) { switch (mainMenuSelection.mainMenu) {
case 'connect to miwatch':
module.exports.connectWatch()
break;
case '1-click karl0ss klean': case '1-click karl0ss klean':
module.exports.oneClick() module.exports.oneClick()
break; break;
case 'remove xiaomi apps': case 'remove xiaomi apps':
module.exports.removeApps() module.exports.removeXiaomiApps()
break; break;
case 'restore xiaomi apps': case 'restore xiaomi apps':
module.exports.restoreApps() module.exports.restoreXiaomiApps()
break; break;
case 'install compatible apps': case 'install compatible apps':
module.exports.installCompatibleApps() module.exports.installCompatibleApps()
break; break;
case 'batch remove installed apps':
module.exports.removeCompatibleApps()
break;
case 'restore any app': case 'restore any app':
module.exports.restoreAnyApp() module.exports.restoreAnyApp()
break; break;
case 'batch install apks': case 'batch install apks':
module.exports.batchInstallApks() module.exports.batchInstallApks()
break; break;
case 'batch remove installed apps':
module.exports.batchRemoveInstalledApps()
break;
case 'connect to miwatch':
module.exports.connectWatch()
break;
case 'quit': case 'quit':
break; break;
default: default: