Skip to content

Commit 861d6f4

Browse files
committed
cmd/trayscale: support showing "This device: node (IP)"
1 parent 03cfe0c commit 861d6f4

2 files changed

Lines changed: 46 additions & 7 deletions

File tree

internal/tray/tray.go

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package tray
22

33
import (
44
_ "embed"
5+
"fmt"
56

7+
"deedles.dev/trayscale/internal/tsutil"
68
"fyne.io/systray"
79
)
810

@@ -22,21 +24,25 @@ func statusIcon(online bool) []byte {
2224
}
2325

2426
type Tray struct {
25-
showItem *systray.MenuItem
26-
quitItem *systray.MenuItem
27+
showItem *systray.MenuItem
28+
quitItem *systray.MenuItem
29+
selfNodeItem *systray.MenuItem
2730
}
2831

2932
func New(online bool) *Tray {
3033
systray.SetIcon(statusIcon(online))
3134
systray.SetTitle("Trayscale")
3235

36+
selfNodeItem := systray.AddMenuItem("", "")
37+
systray.AddSeparator()
3338
showWindow := systray.AddMenuItem("Show", "")
3439
systray.AddSeparator()
3540
quit := systray.AddMenuItem("Quit", "")
3641

3742
return &Tray{
38-
showItem: showWindow,
39-
quitItem: quit,
43+
showItem: showWindow,
44+
quitItem: quit,
45+
selfNodeItem: selfNodeItem,
4046
}
4147
}
4248

@@ -48,12 +54,45 @@ func (t *Tray) ShowChan() <-chan struct{} {
4854
return t.showItem.ClickedCh
4955
}
5056

51-
func (t *Tray) SetOnlineStatus(online bool) {
57+
func (t *Tray) setOnlineStatus(online bool) {
58+
systray.SetIcon(statusIcon(online))
59+
}
60+
61+
func (t *Tray) Update(s tsutil.Status, previousOnlineStatus bool) {
5262
if t == nil {
5363
return
5464
}
5565

56-
systray.SetIcon(statusIcon(online))
66+
if s.Online() != previousOnlineStatus {
67+
t.setOnlineStatus(s.Online())
68+
}
69+
70+
var title string
71+
if s.Status != nil && s.Status.Self != nil {
72+
// A naive approach to get first available TS IP.
73+
// Ways to refine: sort and get the "Less"er or prefer
74+
// first IPv4 in the list.
75+
var ipInfo string
76+
if len(s.Status.Self.TailscaleIPs) > 0 {
77+
ipInfo = fmt.Sprintf(
78+
" (%s)",
79+
s.Status.Self.TailscaleIPs[0].String(),
80+
)
81+
}
82+
83+
title = fmt.Sprintf(
84+
"This device: %s%s",
85+
s.Status.Self.HostName,
86+
ipInfo,
87+
)
88+
}
89+
90+
if title == "" {
91+
t.selfNodeItem.Hide()
92+
} else {
93+
t.selfNodeItem.SetTitle(title)
94+
t.selfNodeItem.Show()
95+
}
5796
}
5897

5998
var systrayExit = make(chan func(), 1)

internal/ui/app.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,10 @@ func (a *App) updatePeers(status tsutil.Status) {
166166

167167
func (a *App) update(s tsutil.Status) {
168168
online := s.Online()
169+
a.tray.Update(s, a.online)
169170
if a.online != online {
170171
a.online = online
171172
a.notify(online) // TODO: Notify on startup if not connected?
172-
a.tray.SetOnlineStatus(online)
173173
}
174174
if a.win == nil {
175175
return

0 commit comments

Comments
 (0)