track Status change timestamp

This commit is contained in:
yggverse 2025-01-15 04:23:59 +02:00
parent d3d85e3672
commit 3f67c93c3d
2 changed files with 40 additions and 19 deletions

View file

@ -1,10 +1,12 @@
mod redirect;
mod status;
// Children dependencies
use redirect::Redirect;
use status::Status;
use gtk::{gio::Cancellable, prelude::CancellableExt};
// Global dependencies
use gtk::{gio::Cancellable, glib::DateTime, prelude::CancellableExt};
use std::{
cell::{Cell, RefCell},
rc::Rc,
@ -43,7 +45,7 @@ impl Client {
Self {
cancellable: Cell::new(Cancellable::new()),
redirect: Rc::new(Redirect::new()),
status: Rc::new(RefCell::new(Status::Cancellable)), // e.g. "ready to use"
status: Rc::new(RefCell::new(Status::Cancellable(now()))), // e.g. "ready to use"
gemini: gemini::Client::new(),
}
}
@ -57,9 +59,9 @@ impl Client {
let previous = self.cancellable.replace(cancellable.clone());
if !previous.is_cancelled() {
previous.cancel();
self.status.replace(Status::Cancelled);
self.status.replace(Status::Cancelled(now()));
} else {
self.status.replace(Status::Cancellable);
self.status.replace(Status::Cancellable(now()));
}
// Done
@ -71,13 +73,20 @@ impl Client {
/// Begin new request
/// * the `query` as string, to support system routing requests (e.g. `source:`)
pub fn request(&self, query: &str) {
self.status.replace(Status::Request(query.to_string()));
self.status
.replace(Status::Request((now(), query.to_string())));
// Forcefully prevent infinitive redirection
// * this condition just to make sure that client will never stuck by driver implementation issue
if self.redirect.count() > redirect::LIMIT {
self.status.replace(Status::RedirectLimit(redirect::LIMIT));
self.status
.replace(Status::RedirectLimit((now(), redirect::LIMIT)));
// @TODO return;
}
}
}
/// Get current [DateTime](https://docs.gtk.org/glib/struct.DateTime.html)
fn now() -> DateTime {
DateTime::now_local().unwrap() // @TODO handle?
}