From 4ef5dd839d08355b0cc93d8cb11452631126a7b5 Mon Sep 17 00:00:00 2001 From: ardocrat Date: Sat, 31 May 2025 15:44:24 +0300 Subject: [PATCH] platform: pick folder --- locales/de.yml | 1 + locales/en.yml | 1 + locales/fr.yml | 1 + locales/ru.yml | 1 + locales/tr.yml | 1 + locales/zh-CN.yml | 1 + src/gui/platform/android/mod.rs | 10 ++++++++++ src/gui/platform/desktop/mod.rs | 11 +++++++++++ src/gui/platform/mod.rs | 1 + 9 files changed, 28 insertions(+) diff --git a/locales/de.yml b/locales/de.yml index 09413f92..e6ff45d7 100644 --- a/locales/de.yml +++ b/locales/de.yml @@ -26,6 +26,7 @@ theme: 'Theme:' dark: Dunkel light: Hell choose_file: Datei auswählen +choose_folder: Ordner auswählen crash_report: Absturzbericht crash_report_warning: Anwendung wurde beim letzten Mal unerwartet geschlossen, Sie können den Absturzbericht mit Entwicklern teilen. confirmation: Bestätigung diff --git a/locales/en.yml b/locales/en.yml index 407ba2aa..e79bb6b0 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -26,6 +26,7 @@ theme: 'Theme:' dark: Dark light: Light choose_file: Choose file +choose_folder: Choose folder crash_report: Crash report crash_report_warning: Application closed unexpectedly last time, you can share crash report with developers. confirmation: Confirmation diff --git a/locales/fr.yml b/locales/fr.yml index e0c3b469..56e55fdc 100644 --- a/locales/fr.yml +++ b/locales/fr.yml @@ -26,6 +26,7 @@ theme: 'Thème:' dark: Sombre light: Clair choose_file: Choisir un fichier +choose_folder: Choisir un dossier crash_report: Rapport d'échec crash_report_warning: L'application s'est fermée de manière inattendue la dernière fois, vous pouvez partager un rapport d'incident avec les développeurs. confirmation: Confirmation diff --git a/locales/ru.yml b/locales/ru.yml index 3f7dadf1..a0c40abc 100644 --- a/locales/ru.yml +++ b/locales/ru.yml @@ -26,6 +26,7 @@ theme: 'Тема:' dark: Тёмная light: Светлая choose_file: Выбрать файл +choose_folder: Выбрать папку crash_report: Отчёт о сбое crash_report_warning: В прошлый раз приложение неожиданно закрылось, вы можете поделиться отчетом о сбое с разработчиками. confirmation: Подтверждение diff --git a/locales/tr.yml b/locales/tr.yml index 8edc5e7f..af95d47a 100644 --- a/locales/tr.yml +++ b/locales/tr.yml @@ -26,6 +26,7 @@ theme: 'Tema:' dark: Karanlik light: Isik choose_file: Dosya seçin +choose_folder: Klasör seç crash_report: Ariza Raporu crash_report_warning: Uygulama beklenmedik bir sekilde kapandi son kez, kilitlenme raporunu gelistiricilerle paylasabilirsiniz. confirmation: Onay diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index 574d9292..339f67f2 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -26,6 +26,7 @@ theme: '主题:' dark: 深色 light: 淡色 choose_file: 选择文件 +choose_folder: 选择文件夹 crash_report: 崩溃报告 crash_report_warning: 上次应用程序意外关闭,您可以报告开发人员崩溃事件. confirmation: 确认 diff --git a/src/gui/platform/android/mod.rs b/src/gui/platform/android/mod.rs index e5de0a7c..29820ae3 100644 --- a/src/gui/platform/android/mod.rs +++ b/src/gui/platform/android/mod.rs @@ -161,6 +161,16 @@ impl PlatformCallbacks for Android { Some("".to_string()) } + fn pick_folder(&self) -> Option { + // Clear previous result. + let mut w_path = PICKED_FILE_PATH.write(); + *w_path = None; + // Launch file picker. + let _ = self.call_java_method("pickFolder", "()V", &[]); + // Return empty string to identify async pick. + Some("".to_string()) + } + fn picked_file(&self) -> Option { let has_file = { let r_path = PICKED_FILE_PATH.read(); diff --git a/src/gui/platform/desktop/mod.rs b/src/gui/platform/desktop/mod.rs index e78a9e7a..7219ec65 100644 --- a/src/gui/platform/desktop/mod.rs +++ b/src/gui/platform/desktop/mod.rs @@ -260,6 +260,17 @@ impl PlatformCallbacks for Desktop { None } + fn pick_folder(&self) -> Option { + let file = FileDialog::new() + .set_title(t!("choose_folder")) + .set_directory(dirs::home_dir().unwrap()) + .pick_folder(); + if let Some(file) = file { + return Some(file.to_str().unwrap_or_default().to_string()); + } + None + } + fn picked_file(&self) -> Option { None } diff --git a/src/gui/platform/mod.rs b/src/gui/platform/mod.rs index a9e73fa9..249d2040 100644 --- a/src/gui/platform/mod.rs +++ b/src/gui/platform/mod.rs @@ -33,6 +33,7 @@ pub trait PlatformCallbacks { fn switch_camera(&self); fn share_data(&self, name: String, data: Vec) -> Result<(), std::io::Error>; fn pick_file(&self) -> Option; + fn pick_folder(&self) -> Option; fn picked_file(&self) -> Option; fn request_user_attention(&self); fn user_attention_required(&self) -> bool;