Хуйня не на tauri
This commit is contained in:
parent
e895fe3237
commit
403d7086d4
104 changed files with 8941 additions and 4772 deletions
134
src/ui/state/mod.rs
Normal file
134
src/ui/state/mod.rs
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
//! Состояние UI: главная структура [`AppState`], её типы ([`types`]) и
|
||||
//! начальные значения ([`defaults`]).
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::domain::file_entry::FileEntry;
|
||||
use crate::domain::transfer::TransferTask;
|
||||
|
||||
mod defaults;
|
||||
mod types;
|
||||
|
||||
pub use types::*;
|
||||
|
||||
pub struct AppState {
|
||||
pub tabs: Vec<ConnectionTab>,
|
||||
pub active_tab: usize,
|
||||
|
||||
pub local_path: String,
|
||||
pub local_entries: Vec<FileEntry>,
|
||||
pub local_selected: Option<String>,
|
||||
|
||||
/// Панель, в которой был последний клик — New Folder/Rename/Delete в тулбаре
|
||||
/// применяются к ней.
|
||||
pub active_pane: Pane,
|
||||
/// К какой стороне относится открытый сейчас диалог mkdir/rename/delete.
|
||||
pub op_target: Pane,
|
||||
|
||||
pub show_connect_dialog: bool,
|
||||
pub show_bookmarks: bool,
|
||||
pub show_history: bool,
|
||||
pub show_settings_dialog: bool,
|
||||
/// Активный раздел открытого диалога Settings.
|
||||
pub settings_section: SettingsSection,
|
||||
/// Прошлый раздел + момент переключения (ui time) — для кросс-фейда
|
||||
/// содержимого при смене раздела.
|
||||
pub settings_prev_section: SettingsSection,
|
||||
pub settings_section_changed_at: f64,
|
||||
|
||||
/// Видимость панелей — настраивается в Window (macOS) или в Settings.
|
||||
pub show_toolbar: bool,
|
||||
pub show_sidebar: bool,
|
||||
pub show_status_bar: bool,
|
||||
pub show_queue_panel: bool,
|
||||
|
||||
// ── Настройки, сохраняемые между запусками (Settings) ────────────────
|
||||
/// Спрашивать подтверждение перед удалением файла/папки.
|
||||
pub confirm_before_delete: bool,
|
||||
/// Стартовая локальная папка; пусто — домашняя папка ОС.
|
||||
pub default_local_folder: String,
|
||||
/// Через сколько секунд автоматически убирать завершённые задачи из очереди
|
||||
/// передач; 0 — никогда.
|
||||
pub auto_clear_completed_secs: u32,
|
||||
/// Сколько передач может выполняться параллельно — общий с воркером атомик,
|
||||
/// чтобы Settings → Transfers менял параллелизм на лету.
|
||||
pub max_concurrent: Arc<std::sync::atomic::AtomicU32>,
|
||||
/// Инлайн-подтверждение "Clear All History" в разделе Settings → History.
|
||||
pub history_clear_confirm: bool,
|
||||
|
||||
/// Фиксированные пункты быстрого доступа (Home/Desktop/...) — не удаляются, не хранятся в БД.
|
||||
pub quick_access: Vec<QuickAccess>,
|
||||
/// Закладки, добавленные пользователем — хранятся в БД, можно удалять.
|
||||
pub bookmarks: Vec<Bookmark>,
|
||||
pub history: Vec<HistoryEntry>,
|
||||
|
||||
pub connect_label: String,
|
||||
pub connect_host: String,
|
||||
pub connect_port: String,
|
||||
pub connect_user: String,
|
||||
pub connect_pass: String,
|
||||
pub connect_key_path: String,
|
||||
pub connect_protocol: usize,
|
||||
pub connect_error: String,
|
||||
pub connect_loading: bool,
|
||||
|
||||
pub show_queue: bool,
|
||||
pub queue_tasks: Vec<TransferTask>,
|
||||
|
||||
pub status_message: String,
|
||||
|
||||
// action flags — выставляются тулбаром, обрабатываются в app.rs
|
||||
pub pending_refresh: bool,
|
||||
/// Клик по записи истории — переподключиться (новая вкладка, без диалога).
|
||||
pub pending_history_reconnect: Option<HistoryEntry>,
|
||||
/// ПКМ → "Save" на записи истории — сохранить как постоянный Site.
|
||||
pub pending_history_save: Option<HistoryEntry>,
|
||||
|
||||
// диалоги операций над удалённой ФС
|
||||
pub show_mkdir_dialog: bool,
|
||||
pub show_delete_dialog: bool,
|
||||
pub show_rename_dialog: bool,
|
||||
|
||||
pub mkdir_name: String,
|
||||
pub delete_name: String,
|
||||
pub rename_old_name: String,
|
||||
pub rename_new_name: String,
|
||||
|
||||
pub pending_mkdir_result: Option<PendingResult<()>>,
|
||||
pub pending_delete_result: Option<PendingResult<()>>,
|
||||
pub pending_rename_result: Option<PendingResult<()>>,
|
||||
|
||||
pub pending_connect: Option<PendingConnect>,
|
||||
pub pending_remote_list: Vec<PendingRemoteList>,
|
||||
}
|
||||
|
||||
impl AppState {
|
||||
pub fn active_tab_ref(&self) -> Option<&ConnectionTab> {
|
||||
if self.tabs.is_empty() {
|
||||
return None;
|
||||
}
|
||||
let idx = self.active_tab.min(self.tabs.len() - 1);
|
||||
Some(&self.tabs[idx])
|
||||
}
|
||||
|
||||
/// Перечитывает историю подключений из БД (после записи новой попытки).
|
||||
pub fn reload_history(&mut self, db: &Arc<std::sync::Mutex<rusqlite::Connection>>) {
|
||||
if let Ok(conn) = db.lock()
|
||||
&& let Ok(rows) = crate::storage::db::get_history(&conn)
|
||||
{
|
||||
self.history = rows
|
||||
.into_iter()
|
||||
.map(
|
||||
|(host, port, user, time, conn_id, protocol, key_path)| HistoryEntry {
|
||||
host,
|
||||
port,
|
||||
user,
|
||||
time,
|
||||
conn_id,
|
||||
protocol,
|
||||
key_path,
|
||||
},
|
||||
)
|
||||
.collect();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue