From 07fbb13b42cf0ba36e1b3bcfc91a0e4273ed48d6 Mon Sep 17 00:00:00 2001 From: Observer KRypt0n_ Date: Sun, 18 Jun 2023 09:54:21 +0200 Subject: [PATCH] feat: added telemetry disabling state support --- CHANGELOG.md | 4 ++ Cargo.lock | 8 ++-- Cargo.toml | 2 +- assets/locales/de/errors.ftl | 4 ++ assets/locales/en/errors.ftl | 4 ++ assets/locales/es/errors.ftl | 4 ++ assets/locales/fr/errors.ftl | 4 ++ assets/locales/hu/errors.ftl | 4 ++ assets/locales/id/errors.ftl | 4 ++ assets/locales/it/errors.ftl | 4 ++ assets/locales/ja/errors.ftl | 4 ++ assets/locales/ru/errors.ftl | 4 ++ assets/locales/tr/errors.ftl | 4 ++ assets/locales/zh-cn/errors.ftl | 4 ++ src/ui/main/disable_telemetry.rs | 68 ++++++++++++++++++++++++++++++++ src/ui/main/mod.rs | 8 ++++ 16 files changed, 129 insertions(+), 5 deletions(-) create mode 100644 src/ui/main/disable_telemetry.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 7785177..b3af4b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Added telemetry disabling state support + ### Changed - Replaced xlua patch by "disable mhypbase" option diff --git a/Cargo.lock b/Cargo.lock index e26482a..8da27f1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -48,8 +48,8 @@ dependencies = [ [[package]] name = "anime-game-core" -version = "1.13.0" -source = "git+https://github.com/an-anime-team/anime-game-core?tag=1.13.0#440dca2cca2e5109468751033c566ab0777324e2" +version = "1.13.1" +source = "git+https://github.com/an-anime-team/anime-game-core?tag=1.13.1#e8b99564f4ea12a331aa276ea91fe65c0ead465e" dependencies = [ "anyhow", "bzip2", @@ -96,8 +96,8 @@ dependencies = [ [[package]] name = "anime-launcher-sdk" -version = "1.8.0" -source = "git+https://github.com/an-anime-team/anime-launcher-sdk?tag=1.8.0#01486e00a49c1ee7c78eaf81290136ae3ba69520" +version = "1.8.1" +source = "git+https://github.com/an-anime-team/anime-launcher-sdk?tag=1.8.1#6f6343df58a7801311c1fc9203172278901e8baf" dependencies = [ "anime-game-core", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index 97f435c..4ae9d30 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,7 @@ glib-build-tools = "0.17" [dependencies.anime-launcher-sdk] git = "https://github.com/an-anime-team/anime-launcher-sdk" -tag = "1.8.0" +tag = "1.8.1" features = ["all", "genshin", "genshin-patch"] # path = "../anime-launcher-sdk" # ! for dev purposes only diff --git a/assets/locales/de/errors.ftl b/assets/locales/de/errors.ftl index 81674fb..75ae1e8 100644 --- a/assets/locales/de/errors.ftl +++ b/assets/locales/de/errors.ftl @@ -42,6 +42,10 @@ patch-sync-failed = Synchronisierung des Patch-Ordners fehlgeschlagen patch-state-check-failed = Status des Patchordners konnte nicht überprüft werden game-patching-error = Spiel konnte nicht gepatcht werden +# Disable telemetry + +telemetry-servers-disabling-error = Failed to disable telemetry servers + # Sandbox documentation-url-open-failed = Dokumentations-URL kann nicht geöffnet werden diff --git a/assets/locales/en/errors.ftl b/assets/locales/en/errors.ftl index e915a0c..6bfe318 100644 --- a/assets/locales/en/errors.ftl +++ b/assets/locales/en/errors.ftl @@ -42,6 +42,10 @@ patch-sync-failed = Failed to sync patch folder patch-state-check-failed = Failed to check patch folder state game-patching-error = Failed to patch game +# Disable telemetry + +telemetry-servers-disabling-error = Failed to disable telemetry servers + # Sandbox documentation-url-open-failed = Failed to open documentation URL diff --git a/assets/locales/es/errors.ftl b/assets/locales/es/errors.ftl index f2ad594..3f98beb 100644 --- a/assets/locales/es/errors.ftl +++ b/assets/locales/es/errors.ftl @@ -42,6 +42,10 @@ patch-sync-failed = Fallo al sincronizar carpeta del parche patch-state-check-failed = Fallo al comprobar estado de carpeta del parche game-patching-error = Fallo al parchear el juego +# Disable telemetry + +telemetry-servers-disabling-error = Failed to disable telemetry servers + # Sandbox documentation-url-open-failed = Failed to open documentation URL diff --git a/assets/locales/fr/errors.ftl b/assets/locales/fr/errors.ftl index ae038a6..07f391c 100644 --- a/assets/locales/fr/errors.ftl +++ b/assets/locales/fr/errors.ftl @@ -42,6 +42,10 @@ patch-sync-failed = Impossible de synchroniser le patch patch-state-check-failed = Impossible de déterminer l'état du patch game-patching-error = Le patch du jeu a échoué +# Disable telemetry + +telemetry-servers-disabling-error = Failed to disable telemetry servers + # Sandbox documentation-url-open-failed = Failed to open documentation URL diff --git a/assets/locales/hu/errors.ftl b/assets/locales/hu/errors.ftl index 198babd..f12cb9f 100644 --- a/assets/locales/hu/errors.ftl +++ b/assets/locales/hu/errors.ftl @@ -42,6 +42,10 @@ patch-sync-failed = Patch mappa szinkronizálása sikertelen patch-state-check-failed = Patch mappa állapota ellenőrzése sikertelen game-patching-error = Sikertelen játék patchelés +# Disable telemetry + +telemetry-servers-disabling-error = Failed to disable telemetry servers + # Sandbox documentation-url-open-failed = Failed to open documentation URL diff --git a/assets/locales/id/errors.ftl b/assets/locales/id/errors.ftl index 4579fb8..b2a0523 100644 --- a/assets/locales/id/errors.ftl +++ b/assets/locales/id/errors.ftl @@ -42,6 +42,10 @@ patch-sync-failed = Gagal mensinkronisasi folder patch patch-state-check-failed = Gagal mengecek kondisi folder patch game-patching-error = Gagal melakukan patch pada game +# Disable telemetry + +telemetry-servers-disabling-error = Failed to disable telemetry servers + # Sandbox documentation-url-open-failed = Gagal membuka tautan dokumentasi diff --git a/assets/locales/it/errors.ftl b/assets/locales/it/errors.ftl index 1f8a8eb..bddb3d6 100644 --- a/assets/locales/it/errors.ftl +++ b/assets/locales/it/errors.ftl @@ -42,6 +42,10 @@ patch-sync-failed = Sincronizzazione della cartella della patch non riuscita patch-state-check-failed = Controllo dello stato della cartella della patch non riuscito game-patching-error = Patching del gioco non riuscito +# Disable telemetry + +telemetry-servers-disabling-error = Failed to disable telemetry servers + # Sandbox documentation-url-open-failed = Apertura dell'URL della documentazione non riuscita diff --git a/assets/locales/ja/errors.ftl b/assets/locales/ja/errors.ftl index 515213b..933375e 100644 --- a/assets/locales/ja/errors.ftl +++ b/assets/locales/ja/errors.ftl @@ -42,6 +42,10 @@ patch-sync-failed = パッチフォルダの同期に失敗しました patch-state-check-failed = パッチフォルダの状態を確認するのに失敗しました game-patching-error = ゲームのパッチに失敗しました。 +# Disable telemetry + +telemetry-servers-disabling-error = Failed to disable telemetry servers + # Sandbox documentation-url-open-failed = ドキュメントページを開けませんでした。 diff --git a/assets/locales/ru/errors.ftl b/assets/locales/ru/errors.ftl index a08f379..2296ef4 100644 --- a/assets/locales/ru/errors.ftl +++ b/assets/locales/ru/errors.ftl @@ -42,6 +42,10 @@ patch-sync-failed = Ошибка синхронизации папки патч patch-state-check-failed = Ошибка проверки статуса папки патча game-patching-error = Не удалось установить патч игры +# Disable telemetry + +telemetry-servers-disabling-error = Failed to disable telemetry servers + # Sandbox documentation-url-open-failed = Не удалось открыть ссылку с документацией diff --git a/assets/locales/tr/errors.ftl b/assets/locales/tr/errors.ftl index fd28543..3f29468 100644 --- a/assets/locales/tr/errors.ftl +++ b/assets/locales/tr/errors.ftl @@ -42,6 +42,10 @@ patch-sync-failed = Yama dosyalarını senkronize etme başarısız oldu patch-state-check-failed = Yama dosyalarının durumunu kontrol etme başarısız oldu game-patching-error = Yamayı uygulamada sorun çıktı +# Disable telemetry + +telemetry-servers-disabling-error = Failed to disable telemetry servers + # Sandbox documentation-url-open-failed = Belgelemenin URL'si açılamadı diff --git a/assets/locales/zh-cn/errors.ftl b/assets/locales/zh-cn/errors.ftl index 759ff1d..ce0b005 100644 --- a/assets/locales/zh-cn/errors.ftl +++ b/assets/locales/zh-cn/errors.ftl @@ -42,6 +42,10 @@ patch-sync-failed = 同步补丁文件夹失败 patch-state-check-failed = 检查补丁文件夹失败 game-patching-error = 应用游戏补丁失败 +# Disable telemetry + +telemetry-servers-disabling-error = Failed to disable telemetry servers + # Sandbox documentation-url-open-failed = Failed to open documentation URL diff --git a/src/ui/main/disable_telemetry.rs b/src/ui/main/disable_telemetry.rs new file mode 100644 index 0000000..0d9e4b5 --- /dev/null +++ b/src/ui/main/disable_telemetry.rs @@ -0,0 +1,68 @@ +use std::process::Command; + +use relm4::prelude::*; + +use crate::*; +use crate::i18n::*; + +use super::{App, AppMsg}; + +pub fn disable_telemetry(sender: ComponentSender) { + sender.input(AppMsg::DisableButtons(true)); + + let config = Config::get().unwrap(); + + std::thread::spawn(move || { + let telemetry = config.launcher.edition + .telemetry_servers() + .iter() + .map(|server| format!("0.0.0.0 {server}")) + .collect::>() + .join("\\n"); + + let output = if config.patch.root { + Command::new("pkexec") + .arg("echo") + .arg("-e") + .arg(format!("\\n{telemetry}\\n")) + .arg(">>") + .arg("/etc/hosts") + .spawn() + } + + else { + Command::new("echo") + .arg("-e") + .arg(format!("\\n{telemetry}\\n")) + .arg(">>") + .arg("/etc/hosts") + .spawn() + }; + + match output.and_then(|child| child.wait_with_output()) { + Ok(output) => if !output.status.success() { + tracing::error!("Failed to update /etc/hosts file"); + + sender.input(AppMsg::Toast { + title: tr("telemetry-servers-disabling-error"), + description: Some(String::from_utf8(output.stderr).unwrap()) + }); + } + + Err(err) => { + tracing::error!("Failed to update /etc/hosts file"); + + sender.input(AppMsg::Toast { + title: tr("telemetry-servers-disabling-error"), + description: Some(err.to_string()) + }); + } + } + + sender.input(AppMsg::DisableButtons(false)); + sender.input(AppMsg::UpdateLauncherState { + perform_on_download_needed: false, + show_status_page: true + }); + }); +} diff --git a/src/ui/main/mod.rs b/src/ui/main/mod.rs index d177a2e..bc049b6 100644 --- a/src/ui/main/mod.rs +++ b/src/ui/main/mod.rs @@ -16,6 +16,7 @@ mod download_wine; mod create_prefix; mod download_diff; mod migrate_folder; +mod disable_telemetry; mod launch; use anime_launcher_sdk::components::loader::ComponentsLoader; @@ -394,6 +395,8 @@ impl SimpleComponent for App { PatchStatus::Available { .. } => "document-save-symbolic" } + Some(LauncherState::TelemetryNotDisabled) => "network-wired-symbolic", + Some(LauncherState::VoiceOutdated(_)) | Some(LauncherState::GameOutdated(_)) | None => "window-close-symbolic" @@ -407,6 +410,9 @@ impl SimpleComponent for App { Some(LauncherState::FolderMigrationRequired { .. }) => tr("migrate-folders"), Some(LauncherState::PlayerPatchAvailable { .. }) => tr("apply-patch"), + // TODO: add localization + Some(LauncherState::TelemetryNotDisabled) => String::from("Disable telemetry"), + Some(LauncherState::WineNotInstalled) => tr("download-wine"), Some(LauncherState::PrefixNotExists) => tr("create-prefix"), @@ -1033,6 +1039,8 @@ impl SimpleComponent for App { LauncherState::PlayerPatchAvailable { patch, disable_mhypbase } => apply_patch::apply_patch(sender, patch.to_owned(), *disable_mhypbase), + LauncherState::TelemetryNotDisabled => disable_telemetry::disable_telemetry(sender), + LauncherState::WineNotInstalled => download_wine::download_wine(sender, self.progress_bar.sender().to_owned()), LauncherState::PrefixNotExists => create_prefix::create_prefix(sender),