Improved plugin polling and added a struct for the polling result
This commit is contained in:
parent
08eca1a2d0
commit
3b107f09cd
|
@ -1,4 +1,4 @@
|
|||
use std::path::PathBuf;
|
||||
use std::{collections::HashMap, path::PathBuf};
|
||||
|
||||
use self::plugin::Plugin;
|
||||
|
||||
|
@ -39,7 +39,11 @@ impl PlugMan {
|
|||
self.load(entry.path().to_path_buf())?;
|
||||
}
|
||||
}
|
||||
if self.plugins.len() == 0 {
|
||||
log::error!("No plugins found");
|
||||
return Err(PluginError::NoPlugins);
|
||||
}
|
||||
|
||||
log::info!("Loaded {} plugins", self.plugins.len());
|
||||
|
||||
Ok(())
|
||||
|
@ -67,8 +71,8 @@ impl PlugMan {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn poll_plugins(&mut self) -> Vec<(String, String)> {
|
||||
let mut answers = Vec::new();
|
||||
pub fn poll_plugins(&mut self) -> HashMap<String, PolledText> {
|
||||
let mut answers = HashMap::new();
|
||||
let len = self.len_cap / self.plugins.len();
|
||||
for plugin in &self.plugins {
|
||||
if !plugin.enabled() {
|
||||
|
@ -76,11 +80,15 @@ impl PlugMan {
|
|||
}
|
||||
match plugin.poll(len) {
|
||||
Ok(v) => {
|
||||
if !v.is_empty() {
|
||||
answers.push((plugin.name().clone(), v));
|
||||
let mut pth = (plugin.name().clone(), PolledText::new(v));
|
||||
if pth.1.text().is_empty() {
|
||||
pth.1.disable()
|
||||
}
|
||||
|
||||
|
||||
answers.insert(pth.0, pth.1);
|
||||
},
|
||||
Err(e) => eprintln!("Failed to poll plugin: {e}"),
|
||||
Err(e) => log::error!("Failed to poll plugin: {e}"),
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -88,10 +96,32 @@ impl PlugMan {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct PolledText {
|
||||
text: String,
|
||||
disabled: bool
|
||||
}
|
||||
|
||||
impl PolledText {
|
||||
pub fn new(text: String) -> Self {
|
||||
Self { text, disabled: false }
|
||||
}
|
||||
pub fn text(&self) -> &String {
|
||||
&self.text
|
||||
}
|
||||
pub fn disabled(&self) -> bool {
|
||||
self.disabled
|
||||
}
|
||||
pub fn disable(&mut self) {
|
||||
self.disabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum PluginError {
|
||||
DlOpenError,
|
||||
IoError
|
||||
IoError,
|
||||
NoPlugins
|
||||
}
|
||||
|
||||
impl From<dlopen::Error> for PluginError {
|
||||
|
|
Loading…
Reference in New Issue
Block a user