diff options
| author | citrons <citrons@mondecitronne.com> | 2025-06-01 16:01:59 -0500 |
|---|---|---|
| committer | citrons <citrons@mondecitronne.com> | 2025-06-01 16:01:59 -0500 |
| commit | 7f702eaf6b091feaa8d59ae7320f6c68f5f03d2c (patch) | |
| tree | 0520b3ff39496a9badf03d9ac0c6f368f1a28731 | |
| parent | 7b7e086718e65f7289e1c026e6ea6f49d4a506c9 (diff) | |
leaving channels
| -rw-r--r-- | client/channel_window.go | 7 | ||||
| -rw-r--r-- | client/command.go | 8 | ||||
| -rw-r--r-- | client/window/window.go | 7 |
3 files changed, 21 insertions, 1 deletions
diff --git a/client/channel_window.go b/client/channel_window.go index abeaa77..2a2e82f 100644 --- a/client/channel_window.go +++ b/client/channel_window.go @@ -68,7 +68,7 @@ func (cw *channelWindow) Location() window.Location { func (cw *channelWindow) Kill() { globalApp.cache.Unwatch(cw.location.id) for u := range cw.watchedUsers { - globalApp.cache.Watch(u) + globalApp.cache.Unwatch(u) } } @@ -102,6 +102,11 @@ func (cw *channelWindow) Send(text string) { cw.input.SetText("") } +func (cw *channelWindow) leaveChannel() { + globalApp.Request(proto.NewCmd("leave", cw.location.id), nil) + globalApp.windowCache.Evict(cw.location) +} + func (cw *channelWindow) ShowStatusLine() { ch := cw.getChannel() if ch == nil { diff --git a/client/command.go b/client/command.go index f505f9a..6727114 100644 --- a/client/command.go +++ b/client/command.go @@ -65,6 +65,14 @@ func (a *application) doCommand(command string, args []string, text string) { if a.authenticated { a.join(args[0]) } + case "leave": + argN(0) + win := a.windowCache.Get(a.currentWindow) + switch win.(type) { + case *channelWindow: + win.(*channelWindow).leaveChannel() + } + a.currentWindow = cmdWindowLocation {} case "create": argN(1) if a.authenticated { diff --git a/client/window/window.go b/client/window/window.go index a877f7b..5ed9a18 100644 --- a/client/window/window.go +++ b/client/window/window.go @@ -33,6 +33,13 @@ func (wc *WindowCache) Open(l Location) Window { return wc.windows[l] } +func (wc *WindowCache) Evict(l Location) { + if wc.windows[l] != nil { + wc.windows[l].Kill() + } + delete(wc.windows, l) +} + func (wc *WindowCache) Get(l Location) Window { return wc.windows[l] } |
