From 7f702eaf6b091feaa8d59ae7320f6c68f5f03d2c Mon Sep 17 00:00:00 2001 From: citrons Date: Sun, 1 Jun 2025 16:01:59 -0500 Subject: leaving channels --- client/channel_window.go | 7 ++++++- client/command.go | 8 ++++++++ client/window/window.go | 7 +++++++ 3 files changed, 21 insertions(+), 1 deletion(-) (limited to 'client') 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] } -- cgit v1.2.3