mirror of
https://github.com/veeso/termscp.git
synced 2026-04-03 00:31:32 -07:00
fix: stabilize core error handling
Remove production panic and unwrap paths from core modules. Propagate bookmark encryption failures, harden file watcher and temp mapped file handling, and clean up dead code in shared utilities.
This commit is contained in:
@@ -71,7 +71,10 @@ impl AuthActivity {
|
||||
};
|
||||
|
||||
if let Some(bookmarks_cli) = self.bookmarks_client_mut() {
|
||||
bookmarks_cli.add_bookmark(name.clone(), params, save_password);
|
||||
if let Err(err) = bookmarks_cli.add_bookmark(name.clone(), params, save_password) {
|
||||
self.mount_error(format!("Could not save bookmark: {err}"));
|
||||
return;
|
||||
}
|
||||
// Save bookmarks
|
||||
self.write_bookmarks();
|
||||
// Remove `name` from bookmarks if exists
|
||||
@@ -121,7 +124,10 @@ impl AuthActivity {
|
||||
}
|
||||
};
|
||||
if let Some(bookmarks_cli) = self.bookmarks_client_mut() {
|
||||
bookmarks_cli.add_recent(params);
|
||||
if let Err(err) = bookmarks_cli.add_recent(params) {
|
||||
self.mount_error(format!("Could not save recent host: {err}"));
|
||||
return;
|
||||
}
|
||||
// Save bookmarks
|
||||
self.write_bookmarks();
|
||||
}
|
||||
|
||||
116
src/ui/store.rs
116
src/ui/store.rs
@@ -9,14 +9,10 @@ use std::collections::HashMap;
|
||||
// -- store state
|
||||
|
||||
/// Store state describes a value in the store
|
||||
#[allow(dead_code)]
|
||||
enum StoreState {
|
||||
Str(String), // String
|
||||
Signed(isize), // Signed number
|
||||
Unsigned(usize), // Unsigned number
|
||||
Float(f64), // Floating point number
|
||||
Boolean(bool), // Boolean value
|
||||
Flag, // Empty value; used to work as a Flag (set unset)
|
||||
Str(String), // String
|
||||
Boolean(bool), // Boolean value
|
||||
Flag, // Empty value; used to work as a Flag (set unset)
|
||||
}
|
||||
|
||||
// -- store
|
||||
@@ -28,7 +24,6 @@ pub(crate) struct Store {
|
||||
store: HashMap<String, StoreState>,
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
impl Store {
|
||||
/// Initialize a new Store
|
||||
pub fn init() -> Self {
|
||||
@@ -47,30 +42,6 @@ impl Store {
|
||||
}
|
||||
}
|
||||
|
||||
/// Get signed from store
|
||||
pub fn get_signed(&self, key: &str) -> Option<isize> {
|
||||
match self.store.get(key) {
|
||||
Some(StoreState::Signed(i)) => Some(*i),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Get unsigned from store
|
||||
pub fn get_unsigned(&self, key: &str) -> Option<usize> {
|
||||
match self.store.get(key) {
|
||||
Some(StoreState::Unsigned(u)) => Some(*u),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// get float from store
|
||||
pub fn get_float(&self, key: &str) -> Option<f64> {
|
||||
match self.store.get(key) {
|
||||
Some(StoreState::Float(f)) => Some(*f),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// get boolean from store
|
||||
pub fn get_boolean(&self, key: &str) -> Option<bool> {
|
||||
match self.store.get(key) {
|
||||
@@ -91,22 +62,6 @@ impl Store {
|
||||
self.store.insert(key.to_string(), StoreState::Str(val));
|
||||
}
|
||||
|
||||
/// Set signed number
|
||||
pub fn set_signed(&mut self, key: &str, val: isize) {
|
||||
self.store.insert(key.to_string(), StoreState::Signed(val));
|
||||
}
|
||||
|
||||
/// Set unsigned number
|
||||
pub fn set_unsigned(&mut self, key: &str, val: usize) {
|
||||
self.store
|
||||
.insert(key.to_string(), StoreState::Unsigned(val));
|
||||
}
|
||||
|
||||
/// Set floating point number
|
||||
pub fn set_float(&mut self, key: &str, val: f64) {
|
||||
self.store.insert(key.to_string(), StoreState::Float(val));
|
||||
}
|
||||
|
||||
/// Set boolean
|
||||
pub fn set_boolean(&mut self, key: &str, val: bool) {
|
||||
self.store.insert(key.to_string(), StoreState::Boolean(val));
|
||||
@@ -118,46 +73,6 @@ impl Store {
|
||||
}
|
||||
|
||||
// -- Consumers
|
||||
|
||||
/// Take string from store
|
||||
pub fn take_string(&mut self, key: &str) -> Option<String> {
|
||||
match self.store.remove(key) {
|
||||
Some(StoreState::Str(s)) => Some(s),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Take signed from store
|
||||
pub fn take_signed(&mut self, key: &str) -> Option<isize> {
|
||||
match self.store.remove(key) {
|
||||
Some(StoreState::Signed(i)) => Some(i),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Take unsigned from store
|
||||
pub fn take_unsigned(&mut self, key: &str) -> Option<usize> {
|
||||
match self.store.remove(key) {
|
||||
Some(StoreState::Unsigned(u)) => Some(u),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Take float from store
|
||||
pub fn take_float(&mut self, key: &str) -> Option<f64> {
|
||||
match self.store.remove(key) {
|
||||
Some(StoreState::Float(f)) => Some(f),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Take boolean from store
|
||||
pub fn take_boolean(&mut self, key: &str) -> Option<bool> {
|
||||
match self.store.remove(key) {
|
||||
Some(StoreState::Boolean(b)) => Some(b),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -174,39 +89,14 @@ mod tests {
|
||||
// Test string
|
||||
store.set_string("test", String::from("hello"));
|
||||
assert_eq!(*store.get_string("test").as_ref().unwrap(), "hello");
|
||||
assert_eq!(store.take_string("test").unwrap(), "hello".to_string());
|
||||
assert_eq!(store.take_string("test"), None);
|
||||
// Test isize
|
||||
store.set_signed("number", 3005);
|
||||
assert_eq!(store.get_signed("number").unwrap(), 3005);
|
||||
assert_eq!(store.take_signed("number").unwrap(), 3005);
|
||||
assert_eq!(store.take_signed("number"), None);
|
||||
store.set_signed("number", -123);
|
||||
assert_eq!(store.get_signed("number").unwrap(), -123);
|
||||
// Test usize
|
||||
store.set_unsigned("unumber", 1024);
|
||||
assert_eq!(store.get_unsigned("unumber").unwrap(), 1024);
|
||||
assert_eq!(store.take_unsigned("unumber").unwrap(), 1024);
|
||||
assert_eq!(store.take_unsigned("unumber"), None);
|
||||
// Test float
|
||||
store.set_float("float", 3.33);
|
||||
assert_eq!(store.get_float("float").unwrap(), 3.33);
|
||||
assert_eq!(store.take_float("float").unwrap(), 3.33);
|
||||
assert_eq!(store.take_float("float"), None);
|
||||
// Test boolean
|
||||
store.set_boolean("bool", true);
|
||||
assert_eq!(store.get_boolean("bool").unwrap(), true);
|
||||
assert_eq!(store.take_boolean("bool").unwrap(), true);
|
||||
assert_eq!(store.take_boolean("bool"), None);
|
||||
// Test flag
|
||||
store.set("myflag");
|
||||
assert_eq!(store.isset("myflag"), true);
|
||||
// Test unexisting
|
||||
assert!(store.get_boolean("unexisting-key").is_none());
|
||||
assert!(store.get_float("unexisting-key").is_none());
|
||||
assert!(store.get_signed("unexisting-key").is_none());
|
||||
assert!(store.get_signed("unexisting-key").is_none());
|
||||
assert!(store.get_string("unexisting-key").is_none());
|
||||
assert!(store.get_unsigned("unexisting-key").is_none());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user