feat(ui): add add-remote wizard state machine

This commit is contained in:
Black_Raven committed 2026-08-13 18:15:49 +03:00
1 parent b90ff7f18d
commit 9fb0e7fb19
1 file changed
+29
+29
View File
@@ -1,4 +1,5 @@
//! Графический интерфейс для операций rclone с интегрированным Local FS и поддержкой кастомных шрифтов. //! Графический интерфейс для операций rclone с интегрированным Local FS и поддержкой кастомных шрифтов.
use crate::operations::remotes::ConfigQuestion;
use crate::operations::{FileInfo, Remote}; use crate::operations::{FileInfo, Remote};
use crate::rclone_install::RcloneApp; use crate::rclone_install::RcloneApp;
use std::sync::Arc; use std::sync::Arc;
@@ -32,9 +33,29 @@ enum OperationResult {
Failure(u32, String), Failure(u32, String),
FileList(Vec<FileInfo>), FileList(Vec<FileInfo>),
RemoteList(Vec<Remote>), RemoteList(Vec<Remote>),
RemoteAdded(u32, Vec<Remote>),
ConfigQuestion(u32, String, ConfigQuestion),
ProgressUpdate(u32, f32, String), ProgressUpdate(u32, f32, String),
} }
/// Шаг мастера добавления облака
#[derive(Clone)]
pub enum AddRemoteStep {
/// Ввод имени и типа
Form,
/// rclone задал вопрос
Question(ConfigQuestion),
/// Команда выполняется в фоне (например, ожидание авторизации в браузере)
Busy,
}
/// Популярные типы удаленных хранилищ rclone
pub const REMOTE_TYPES: &[&str] = &[
"drive", "dropbox", "onedrive", "s3", "gcs", "b2", "azureblob",
"webdav", "sftp", "ftp", "smb", "local", "crypt", "http", "mega",
"pcloud", "box", "googlephotos", "jottacloud", "koofr",
];
pub struct RcloneUI { pub struct RcloneUI {
rclone: Option<Arc<RcloneApp>>, rclone: Option<Arc<RcloneApp>>,
state: AppState, state: AppState,
@@ -61,6 +82,14 @@ pub struct RcloneUI {
#[allow(dead_code)] #[allow(dead_code)]
settings: AppSettings, settings: AppSettings,
show_add_remote_dialog: bool,
new_remote_name: String,
new_remote_type: String,
add_remote_step: AddRemoteStep,
add_remote_state: Option<String>,
add_remote_answer: String,
add_remote_status: String,
active_task_count: u32, active_task_count: u32,
operation_tx: Sender<OperationResult>, operation_tx: Sender<OperationResult>,
operation_rx: Receiver<OperationResult>, operation_rx: Receiver<OperationResult>,