diff --git a/client/ui/assets/netbird-systemtray-needs-login-macos.png b/client/ui/assets/netbird-systemtray-needs-login-macos.png new file mode 100644 index 000000000..580fe647c Binary files /dev/null and b/client/ui/assets/netbird-systemtray-needs-login-macos.png differ diff --git a/client/ui/assets/netbird-systemtray-needs-login.png b/client/ui/assets/netbird-systemtray-needs-login.png new file mode 100644 index 000000000..c4b8b4bf4 Binary files /dev/null and b/client/ui/assets/netbird-systemtray-needs-login.png differ diff --git a/client/ui/assets/svg/_base.svg b/client/ui/assets/svg/_base.svg deleted file mode 100644 index 9b2498ae8..000000000 --- a/client/ui/assets/svg/_base.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - diff --git a/client/ui/assets/svg/appicon.svg b/client/ui/assets/svg/appicon.svg deleted file mode 100644 index 773ad3417..000000000 --- a/client/ui/assets/svg/appicon.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - diff --git a/client/ui/assets/svg/connected-macos.svg b/client/ui/assets/svg/connected-macos.svg deleted file mode 100644 index d1e2ce18c..000000000 --- a/client/ui/assets/svg/connected-macos.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/client/ui/assets/svg/connected.svg b/client/ui/assets/svg/connected.svg deleted file mode 100644 index 687d8e2e5..000000000 --- a/client/ui/assets/svg/connected.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - diff --git a/client/ui/assets/svg/connecting-macos.svg b/client/ui/assets/svg/connecting-macos.svg deleted file mode 100644 index 04d666c5f..000000000 --- a/client/ui/assets/svg/connecting-macos.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/client/ui/assets/svg/connecting.svg b/client/ui/assets/svg/connecting.svg deleted file mode 100644 index d3818055a..000000000 --- a/client/ui/assets/svg/connecting.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/client/ui/assets/svg/disconnected-macos.svg b/client/ui/assets/svg/disconnected-macos.svg deleted file mode 100644 index 06802c9d4..000000000 --- a/client/ui/assets/svg/disconnected-macos.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/client/ui/assets/svg/disconnected.svg b/client/ui/assets/svg/disconnected.svg deleted file mode 100644 index 31eab7970..000000000 --- a/client/ui/assets/svg/disconnected.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/client/ui/assets/svg/error-macos.svg b/client/ui/assets/svg/error-macos.svg deleted file mode 100644 index 4c6d4e76d..000000000 --- a/client/ui/assets/svg/error-macos.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/client/ui/assets/svg/error.svg b/client/ui/assets/svg/needs-login.svg similarity index 71% rename from client/ui/assets/svg/error.svg rename to client/ui/assets/svg/needs-login.svg index 46ac0d762..5c01b48d4 100644 --- a/client/ui/assets/svg/error.svg +++ b/client/ui/assets/svg/needs-login.svg @@ -5,7 +5,6 @@ - - - + + diff --git a/client/ui/assets/svg/update-connected-macos.svg b/client/ui/assets/svg/update-connected-macos.svg deleted file mode 100644 index 774e631e6..000000000 --- a/client/ui/assets/svg/update-connected-macos.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/client/ui/assets/svg/update-connected.svg b/client/ui/assets/svg/update-connected.svg deleted file mode 100644 index 45e22693b..000000000 --- a/client/ui/assets/svg/update-connected.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/client/ui/assets/svg/update-disconnected-macos.svg b/client/ui/assets/svg/update-disconnected-macos.svg deleted file mode 100644 index fe161cc44..000000000 --- a/client/ui/assets/svg/update-disconnected-macos.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/client/ui/assets/svg/update-disconnected.svg b/client/ui/assets/svg/update-disconnected.svg deleted file mode 100644 index 657974005..000000000 --- a/client/ui/assets/svg/update-disconnected.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/client/ui/icons.go b/client/ui/icons.go index 28d4582cc..3fe3ea9ef 100644 --- a/client/ui/icons.go +++ b/client/ui/icons.go @@ -26,6 +26,9 @@ var iconConnecting []byte //go:embed assets/netbird-systemtray-error.png var iconError []byte +//go:embed assets/netbird-systemtray-needs-login.png +var iconNeedsLogin []byte + //go:embed assets/netbird-systemtray-update-connected.png var iconUpdateConnected []byte @@ -44,6 +47,9 @@ var iconConnectingMacOS []byte //go:embed assets/netbird-systemtray-error-macos.png var iconErrorMacOS []byte +//go:embed assets/netbird-systemtray-needs-login-macos.png +var iconNeedsLoginMacOS []byte + //go:embed assets/netbird-systemtray-update-connected-macos.png var iconUpdateConnectedMacOS []byte diff --git a/client/ui/tray.go b/client/ui/tray.go index fd8ab351f..27b8b545c 100644 --- a/client/ui/tray.go +++ b/client/ui/tray.go @@ -80,6 +80,12 @@ const ( // completed an SSO authentication on this profile. Mirrors // internal.StatusNeedsLogin. statusNeedsLogin = "NeedsLogin" + // statusLoginFailed is what the daemon publishes when a login attempt + // failed with a non-auth error (management unreachable, init error, + // etc.). The CLI groups it with NeedsLogin/SessionExpired and prompts + // the user to run "netbird up", so we mirror that here. Mirrors + // internal.StatusLoginFailed. + statusLoginFailed = "LoginFailed" // External URLs. urlGitHubRepo = "https://github.com/netbirdio/netbird" @@ -434,7 +440,8 @@ func (t *Tray) applyStatus(st services.Status) { if iconChanged { t.applyIcon() needsLogin := strings.EqualFold(st.Status, statusNeedsLogin) || - strings.EqualFold(st.Status, statusSessionExpired) + strings.EqualFold(st.Status, statusSessionExpired) || + strings.EqualFold(st.Status, statusLoginFailed) daemonUnavailable := strings.EqualFold(st.Status, services.StatusDaemonUnavailable) if t.statusItem != nil { // When the daemon needs re-authentication the status row turns @@ -542,6 +549,9 @@ func (t *Tray) iconForState() (icon, dark []byte) { connecting := strings.EqualFold(statusLabel, "Connecting") errored := strings.EqualFold(statusLabel, "Error") || strings.EqualFold(statusLabel, services.StatusDaemonUnavailable) + needsLogin := strings.EqualFold(statusLabel, statusNeedsLogin) || + strings.EqualFold(statusLabel, statusSessionExpired) || + strings.EqualFold(statusLabel, statusLoginFailed) if runtime.GOOS == "darwin" { switch { @@ -549,6 +559,8 @@ func (t *Tray) iconForState() (icon, dark []byte) { return iconConnectingMacOS, nil case errored: return iconErrorMacOS, nil + case needsLogin: + return iconNeedsLoginMacOS, nil case connected && hasUpdate: return iconUpdateConnectedMacOS, nil case connected: @@ -565,6 +577,8 @@ func (t *Tray) iconForState() (icon, dark []byte) { return iconConnecting, nil case errored: return iconError, nil + case needsLogin: + return iconNeedsLogin, nil case connected && hasUpdate: return iconUpdateConnected, nil case connected: