polling system to a message one so we can have more ways we can interract with plugins (reload/ reset/ on click events)
51 lines
1.5 KiB
Rust
51 lines
1.5 KiB
Rust
use std::{fmt::Write, path::PathBuf};
|
|
use dim_sdk::{plugin_info, Context, DimPlugin, Message, Result};
|
|
use std::fs::read_to_string;
|
|
|
|
plugin_info!(
|
|
Plug, // Your main global structs name that implements `DimPlugin`
|
|
"battery", // Plugin name
|
|
"1.0.0", // Plugin Version (leave empty for none)
|
|
"GPLv3" // Plugin license (leave empty for none)
|
|
);
|
|
|
|
#[derive(Debug, Clone)]
|
|
struct Plug {
|
|
ctx: Context
|
|
}
|
|
|
|
const BATT0: &'static str = "/sys/class/power_supply/BAT0/capacity";
|
|
const BATT1: &'static str = "/sys/class/power_supply/BAT1/capacity";
|
|
|
|
impl DimPlugin for Plug {
|
|
fn init(ctx: Context) -> Result<Self> {
|
|
dim_sdk::DimLogger::new(&ctx).init();
|
|
Ok(Self {
|
|
ctx
|
|
})
|
|
}
|
|
fn on_message(&mut self, msg: Message) -> Result<()> {
|
|
self.ctx.buf.reset();
|
|
match msg.name.as_str() {
|
|
"poll" => {
|
|
//TODO: Quick fix, make this better, more portable
|
|
let path = if PathBuf::from(BATT0).exists() { BATT0 } else { BATT1 };
|
|
|
|
let contents = read_to_string(path)?;
|
|
let cleaned_contents: String = contents.chars().filter(|c| c.is_digit(10)).collect();
|
|
|
|
write!(self.ctx, "Battery: {}%", cleaned_contents)?;
|
|
}
|
|
_ => ()
|
|
}
|
|
Ok(())
|
|
}
|
|
fn pre_reload(&mut self) -> Result<()> { Ok(()) }
|
|
fn post_reload(&mut self) -> Result<()> { Ok(()) }
|
|
fn free(&mut self) -> Result<()> { Ok(()) }
|
|
}
|
|
|
|
|
|
|
|
|