summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorConrad Ludgate <conrad.ludgate@truelayer.com>2023-02-06 08:55:12 +0000
committerConrad Ludgate <conrad.ludgate@truelayer.com>2023-02-06 08:55:12 +0000
commitd2a1548dae083ffcb1d529b062d66677ca0ad584 (patch)
treecd7b4bda428c52a62760228088f3553d67b0547e
parenta40e41caffe69905d5ec78d0f2800bf0080af71e (diff)
make update_needed check lazylazy-ui-version
-rw-r--r--Cargo.lock13
-rw-r--r--Cargo.toml1
-rw-r--r--src/command/client/search/interactive.rs29
3 files changed, 34 insertions, 9 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 5ebfd2f1..02c4161b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -89,6 +89,7 @@ dependencies = [
"env_logger",
"eyre",
"fs-err",
+ "futures-util",
"indicatif",
"interim",
"itertools",
@@ -728,6 +729,17 @@ dependencies = [
]
[[package]]
+name = "futures-macro"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
name = "futures-sink"
version = "0.3.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -746,6 +758,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
dependencies = [
"futures-core",
+ "futures-macro",
"futures-sink",
"futures-task",
"pin-project-lite",
diff --git a/Cargo.toml b/Cargo.toml
index 7cb0ad98..a68be07f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -72,6 +72,7 @@ whoami = "1.1.2"
rpassword = "7.0"
semver = "1.0.14"
runtime-format = "0.1.2"
+futures-util = "0.3"
# from tui
bitflags = "1.3"
diff --git a/src/command/client/search/interactive.rs b/src/command/client/search/interactive.rs
index c8ceab58..903c3362 100644
--- a/src/command/client/search/interactive.rs
+++ b/src/command/client/search/interactive.rs
@@ -16,6 +16,7 @@ use crossterm::{
execute, terminal,
};
use eyre::Result;
+use futures_util::FutureExt;
use semver::Version;
use unicode_width::UnicodeWidthStr;
@@ -393,7 +394,8 @@ pub async fn history(
// Put the cursor at the end of the query by default
input.end();
- let update_needed = settings.needs_update().await;
+ let update_needed = settings.needs_update().fuse();
+ tokio::pin!(update_needed);
let mut app = State {
history_count: db.history_count().await?,
@@ -405,7 +407,7 @@ pub async fn history(
} else {
settings.filter_mode
},
- update_needed,
+ update_needed: None,
};
let mut results = app.query_results(settings.search_mode, db).await?;
@@ -427,15 +429,24 @@ pub async fn history(
let initial_input = app.input.as_str().to_owned();
let initial_filter_mode = app.filter_mode;
- if event::poll(Duration::from_millis(250))? {
- loop {
- if let Some(i) = app.handle_input(settings, &event::read()?, results.len()) {
- break 'render i;
- }
- if !event::poll(Duration::ZERO)? {
- break;
+ let event_ready = tokio::task::spawn_blocking(|| event::poll(Duration::from_millis(250)));
+
+ tokio::select! {
+ event_ready = event_ready => {
+ if event_ready?? {
+ loop {
+ if let Some(i) = app.handle_input(settings, &event::read()?, results.len()) {
+ break 'render i;
+ }
+ if !event::poll(Duration::ZERO)? {
+ break;
+ }
+ }
}
}
+ update_needed = &mut update_needed => {
+ app.update_needed = update_needed;
+ }
}
if initial_input != app.input.as_str() || initial_filter_mode != app.filter_mode {