summaryrefslogtreecommitdiff
path: root/qml_plugin/src/launcher/calc.rs
diff options
context:
space:
mode:
Diffstat (limited to 'qml_plugin/src/launcher/calc.rs')
-rw-r--r--qml_plugin/src/launcher/calc.rs21
1 files changed, 17 insertions, 4 deletions
diff --git a/qml_plugin/src/launcher/calc.rs b/qml_plugin/src/launcher/calc.rs
index 196484e..7b1b066 100644
--- a/qml_plugin/src/launcher/calc.rs
+++ b/qml_plugin/src/launcher/calc.rs
@@ -1,6 +1,6 @@
-use cxx_qt::{QObject, Threading};
-use cxx_qt_lib::{QDateTime, QString, QVariant};
-use std::{pin::Pin, sync::mpsc, time::Duration};
+use cxx_qt::Threading;
+use cxx_qt_lib::{QString, QVariant};
+use std::pin::Pin;
use crate::RUNTIME;
@@ -24,6 +24,10 @@ mod qobject {
ResultType,
result_type
)]
+ #[qproperty(
+ QVariant,
+ cached_query
+ )]
type SmartCalc = super::SmartCalcRs;
#[qinvokable]
@@ -70,10 +74,17 @@ impl From<&smart_calculator::types::ResultType> for qobject::ResultType {
pub struct SmartCalcRs {
result: QVariant,
result_type: qobject::ResultType,
+
+ cached_query: QVariant,
}
impl qobject::SmartCalc {
- fn query(self: Pin<&mut Self>, input: QString) {
+ fn query(mut self: Pin<&mut Self>, input: QString) {
+ if self.cached_query == (&input).into() {
+ return;
+ }
+ self.as_mut()
+ .set_cached_query((&input.clone()).into());
let qt_thread = self.qt_thread();
RUNTIME.spawn(
async move {
@@ -118,5 +129,7 @@ impl qobject::SmartCalc {
.set_result(QVariant::default());
self.as_mut()
.set_result_type(qobject::ResultType::Unset);
+ self.as_mut()
+ .set_cached_query(QVariant::default());
}
}