diff options
| -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] } |
