Merge pull request #5331 from dignow/fix/save_peer_window_pos

fix saving peer window pos
This commit is contained in:
RustDesk 2023-08-11 08:04:57 +08:00 committed by GitHub
commit 39f0edcb32
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 61 additions and 51 deletions

View File

@ -1422,7 +1422,7 @@ Future<void> saveWindowPosition(WindowType type, {int? windowId}) async {
debugPrint( debugPrint(
"Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}"); "Saving frame: $windowId: ${pos.width}/${pos.height}, offset:${pos.offsetWidth}/${pos.offsetHeight}");
await bind.setLocalFlutterConfig( await bind.setLocalFlutterOption(
k: kWindowPrefix + type.name, v: pos.toString()); k: kWindowPrefix + type.name, v: pos.toString());
if (type == WindowType.RemoteDesktop && windowId != null) { if (type == WindowType.RemoteDesktop && windowId != null) {
@ -1436,7 +1436,7 @@ Future _saveSessionWindowPosition(
windowId, kWindowEventGetRemoteList, null); windowId, kWindowEventGetRemoteList, null);
if (remoteList != null) { if (remoteList != null) {
for (final peerId in remoteList.split(',')) { for (final peerId in remoteList.split(',')) {
bind.sessionSetFlutterConfigByPeerId( bind.mainSetPeerFlutterOptionSync(
id: peerId, k: kWindowPrefix + windowType.name, v: pos.toString()); id: peerId, k: kWindowPrefix + windowType.name, v: pos.toString());
} }
} }
@ -1551,15 +1551,15 @@ Future<bool> restoreWindowPosition(WindowType type,
// then we may need to get the position by reading the peer config. // then we may need to get the position by reading the peer config.
// Because the session may not be read at this time. // Because the session may not be read at this time.
if (desktopType == DesktopType.main) { if (desktopType == DesktopType.main) {
pos = bind.mainGetPeerFlutterConfigSync( pos = bind.mainGetPeerFlutterOptionSync(
id: peerId, k: kWindowPrefix + type.name); id: peerId, k: kWindowPrefix + type.name);
} else { } else {
pos = await bind.sessionGetFlutterConfigByPeerId( pos = await bind.sessionGetFlutterOptionByPeerId(
id: peerId, k: kWindowPrefix + type.name); id: peerId, k: kWindowPrefix + type.name);
} }
isRemotePeerPos = pos != null; isRemotePeerPos = pos != null;
} }
pos ??= bind.getLocalFlutterConfig(k: kWindowPrefix + type.name); pos ??= bind.getLocalFlutterOption(k: kWindowPrefix + type.name);
var lpos = LastWindowPosition.loadFromString(pos); var lpos = LastWindowPosition.loadFromString(pos);
if (lpos == null) { if (lpos == null) {

View File

@ -64,7 +64,7 @@ class _PeerTabPageState extends State<PeerTabPage>
@override @override
void initState() { void initState() {
final uiType = bind.getLocalFlutterConfig(k: 'peer-card-ui-type'); final uiType = bind.getLocalFlutterOption(k: 'peer-card-ui-type');
if (uiType != '') { if (uiType != '') {
peerCardUiType.value = int.parse(uiType) == PeerUiType.list.index peerCardUiType.value = int.parse(uiType) == PeerUiType.list.index
? PeerUiType.list ? PeerUiType.list
@ -174,7 +174,7 @@ class _PeerTabPageState extends State<PeerTabPage>
).paddingSymmetric(horizontal: 4), ).paddingSymmetric(horizontal: 4),
onTap: () async { onTap: () async {
await handleTabSelection(t); await handleTabSelection(t);
await bind.setLocalFlutterConfig( await bind.setLocalFlutterOption(
k: 'peer-tab-index', v: t.toString()); k: 'peer-tab-index', v: t.toString());
}, },
onHover: (value) => hover.value = value, onHover: (value) => hover.value = value,
@ -244,7 +244,7 @@ class _PeerTabPageState extends State<PeerTabPage>
onTap: () async { onTap: () async {
final type = types.elementAt( final type = types.elementAt(
peerCardUiType.value == types.elementAt(0) ? 1 : 0); peerCardUiType.value == types.elementAt(0) ? 1 : 0);
await bind.setLocalFlutterConfig( await bind.setLocalFlutterOption(
k: 'peer-card-ui-type', v: type.index.toString()); k: 'peer-card-ui-type', v: type.index.toString());
peerCardUiType.value = type; peerCardUiType.value = type;
}, },
@ -562,7 +562,7 @@ class _PeerSortDropdownState extends State<PeerSortDropdown> {
void initState() { void initState() {
if (!PeerSortType.values.contains(peerSort.value)) { if (!PeerSortType.values.contains(peerSort.value)) {
peerSort.value = PeerSortType.remoteId; peerSort.value = PeerSortType.remoteId;
bind.setLocalFlutterConfig( bind.setLocalFlutterOption(
k: "peer-sorting", k: "peer-sorting",
v: peerSort.value, v: peerSort.value,
); );
@ -592,7 +592,7 @@ class _PeerSortDropdownState extends State<PeerSortDropdown> {
dense: true, (String? v) async { dense: true, (String? v) async {
if (v != null) { if (v != null) {
peerSort.value = v; peerSort.value = v;
await bind.setLocalFlutterConfig( await bind.setLocalFlutterOption(
k: "peer-sorting", k: "peer-sorting",
v: peerSort.value, v: peerSort.value,
); );

View File

@ -41,7 +41,7 @@ class LoadEvent {
final peerSearchText = "".obs; final peerSearchText = "".obs;
/// for peer sort, global obs value /// for peer sort, global obs value
final peerSort = bind.getLocalFlutterConfig(k: 'peer-sorting').obs; final peerSort = bind.getLocalFlutterOption(k: 'peer-sorting').obs;
// list for listener // list for listener
final obslist = [peerSearchText, peerSort].obs; final obslist = [peerSearchText, peerSort].obs;
@ -264,7 +264,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
// fallback to id sorting // fallback to id sorting
if (!PeerSortType.values.contains(sortedBy)) { if (!PeerSortType.values.contains(sortedBy)) {
sortedBy = PeerSortType.remoteId; sortedBy = PeerSortType.remoteId;
bind.setLocalFlutterConfig( bind.setLocalFlutterOption(
k: "peer-sorting", k: "peer-sorting",
v: sortedBy, v: sortedBy,
); );

View File

@ -36,7 +36,7 @@ class ToolbarState {
late RxBool _pin; late RxBool _pin;
ToolbarState() { ToolbarState() {
final s = bind.getLocalFlutterConfig(k: kStoreKey); final s = bind.getLocalFlutterOption(k: kStoreKey);
if (s.isEmpty) { if (s.isEmpty) {
_initSet(false, false); _initSet(false, false);
return; return;
@ -89,7 +89,7 @@ class ToolbarState {
} }
_savePin() async { _savePin() async {
bind.setLocalFlutterConfig( bind.setLocalFlutterOption(
k: kStoreKey, v: jsonEncode({'pin': _pin.value})); k: kStoreKey, v: jsonEncode({'pin': _pin.value}));
} }

View File

@ -1863,14 +1863,14 @@ Future<void> setCanvasConfig(
p['yCanvas'] = yCanvas; p['yCanvas'] = yCanvas;
p['scale'] = scale; p['scale'] = scale;
p['currentDisplay'] = currentDisplay; p['currentDisplay'] = currentDisplay;
await bind.sessionSetFlutterConfig( await bind.sessionSetFlutterOption(
sessionId: sessionId, k: canvasKey, v: jsonEncode(p)); sessionId: sessionId, k: canvasKey, v: jsonEncode(p));
} }
Future<Map<String, dynamic>?> getCanvasConfig(SessionID sessionId) async { Future<Map<String, dynamic>?> getCanvasConfig(SessionID sessionId) async {
if (!isWebDesktop) return null; if (!isWebDesktop) return null;
var p = var p =
await bind.sessionGetFlutterConfig(sessionId: sessionId, k: canvasKey); await bind.sessionGetFlutterOption(sessionId: sessionId, k: canvasKey);
if (p == null || p.isEmpty) return null; if (p == null || p.isEmpty) return null;
try { try {
Map<String, dynamic> m = json.decode(p); Map<String, dynamic> m = json.decode(p);

View File

@ -51,7 +51,7 @@ class PeerTabModel with ChangeNotifier {
PeerTabModel(this.parent) { PeerTabModel(this.parent) {
// init currentTab // init currentTab
_currentTab = _currentTab =
int.tryParse(bind.getLocalFlutterConfig(k: 'peer-tab-index')) ?? 0; int.tryParse(bind.getLocalFlutterOption(k: 'peer-tab-index')) ?? 0;
if (_currentTab < 0 || _currentTab >= tabNames.length) { if (_currentTab < 0 || _currentTab >= tabNames.length) {
_currentTab = 0; _currentTab = 0;
} }

View File

@ -1290,7 +1290,7 @@ impl LocalConfig {
} }
} }
pub fn get_flutter_config(k: &str) -> String { pub fn get_flutter_option(k: &str) -> String {
if let Some(v) = LOCAL_CONFIG.read().unwrap().ui_flutter.get(k) { if let Some(v) = LOCAL_CONFIG.read().unwrap().ui_flutter.get(k) {
v.clone() v.clone()
} else { } else {
@ -1298,7 +1298,7 @@ impl LocalConfig {
} }
} }
pub fn set_flutter_config(k: String, v: String) { pub fn set_flutter_option(k: String, v: String) {
let mut config = LOCAL_CONFIG.write().unwrap(); let mut config = LOCAL_CONFIG.write().unwrap();
let v2 = if v.is_empty() { None } else { Some(&v) }; let v2 = if v.is_empty() { None } else { Some(&v) };
if v2 != config.ui_flutter.get(&k) { if v2 != config.ui_flutter.get(&k) {

View File

@ -1214,7 +1214,11 @@ impl LoginConfigHandler {
/// * `v` - value of option /// * `v` - value of option
pub fn save_ui_flutter(&mut self, k: String, v: String) { pub fn save_ui_flutter(&mut self, k: String, v: String) {
let mut config = self.load_config(); let mut config = self.load_config();
config.ui_flutter.insert(k, v); if v.is_empty() {
config.ui_flutter.remove(&k);
} else {
config.ui_flutter.insert(k, v);
}
self.save_config(config); self.save_config(config);
} }

View File

@ -197,50 +197,39 @@ pub fn session_toggle_option(session_id: SessionID, value: String) {
} }
} }
pub fn session_get_flutter_config(session_id: SessionID, k: String) -> Option<String> { pub fn session_get_flutter_option(session_id: SessionID, k: String) -> Option<String> {
if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { if let Some(session) = SESSIONS.read().unwrap().get(&session_id) {
Some(session.get_flutter_config(k)) Some(session.get_flutter_option(k))
} else { } else {
None None
} }
} }
pub fn session_set_flutter_config(session_id: SessionID, k: String, v: String) { pub fn session_set_flutter_option(session_id: SessionID, k: String, v: String) {
if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) { if let Some(session) = SESSIONS.write().unwrap().get_mut(&session_id) {
session.save_flutter_config(k, v); session.save_flutter_option(k, v);
} }
} }
pub fn session_get_flutter_config_by_peer_id(id: String, k: String) -> Option<String> { pub fn session_get_flutter_option_by_peer_id(id: String, k: String) -> Option<String> {
if let Some((_, session)) = SESSIONS.read().unwrap().iter().find(|(_, s)| s.id == id) { if let Some((_, session)) = SESSIONS.read().unwrap().iter().find(|(_, s)| s.id == id) {
Some(session.get_flutter_config(k)) Some(session.get_flutter_option(k))
} else { } else {
None None
} }
} }
pub fn session_set_flutter_config_by_peer_id(id: String, k: String, v: String) {
if let Some((_, session)) = SESSIONS
.write()
.unwrap()
.iter_mut()
.find(|(_, s)| s.id == id)
{
session.save_flutter_config(k, v);
}
}
pub fn get_next_texture_key() -> SyncReturn<i32> { pub fn get_next_texture_key() -> SyncReturn<i32> {
let k = TEXTURE_RENDER_KEY.fetch_add(1, Ordering::SeqCst) + 1; let k = TEXTURE_RENDER_KEY.fetch_add(1, Ordering::SeqCst) + 1;
SyncReturn(k) SyncReturn(k)
} }
pub fn get_local_flutter_config(k: String) -> SyncReturn<String> { pub fn get_local_flutter_option(k: String) -> SyncReturn<String> {
SyncReturn(ui_interface::get_local_flutter_config(k)) SyncReturn(ui_interface::get_local_flutter_option(k))
} }
pub fn set_local_flutter_config(k: String, v: String) { pub fn set_local_flutter_option(k: String, v: String) {
ui_interface::set_local_flutter_config(k, v); ui_interface::set_local_flutter_option(k, v);
} }
pub fn get_local_kb_layout_type() -> SyncReturn<String> { pub fn get_local_kb_layout_type() -> SyncReturn<String> {
@ -806,10 +795,15 @@ pub fn main_get_peer_option_sync(id: String, key: String) -> SyncReturn<String>
SyncReturn(get_peer_option(id, key)) SyncReturn(get_peer_option(id, key))
} }
// Sometimes we need to get the flutter config of a peer by reading the file. // Sometimes we need to get the flutter option of a peer by reading the file.
// Because the session may not be established yet. // Because the session may not be established yet.
pub fn main_get_peer_flutter_config_sync(id: String, k: String) -> SyncReturn<String> { pub fn main_get_peer_flutter_option_sync(id: String, k: String) -> SyncReturn<String> {
SyncReturn(get_peer_flutter_config(id, k)) SyncReturn(get_peer_flutter_option(id, k))
}
pub fn main_set_peer_flutter_option_sync(id: String, k: String, v: String) -> SyncReturn<()> {
set_peer_flutter_option(id, k, v);
SyncReturn(())
} }
pub fn main_set_peer_option(id: String, key: String, value: String) { pub fn main_set_peer_option(id: String, key: String, value: String) {

View File

@ -168,14 +168,14 @@ pub fn set_local_option(key: String, value: String) {
#[cfg(any(target_os = "android", target_os = "ios", feature = "flutter"))] #[cfg(any(target_os = "android", target_os = "ios", feature = "flutter"))]
#[inline] #[inline]
pub fn get_local_flutter_config(key: String) -> String { pub fn get_local_flutter_option(key: String) -> String {
LocalConfig::get_flutter_config(&key) LocalConfig::get_flutter_option(&key)
} }
#[cfg(any(target_os = "android", target_os = "ios", feature = "flutter"))] #[cfg(any(target_os = "android", target_os = "ios", feature = "flutter"))]
#[inline] #[inline]
pub fn set_local_flutter_config(key: String, value: String) { pub fn set_local_flutter_option(key: String, value: String) {
LocalConfig::set_flutter_config(key, value); LocalConfig::set_flutter_option(key, value);
} }
#[cfg(feature = "flutter")] #[cfg(feature = "flutter")]
@ -210,11 +210,23 @@ pub fn get_peer_option(id: String, name: String) -> String {
#[inline] #[inline]
#[cfg(feature = "flutter")] #[cfg(feature = "flutter")]
pub fn get_peer_flutter_config(id: String, name: String) -> String { pub fn get_peer_flutter_option(id: String, name: String) -> String {
let c = PeerConfig::load(&id); let c = PeerConfig::load(&id);
c.ui_flutter.get(&name).unwrap_or(&"".to_owned()).to_owned() c.ui_flutter.get(&name).unwrap_or(&"".to_owned()).to_owned()
} }
#[inline]
#[cfg(feature = "flutter")]
pub fn set_peer_flutter_option(id: String, name: String, value: String) {
let mut c = PeerConfig::load(&id);
if value.is_empty() {
c.ui_flutter.remove(&name);
} else {
c.ui_flutter.insert(name, value);
}
c.store(&id);
}
#[inline] #[inline]
pub fn set_peer_option(id: String, name: String, value: String) { pub fn set_peer_option(id: String, name: String, value: String) {
let mut c = PeerConfig::load(&id); let mut c = PeerConfig::load(&id);

View File

@ -197,11 +197,11 @@ impl<T: InvokeUiSession> Session<T> {
self.lc.write().unwrap().save_scroll_style(value); self.lc.write().unwrap().save_scroll_style(value);
} }
pub fn save_flutter_config(&mut self, k: String, v: String) { pub fn save_flutter_option(&mut self, k: String, v: String) {
self.lc.write().unwrap().save_ui_flutter(k, v); self.lc.write().unwrap().save_ui_flutter(k, v);
} }
pub fn get_flutter_config(&self, k: String) -> String { pub fn get_flutter_option(&self, k: String) -> String {
self.lc.read().unwrap().get_ui_flutter(&k) self.lc.read().unwrap().get_ui_flutter(&k)
} }