Files
mesh-drop-flutter/rust/src/api/commands.rs
2026-02-27 21:12:56 +08:00

136 lines
3.5 KiB
Rust

use crate::discovery::model::Peer;
use crate::event::AppEvent;
use crate::transfer::model::Transfer;
pub async fn create_event_stream(sink: crate::frb_generated::StreamSink<AppEvent>) {
let mut rx = get_appstate().await.event_tx.subscribe();
tokio::spawn(async move {
while let Ok(event) = rx.recv().await {
let _ = sink.add(event);
}
});
}
use crate::get_appstate;
pub async fn get_save_path() -> String {
get_appstate().await.config.get_save_path()
}
pub async fn set_save_path(save_path: String) {
get_appstate().await.config.set_save_path(save_path);
}
pub async fn set_hostname(hostname: String) {
get_appstate().await.config.set_hostname(hostname);
}
pub async fn get_hostname() -> String {
get_appstate().await.config.get_hostname()
}
pub async fn get_auto_accept() -> bool {
get_appstate().await.config.get_auto_accept()
}
pub async fn set_auto_accept(auto_accept: bool) {
get_appstate().await.config.set_auto_accept(auto_accept);
}
pub async fn get_save_history() -> bool {
get_appstate().await.config.get_save_history()
}
pub async fn set_save_history(save_history: bool) {
get_appstate().await.config.set_save_history(save_history);
}
pub async fn get_enable_tls() -> bool {
get_appstate().await.config.get_enable_tls()
}
pub async fn set_enable_tls(enable_tls: bool) {
get_appstate().await.config.set_enable_tls(enable_tls);
}
pub async fn get_peers() -> Result<Vec<Peer>, String> {
Ok(get_appstate().await.discovery.get_peers().await)
}
pub async fn send_file(target: Peer, target_ip: &str, file_path: &str) -> Result<(), String> {
let sender = get_appstate().await.discovery.get_self().await;
match get_appstate()
.await
.transfer
.send_file(target, target_ip, sender, file_path)
.await
{
Ok(_) => Ok(()),
Err(e) => Err(e.to_string()),
}
}
pub async fn send_text(target: Peer, target_ip: &str, text: &str) -> Result<(), String> {
let sender = get_appstate().await.discovery.get_self().await;
match get_appstate()
.await
.transfer
.send_text(target, target_ip, sender, text)
.await
{
Ok(_) => Ok(()),
Err(e) => Err(e.to_string()),
}
}
pub async fn send_folder(target: Peer, target_ip: &str, folder_path: &str) -> Result<(), String> {
let sender = get_appstate().await.discovery.get_self().await;
match get_appstate()
.await
.transfer
.send_folder(target, target_ip, sender, folder_path)
.await
{
Ok(_) => Ok(()),
Err(e) => Err(e.to_string()),
}
}
pub async fn get_transfers() -> Vec<Transfer> {
get_appstate().await.transfer.get_transfers()
}
pub async fn resolve_pending_request(id: &str, accept: bool, path: &str) {
get_appstate()
.await
.transfer
.make_decision(id, accept, path);
}
pub async fn cancel_transfer(id: &str) {
get_appstate().await.transfer.cancel(id);
}
pub async fn delete_transfer(id: &str) {
get_appstate().await.transfer.delete(id);
}
pub async fn clear_transfers() {
get_appstate().await.transfer.clear_transfers();
}
pub async fn is_trusted(peer_id: &str) -> bool {
get_appstate().await.trust.is_trusted(peer_id)
}
pub async fn trust_peer(peer_id: &str) -> Result<(), String> {
if let Some(peer) = get_appstate().await.discovery.get_peer(peer_id).await {
get_appstate().await.trust.trust(peer_id, &peer.public_key);
}
Ok(())
}
pub async fn untrust_peer(peer_id: &str) {
get_appstate().await.trust.untrust(peer_id);
}