Huakun Shen 7865d18580
Feature: Settings (#23)
* feat: add pin screenshot builtin command

* feat: pin screenshot command nows zoom and scroll

* chore: upgrade @kksh/svelte5

* feat: add mdns built-in command

* feat: add sidebar for settings page

* fix: builtin command command listing problem with key id in "each" loop

* feat: add settings

* style: modify settings sidebar style

* feat: add sidebar to troubleshooter pages

* fix: some styling bug

* feat: add menu item highlight for sidebar

* feat: improve some keyboard interaction logic

* fix: improve troubleshooter flex box

* feat: add uuid for mdns

* fix mdns host removing caused by dead lock

* feat: settings page implemented, hotkey, hide on blur implemented

* style: update styles in settings

* feat: improve search bar dropdown menu items
2024-11-11 17:15:42 -05:00

47 lines
1.3 KiB
Rust

use std::{collections::HashMap, sync::Mutex};
use tauri_plugin_network::network::mdns::ServiceInfoMod;
#[derive(Default, Debug)]
pub struct Peers {
pub peers: Mutex<HashMap<String, ServiceInfoMod>>,
}
impl Peers {
pub fn add_peer(&self, peer: ServiceInfoMod) {
let mut peers = self.peers.lock().unwrap();
peers.insert(peer.hostname.clone(), peer);
}
pub fn remove_peer(&self, service_type: String, fullname: String) {
let peer = self
.peers
.lock()
.unwrap()
.iter()
.find(|(_, peer)| peer.fullname == fullname && peer.service_type == service_type)
.map(|(hostname, _)| hostname.clone());
if let Some(hostname) = peer {
self.peers.lock().unwrap().remove(&hostname);
}
}
pub fn clear(&self) {
let mut peers = self.peers.lock().unwrap();
peers.clear();
}
pub fn set_peers(&self, peers: HashMap<String, ServiceInfoMod>) {
self.clear();
self.peers.lock().unwrap().extend(peers);
}
}
#[tauri::command]
pub async fn get_peers(
state: tauri::State<'_, Peers>,
) -> Result<HashMap<String, ServiceInfoMod>, String> {
let _peers = state.peers.lock().unwrap();
println!("get_peers: {:?}", _peers);
Ok(_peers.to_owned())
}