use tokio::sync::mpsc;
use zbus::object_server::SignalEmitter;
use super::super::super::engine::PmimEngine;
use super::super::m::{Mk, Mr};
use crate::ibus::IBusEngineBackend;
async fn 任务(mut r: mpsc::Receiver<Mr>) {
let mut k: Option<mpsc::Sender<Mk>> = None;
let mut se: Option<SignalEmitter<'static>> = None;
loop {
match r.recv().await {
Some(m) => match m {
Mr::T(t) => {
if let Some(se) = &se {
let _ = PmimEngine::commit_text(se, t.0).await;
}
}
Mr::F(f) => {
if let Some(k) = &k {
let _ = k.send(Mk::F(f.0)).await;
}
}
Mr::SE(x) => {
se = Some(x);
}
Mr::K(x) => {
k = Some(x);
}
},
None => {
break;
}
}
}
}
pub fn at_r() -> mpsc::Sender<Mr> {
let (tx, rx) = mpsc::channel(256);
tokio::spawn(async move {
任务(rx).await;
});
tx
}