feat(apps): impl search

This commit is contained in:
uncor3
2026-06-08 20:48:18 +00:00
parent e65049b709
commit 2c158d9bf1
+41 -4
View File
@@ -5,15 +5,18 @@ use macros::QtThreading;
use qmetaobject::prelude::*;
use qttypes::{QStringList, QVariantMap};
use std::pin::Pin;
use std::sync::Arc;
#[derive(QObject, Default, QtThreading)]
pub struct Apps {
base: qt_base_class!(trait QObject),
state: qt_property!(QVariantMap; NOTIFY state_changed),
state_changed: qt_signal!(),
ipa_tool: Option<Arc<IpaTool>>,
init: qt_method!(fn(&mut self)),
sign_in: qt_method!(fn(&mut self, email: QString, password: QString)),
search: qt_method!(fn(&mut self, term: QString)),
search_ready: qt_signal!(search_term : QString, success: bool, res: QString),
}
impl Apps {
@@ -31,14 +34,14 @@ impl Apps {
fn init(&mut self) {
let q_thread = self.qt_thread();
RUNTIME.spawn(async move {
let res: anyhow::Result<Option<ipatool::Account>> = async {
let res: anyhow::Result<(Option<ipatool::Account>, IpaTool)> = async {
let tool = IpaTool::new_default().await?;
Ok(tool.account_info().await?)
Ok((tool.account_info().await?, tool))
}
.await;
match res {
Ok(maybe_acc) => {
Ok((maybe_acc, tool)) => {
let acc = maybe_acc.unwrap_or_default();
println!("email :{}", acc.email);
@@ -49,6 +52,7 @@ impl Apps {
q_thread.queue(|t| {
t.state = state;
t.ipa_tool = Some(Arc::new(tool));
t.state_changed();
})
}
@@ -91,4 +95,37 @@ impl Apps {
// Ok(())
// });
}
// DOES NOTHING IF CALLED BEFORE CALLING `init`
fn search(&mut self, term: QString) {
let Some(tool) = &self.ipa_tool else {
eprintln!("IpaTool not initialized");
return;
};
let tool = tool.clone();
let q_thread = self.qt_thread();
RUNTIME.spawn(async move {
let serialized: anyhow::Result<String> = async {
let apps = tool.search(&term.to_string(), 20).await?;
Ok(serde_json::to_string(&apps)?)
}
.await;
match serialized {
Ok(serialized) => {
println!(
"Search successful for term '{}', result: {}",
term, serialized
);
q_thread.queue(|s| s.search_ready(term, true, QString::from(serialized)));
}
// FIXME: also return the error
Err(err) => {
println!("Error in ipatool search {}", err.to_string());
q_thread.queue(|s| s.search_ready(term, false, QString::default()));
}
};
});
}
}