From fd9724a3a347f7df0a192b44f78ec528b115a6d3 Mon Sep 17 00:00:00 2001 From: Reactor Scram Date: Thu, 3 Oct 2024 09:14:04 -0500 Subject: [PATCH] refactor(rust/gui-client): remove borrows from part of the system tray code (#6916) Extracted from #6838 This leads to extra cloning of strings, but if there's less than 1,000 Resources and the tray doesn't update often, it should be fine. We can sample performance with sentry.io if we're worried. --- rust/gui-client/src-common/src/controller.rs | 10 ++-- rust/gui-client/src-common/src/system_tray.rs | 46 +++++++++---------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/rust/gui-client/src-common/src/controller.rs b/rust/gui-client/src-common/src/controller.rs index 0230e685e..a312f7ec0 100644 --- a/rust/gui-client/src-common/src/controller.rs +++ b/rust/gui-client/src-common/src/controller.rs @@ -709,12 +709,10 @@ impl Controller { Status::RetryingConnection { .. } => system_tray::ConnlibState::RetryingConnection, Status::TunnelReady { resources } => { system_tray::ConnlibState::SignedIn(system_tray::SignedIn { - actor_name: &auth_session.actor_name, - favorite_resources: &self.advanced_settings.favorite_resources, - internet_resource_enabled: &self - .advanced_settings - .internet_resource_enabled, - resources, + actor_name: auth_session.actor_name.clone(), + favorite_resources: self.advanced_settings.favorite_resources.clone(), + internet_resource_enabled: self.advanced_settings.internet_resource_enabled, + resources: resources.clone(), }) } Status::WaitingForPortal { .. } => system_tray::ConnlibState::WaitingForPortal, diff --git a/rust/gui-client/src-common/src/system_tray.rs b/rust/gui-client/src-common/src/system_tray.rs index 3866d28d3..aaf3789d8 100644 --- a/rust/gui-client/src-common/src/system_tray.rs +++ b/rust/gui-client/src-common/src/system_tray.rs @@ -30,12 +30,12 @@ const ENABLE: &str = "Enable this resource"; mod builder; -pub struct AppState<'a> { - pub connlib: ConnlibState<'a>, +pub struct AppState { + pub connlib: ConnlibState, pub release: Option, } -impl<'a> AppState<'a> { +impl AppState { pub fn into_menu(self) -> Menu { let quit_text = match &self.connlib { ConnlibState::Loading @@ -61,25 +61,25 @@ impl<'a> AppState<'a> { } } -pub enum ConnlibState<'a> { +pub enum ConnlibState { Loading, Quitting, RetryingConnection, - SignedIn(SignedIn<'a>), + SignedIn(SignedIn), SignedOut, WaitingForBrowser, WaitingForPortal, WaitingForTunnel, } -pub struct SignedIn<'a> { - pub actor_name: &'a str, - pub favorite_resources: &'a HashSet, - pub resources: &'a [ResourceDescription], - pub internet_resource_enabled: &'a Option, +pub struct SignedIn { + pub actor_name: String, + pub favorite_resources: HashSet, + pub resources: Vec, + pub internet_resource_enabled: Option, } -impl<'a> SignedIn<'a> { +impl SignedIn { fn is_favorite(&self, resource: &ResourceId) -> bool { self.favorite_resources.contains(resource) } @@ -206,7 +206,7 @@ fn signed_in(signed_in: &SignedIn) -> Menu { // the favoriting feature was created // Always show Resources in the original order menu = menu.disabled(RESOURCES); - for res in *resources { + for res in resources { let mut name = res.name().to_string(); if res.is_internet_resource() { name = append_status(&name, internet_resource_enabled.unwrap_or_default()); @@ -312,14 +312,14 @@ mod tests { } } - fn signed_in<'a>( - resources: &'a [ResourceDescription], - favorite_resources: &'a HashSet, - internet_resource_enabled: &'a Option, - ) -> AppState<'a> { + fn signed_in( + resources: Vec, + favorite_resources: HashSet, + internet_resource_enabled: Option, + ) -> AppState { AppState { connlib: ConnlibState::SignedIn(SignedIn { - actor_name: "Jane Doe", + actor_name: "Jane Doe".to_string(), favorite_resources, resources, internet_resource_enabled, @@ -366,7 +366,7 @@ mod tests { let resources = vec![]; let favorites = Default::default(); let disabled_resources = Default::default(); - let input = signed_in(&resources, &favorites, &disabled_resources); + let input = signed_in(resources, favorites, disabled_resources); let actual = input.into_menu(); let expected = Menu::default() .disabled("Signed in as Jane Doe") @@ -388,7 +388,7 @@ mod tests { let resources = vec![]; let favorites = HashSet::from([ResourceId::from_u128(42)]); let disabled_resources = Default::default(); - let input = signed_in(&resources, &favorites, &disabled_resources); + let input = signed_in(resources, favorites, disabled_resources); let actual = input.into_menu(); let expected = Menu::default() .disabled("Signed in as Jane Doe") @@ -410,7 +410,7 @@ mod tests { let resources = resources(); let favorites = Default::default(); let disabled_resources = Default::default(); - let input = signed_in(&resources, &favorites, &disabled_resources); + let input = signed_in(resources, favorites, disabled_resources); let actual = input.into_menu(); let expected = Menu::default() .disabled("Signed in as Jane Doe") @@ -485,7 +485,7 @@ mod tests { "03000143-e25e-45c7-aafb-144990e57dcd", )?]); let disabled_resources = Default::default(); - let input = signed_in(&resources, &favorites, &disabled_resources); + let input = signed_in(resources, favorites, disabled_resources); let actual = input.into_menu(); let expected = Menu::default() .disabled("Signed in as Jane Doe") @@ -567,7 +567,7 @@ mod tests { "00000000-0000-0000-0000-000000000000", )?]); let disabled_resources = Default::default(); - let input = signed_in(&resources, &favorites, &disabled_resources); + let input = signed_in(resources, favorites, disabled_resources); let actual = input.into_menu(); let expected = Menu::default() .disabled("Signed in as Jane Doe")