diff --git a/flutter/lib/common/widgets/peer_card.dart b/flutter/lib/common/widgets/peer_card.dart index 5a7f2bfa7..7d2d0cd2d 100644 --- a/flutter/lib/common/widgets/peer_card.dart +++ b/flutter/lib/common/widgets/peer_card.dart @@ -890,13 +890,10 @@ class DiscoveredPeerCard extends BasePeerCard { menuItems.add(_createShortCutAction(peer.id)); } - final inRecent = await bind.mainIsInRecentPeers(id: peer.id); - if (inRecent) { - if (!favs.contains(peer.id)) { - menuItems.add(_addFavAction(peer.id)); - } else { - menuItems.add(_rmFavAction(peer.id, () async {})); - } + if (!favs.contains(peer.id)) { + menuItems.add(_addFavAction(peer.id)); + } else { + menuItems.add(_rmFavAction(peer.id, () async {})); } if (gFFI.userModel.userName.isNotEmpty) { diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index e5b24fa53..2a3baad95 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -10,7 +10,7 @@ use crate::{ }; use flutter_rust_bridge::{StreamSink, SyncReturn}; use hbb_common::{ - config::{self, LocalConfig, PeerConfig, ONLINE}, + config::{self, LocalConfig, PeerConfig, PeerInfoSerde, ONLINE}, fs, log, message_proto::KeyboardMode, ResultType, @@ -21,6 +21,7 @@ use std::{ ffi::{CStr, CString}, os::raw::c_char, str::FromStr, + time::SystemTime, }; // use crate::hbbs_http::account::AuthResult; @@ -726,10 +727,6 @@ pub fn main_peer_has_password(id: String) -> bool { peer_has_password(id) } -pub fn main_is_in_recent_peers(id: String) -> bool { - PeerConfig::peers().iter().any(|e| e.0 == id) -} - pub fn main_load_recent_peers() { if !config::APP_DIR.read().unwrap().is_empty() { let peers: Vec> = PeerConfig::peers() @@ -756,7 +753,28 @@ pub fn main_load_recent_peers() { pub fn main_load_fav_peers() { if !config::APP_DIR.read().unwrap().is_empty() { let favs = get_fav(); - let peers: Vec> = PeerConfig::peers() + let mut recent = PeerConfig::peers(); + let mut lan = config::LanPeers::load() + .peers + .iter() + .filter(|d| recent.iter().all(|r| r.0 != d.id)) + .map(|d| { + ( + d.id.clone(), + SystemTime::UNIX_EPOCH, + PeerConfig { + info: PeerInfoSerde { + username: d.username.clone(), + hostname: d.hostname.clone(), + platform: d.platform.clone(), + }, + ..Default::default() + }, + ) + }) + .collect(); + recent.append(&mut lan); + let peers: Vec> = recent .into_iter() .filter_map(|(id, _, p)| { if favs.contains(&id) { @@ -1361,7 +1379,7 @@ pub fn send_url_scheme(_url: String) { #[cfg(target_os = "android")] pub mod server_side { - use hbb_common::{log, config}; + use hbb_common::{config, log}; use jni::{ objects::{JClass, JString}, sys::jstring,