mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-03-30 00:21:02 +03:00
plugin_framework, test plugin manager, uninstall is not fully tested
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
@@ -36,6 +36,16 @@ fn path_plugins(id: &str) -> PathBuf {
|
||||
HbbConfig::path("plugins").join(id)
|
||||
}
|
||||
|
||||
pub fn remove(id: &str) {
|
||||
CONFIG_SHARED.lock().unwrap().remove(id);
|
||||
CONFIG_PEERS.lock().unwrap().remove(id);
|
||||
// allow_err is Ok here.
|
||||
allow_err!(ManagerConfig::remove_plugin(id));
|
||||
if let Err(e) = fs::remove_dir_all(path_plugins(id)) {
|
||||
log::error!("Failed to remove plugin '{}' directory: {}", id, e);
|
||||
}
|
||||
}
|
||||
|
||||
impl Deref for SharedConfig {
|
||||
type Target = HashMap<String, String>;
|
||||
|
||||
@@ -207,6 +217,7 @@ impl PeerConfig {
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct PluginStatus {
|
||||
pub enabled: bool,
|
||||
pub uninstalled: bool,
|
||||
}
|
||||
|
||||
const MANAGER_VERSION: &str = "0.1.0";
|
||||
@@ -269,7 +280,13 @@ impl ManagerConfig {
|
||||
if let Some(status) = lock.plugins.get_mut(id) {
|
||||
status.enabled = enabled;
|
||||
} else {
|
||||
lock.plugins.insert(id.to_owned(), PluginStatus { enabled });
|
||||
lock.plugins.insert(
|
||||
id.to_owned(),
|
||||
PluginStatus {
|
||||
enabled,
|
||||
uninstalled: false,
|
||||
},
|
||||
);
|
||||
}
|
||||
hbb_common::config::store_path(Self::path(), &*lock)
|
||||
}
|
||||
@@ -292,29 +309,50 @@ impl ManagerConfig {
|
||||
#[inline]
|
||||
pub fn add_plugin(id: &str) -> ResultType<()> {
|
||||
let mut lock = CONFIG_MANAGER.lock().unwrap();
|
||||
lock.plugins
|
||||
.insert(id.to_owned(), PluginStatus { enabled: true });
|
||||
lock.plugins.insert(
|
||||
id.to_owned(),
|
||||
PluginStatus {
|
||||
enabled: true,
|
||||
uninstalled: false,
|
||||
},
|
||||
);
|
||||
hbb_common::config::store_path(Self::path(), &*lock)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn remove_plugin(id: &str, uninstall: bool) -> ResultType<()> {
|
||||
pub fn remove_plugin(id: &str) -> ResultType<()> {
|
||||
let mut lock = CONFIG_MANAGER.lock().unwrap();
|
||||
lock.plugins.remove(id);
|
||||
hbb_common::config::store_path(Self::path(), &*lock)?;
|
||||
if uninstall {
|
||||
allow_err!(fs::remove_dir_all(path_plugins(id)));
|
||||
}
|
||||
Ok(())
|
||||
hbb_common::config::store_path(Self::path(), &*lock)
|
||||
}
|
||||
|
||||
pub fn remove_plugins(uninstall: bool) {
|
||||
#[inline]
|
||||
pub fn is_uninstalled(id: &str) -> bool {
|
||||
CONFIG_MANAGER
|
||||
.lock()
|
||||
.unwrap()
|
||||
.plugins
|
||||
.get(id)
|
||||
.map(|p| p.uninstalled)
|
||||
.unwrap_or(false)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_uninstall(id: &str, uninstall: bool) -> ResultType<()> {
|
||||
let mut lock = CONFIG_MANAGER.lock().unwrap();
|
||||
lock.plugins.clear();
|
||||
allow_err!(hbb_common::config::store_path(Self::path(), &*lock));
|
||||
if uninstall {
|
||||
allow_err!(fs::remove_dir_all(HbbConfig::path("plugins")));
|
||||
if let Some(status) = lock.plugins.get_mut(id) {
|
||||
status.uninstalled = uninstall;
|
||||
} else {
|
||||
lock.plugins.insert(
|
||||
id.to_owned(),
|
||||
PluginStatus {
|
||||
enabled: true,
|
||||
uninstalled: uninstall,
|
||||
},
|
||||
);
|
||||
}
|
||||
hbb_common::config::store_path(Self::path(), &*lock)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user