diff --git a/client/ui/client_ui.go b/client/ui/client_ui.go index b2a6404bb..d0b1bacf6 100644 --- a/client/ui/client_ui.go +++ b/client/ui/client_ui.go @@ -457,7 +457,7 @@ func (s *serviceClient) menuUpClick() error { if status.Status == string(internal.StatusConnected) { log.Warnf("already connected") - return err + return nil } if _, err := s.conn.Up(s.ctx, &proto.UpRequest{}); err != nil { @@ -482,7 +482,7 @@ func (s *serviceClient) menuDownClick() error { return err } - if status.Status != string(internal.StatusConnected) { + if status.Status != string(internal.StatusConnected) && status.Status != string(internal.StatusConnecting) { log.Warnf("already down") return nil } @@ -520,7 +520,9 @@ func (s *serviceClient) updateStatus() error { } var systrayIconState bool - if status.Status == string(internal.StatusConnected) && !s.mUp.Disabled() { + + switch { + case status.Status == string(internal.StatusConnected): s.connected = true s.sendNotification = true if s.isUpdateIconActive { @@ -535,7 +537,9 @@ func (s *serviceClient) updateStatus() error { s.mNetworks.Enable() go s.updateExitNodes() systrayIconState = true - } else if status.Status != string(internal.StatusConnected) && s.mUp.Disabled() { + case status.Status == string(internal.StatusConnecting): + s.setConnectingStatus() + case status.Status != string(internal.StatusConnected) && s.mUp.Disabled(): s.setDisconnectedStatus() systrayIconState = false } @@ -594,6 +598,17 @@ func (s *serviceClient) setDisconnectedStatus() { go s.updateExitNodes() } +func (s *serviceClient) setConnectingStatus() { + s.connected = false + systray.SetTemplateIcon(iconConnectingMacOS, s.icConnecting) + systray.SetTooltip("NetBird (Connecting)") + s.mStatus.SetTitle("Connecting") + s.mUp.Disable() + s.mDown.Enable() + s.mNetworks.Disable() + s.mExitNode.Disable() +} + func (s *serviceClient) onTrayReady() { systray.SetTemplateIcon(iconDisconnectedMacOS, s.icDisconnected) systray.SetTooltip("NetBird")