Skip to content

Commit a0e7277

Browse files
committed
fix
1 parent 83d1193 commit a0e7277

File tree

2 files changed

+25
-59
lines changed

2 files changed

+25
-59
lines changed

.cargo/config.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[env]
2-
RUST_LOG = "warn,cosmic_ext_applet_clipboard_manager=info"
2+
RUST_LOG = "warn,cosmic_ext_applet_clipboard_manager=debug"
33
RUST_BACKTRACE = "full"
44

src/db.rs

+24-58
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ pub struct Db {
209209
matcher: Matcher,
210210
// time
211211
last_update: i64,
212+
data_version: i64,
212213
}
213214

214215
impl Db {
@@ -273,6 +274,7 @@ impl Db {
273274
}
274275

275276
let mut db = Db {
277+
data_version: fetch_data_version(&mut conn).await?,
276278
conn,
277279
hashs: HashMap::default(),
278280
state: BTreeMap::default(),
@@ -524,73 +526,37 @@ impl Db {
524526
self.filtered.len()
525527
}
526528
}
527-
}
528-
529-
#[derive(Clone, Debug)]
530-
pub enum DbMessage {
531-
DbWasUpdated,
532-
Ready(mpsc::Sender<DbMessage>),
533-
}
534529

535-
pub fn sub() -> Subscription<DbMessage> {
536-
struct Update;
530+
pub async fn handle_message(&mut self, _message: DbMessage) -> Result<()> {
531+
let data_version = fetch_data_version(&mut self.conn).await?;
537532

538-
enum State {
539-
Starting,
540-
Ready(mpsc::Receiver<DbMessage>),
541-
}
533+
if self.data_version != data_version {
534+
self.reload().await?;
535+
}
542536

543-
subscription::channel(
544-
std::any::TypeId::of::<Update>(),
545-
5,
546-
|mut output| async move {
547-
let mut state = State::Starting;
537+
self.data_version = data_version;
548538

549-
loop {
550-
match &mut state {
551-
State::Starting => {
552-
tokio::time::sleep(Duration::from_millis(500)).await;
539+
Ok(())
540+
}
541+
}
553542

554-
let (tx, rx) = mpsc::channel(100);
555-
output.send(DbMessage::Ready(tx)).await.unwrap();
543+
/// https://www.sqlite.org/pragma.html#pragma_data_version
544+
async fn fetch_data_version(conn: &mut SqliteConnection) -> Result<i64> {
545+
let data_version: i64 = sqlx::query("PRAGMA data_version")
546+
.fetch_one(conn)
547+
.await?
548+
.get("data_version");
556549

557-
state = State::Ready(rx);
558-
}
559-
State::Ready(rx) => {
560-
if let Some(mess) = rx.recv().await {
561-
output.send(mess).await.unwrap();
562-
}
563-
}
564-
}
565-
}
566-
},
567-
)
550+
Ok(data_version)
568551
}
569552

570-
impl Db {
571-
pub async fn handle_message(&mut self, message: DbMessage) -> Result<()> {
572-
info!("db handle_message {:?}", message);
573-
574-
match message {
575-
DbMessage::DbWasUpdated => {
576-
if now_millis() - self.last_update > 500 {
577-
self.reload().await?;
578-
}
579-
}
580-
DbMessage::Ready(tx) => {
581-
self.conn
582-
.lock_handle()
583-
.await?
584-
.set_update_hook(move |_result| {
585-
if let Err(err) = tx.blocking_send(DbMessage::DbWasUpdated) {
586-
error!("can't send to db {err}");
587-
}
588-
});
589-
}
590-
}
553+
#[derive(Clone, Debug)]
554+
pub enum DbMessage {
555+
CheckUpdate,
556+
}
591557

592-
Ok(())
593-
}
558+
pub fn sub() -> Subscription<DbMessage> {
559+
cosmic::iced::time::every(Duration::from_millis(1000)).map(|_| DbMessage::CheckUpdate)
594560
}
595561

596562
#[cfg(test)]

0 commit comments

Comments
 (0)