diff --git a/src/ui.rs b/src/ui.rs index 76a014d..f3ef978 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,4 +1,5 @@ //! Графический интерфейс для операций rclone с интегрированным Local FS и поддержкой кастомных шрифтов. +use crate::operations::remotes::ConfigQuestion; use crate::operations::{FileInfo, Remote}; use crate::rclone_install::RcloneApp; use std::sync::Arc; @@ -32,9 +33,29 @@ enum OperationResult { Failure(u32, String), FileList(Vec), RemoteList(Vec), + RemoteAdded(u32, Vec), + ConfigQuestion(u32, String, ConfigQuestion), 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 { rclone: Option>, state: AppState, @@ -61,6 +82,14 @@ pub struct RcloneUI { #[allow(dead_code)] settings: AppSettings, + show_add_remote_dialog: bool, + new_remote_name: String, + new_remote_type: String, + add_remote_step: AddRemoteStep, + add_remote_state: Option, + add_remote_answer: String, + add_remote_status: String, + active_task_count: u32, operation_tx: Sender, operation_rx: Receiver,