mirror of
https://github.com/NotAShelf/stash.git
synced 2026-04-13 14:33:47 +00:00
stash: make watch loop async
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I6a6a69641a4f39f0368de1bcf5780afbe8e5c0b1
This commit is contained in:
parent
d6e4f47bdd
commit
6c5408abd1
1 changed files with 105 additions and 98 deletions
17
src/main.rs
17
src/main.rs
|
|
@ -15,6 +15,7 @@ mod import;
|
||||||
|
|
||||||
use crate::db::ClipboardDb;
|
use crate::db::ClipboardDb;
|
||||||
|
|
||||||
|
use smol::Timer;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use wl_clipboard_rs::paste::{ClipboardType, Seat, get_contents};
|
use wl_clipboard_rs::paste::{ClipboardType, Seat, get_contents};
|
||||||
|
|
@ -97,8 +98,8 @@ fn report_error<T>(result: Result<T, impl std::fmt::Display>, context: &str) ->
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Watch clipboard and store changes
|
/// Watch clipboard and store changes
|
||||||
fn run_daemon(db: &db::SqliteClipboardDb, max_dedupe_search: u64, max_items: u64) {
|
async fn run_daemon(db: &db::SqliteClipboardDb, max_dedupe_search: u64, max_items: u64) {
|
||||||
log::info!("Starting clipboard watch daemon (Wayland)");
|
log::info!("Starting clipboard watch daemon");
|
||||||
|
|
||||||
let mut last_contents: Option<Vec<u8>> = None;
|
let mut last_contents: Option<Vec<u8>> = None;
|
||||||
|
|
||||||
|
|
@ -112,7 +113,7 @@ fn run_daemon(db: &db::SqliteClipboardDb, max_dedupe_search: u64, max_items: u64
|
||||||
let mut buf = Vec::new();
|
let mut buf = Vec::new();
|
||||||
if let Err(e) = reader.read_to_end(&mut buf) {
|
if let Err(e) = reader.read_to_end(&mut buf) {
|
||||||
log::error!("Failed to read clipboard contents: {e}");
|
log::error!("Failed to read clipboard contents: {e}");
|
||||||
std::thread::sleep(Duration::from_millis(500));
|
Timer::after(Duration::from_millis(500)).await;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Only store if changed and not empty
|
// Only store if changed and not empty
|
||||||
|
|
@ -131,14 +132,19 @@ fn run_daemon(db: &db::SqliteClipboardDb, max_dedupe_search: u64, max_items: u64
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
// Only log actual errors, not empty clipboard
|
||||||
|
let error_msg = e.to_string();
|
||||||
|
if !error_msg.contains("empty") {
|
||||||
log::error!("Failed to get clipboard contents: {e}");
|
log::error!("Failed to get clipboard contents: {e}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::thread::sleep(Duration::from_millis(500));
|
}
|
||||||
|
Timer::after(Duration::from_millis(500)).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
smol::block_on(async {
|
||||||
let cli = Cli::parse();
|
let cli = Cli::parse();
|
||||||
env_logger::Builder::new()
|
env_logger::Builder::new()
|
||||||
.filter_level(cli.verbosity.into())
|
.filter_level(cli.verbosity.into())
|
||||||
|
|
@ -234,7 +240,7 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(Command::Watch) => {
|
Some(Command::Watch) => {
|
||||||
run_daemon(&db, cli.max_dedupe_search, cli.max_items);
|
run_daemon(&db, cli.max_dedupe_search, cli.max_items).await;
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
if let Err(e) = Cli::command().print_help() {
|
if let Err(e) = Cli::command().print_help() {
|
||||||
|
|
@ -243,4 +249,5 @@ fn main() {
|
||||||
println!();
|
println!();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue