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.
This commit is contained in:
Reactor Scram
2024-10-03 09:14:04 -05:00
committed by GitHub
parent 613127d298
commit fd9724a3a3
2 changed files with 27 additions and 29 deletions

View File

@@ -709,12 +709,10 @@ impl<I: GuiIntegration> Controller<I> {
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,

View File

@@ -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<Release>,
}
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<ResourceId>,
pub resources: &'a [ResourceDescription],
pub internet_resource_enabled: &'a Option<bool>,
pub struct SignedIn {
pub actor_name: String,
pub favorite_resources: HashSet<ResourceId>,
pub resources: Vec<ResourceDescription>,
pub internet_resource_enabled: Option<bool>,
}
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<ResourceId>,
internet_resource_enabled: &'a Option<bool>,
) -> AppState<'a> {
fn signed_in(
resources: Vec<ResourceDescription>,
favorite_resources: HashSet<ResourceId>,
internet_resource_enabled: Option<bool>,
) -> 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")