feat(ui): add add-remote wizard state machine
This commit is contained in:
1 parent
b90ff7f18d
commit
9fb0e7fb19
1 file changed
+29
@@ -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<FileInfo>),
|
||||
RemoteList(Vec<Remote>),
|
||||
RemoteAdded(u32, Vec<Remote>),
|
||||
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<Arc<RcloneApp>>,
|
||||
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<String>,
|
||||
add_remote_answer: String,
|
||||
add_remote_status: String,
|
||||
|
||||
active_task_count: u32,
|
||||
operation_tx: Sender<OperationResult>,
|
||||
operation_rx: Receiver<OperationResult>,
|
||||
|
||||
Reference in new issue
Block a user