From 094a566189a29568a1b7a49510602aecfbcb7bdd Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sun, 27 May 2018 14:54:07 +0300 Subject: Split command system from main view --- ui/view-main.go | 81 +++++---------------------------------------------------- 1 file changed, 7 insertions(+), 74 deletions(-) (limited to 'ui/view-main.go') diff --git a/ui/view-main.go b/ui/view-main.go index 9f4f247..785fb44 100644 --- a/ui/view-main.go +++ b/ui/view-main.go @@ -18,7 +18,6 @@ package ui import ( "fmt" - "strings" "time" "unicode" @@ -40,9 +39,10 @@ import ( type MainView struct { *tview.Flex - roomList *RoomList - roomView *tview.Pages - rooms map[string]*RoomView + roomList *RoomList + roomView *tview.Pages + rooms map[string]*RoomView + cmdProcessor *CommandProcessor lastFocusTime time.Time @@ -73,6 +73,7 @@ func (ui *GomuksUI) NewMainView() tview.Primitive { hideRoomList: prefs.HideRoomList, bareMessages: prefs.BareMessageView, } + mainView.cmdProcessor = NewCommandProcessor(mainView) mainView. SetDirection(tview.FlexColumn). @@ -133,10 +134,8 @@ func (view *MainView) InputSubmit(roomView *RoomView, text string) { if len(text) == 0 { return } else if text[0] == '/' { - args := strings.SplitN(text, " ", 2) - command := strings.ToLower(args[0]) - args = args[1:] - go view.HandleCommand(roomView, command, args) + cmd := view.cmdProcessor.ParseCommand(roomView, text) + go view.cmdProcessor.HandleCommand(cmd) } else { view.SendMessage(roomView, text) } @@ -168,72 +167,6 @@ func (view *MainView) sendTempMessage(roomView *RoomView, tempMessage ifc.Messag } } -func (view *MainView) HandleCommand(roomView *RoomView, command string, args []string) { - defer debug.Recover() - debug.Print("Handling command", command, args) - switch command { - case "/me": - text := strings.Join(args, " ") - tempMessage := roomView.NewTempMessage("m.emote", text) - go view.sendTempMessage(roomView, tempMessage, text) - view.parent.Render() - case "/quit": - view.gmx.Stop() - case "/clearcache": - view.config.Clear() - view.gmx.Stop() - case "/panic": - panic("This is a test panic.") - case "/part", "/leave": - err := view.matrix.LeaveRoom(roomView.Room.ID) - debug.Print("Leave room error:", err) - if err == nil { - view.RemoveRoom(roomView.Room) - } - case "/uitoggle": - if len(args) == 0 { - roomView.AddServiceMessage("Usage: /uitoggle ") - break - } - switch args[0] { - case "rooms": - view.hideRoomList = !view.hideRoomList - view.config.Preferences.HideRoomList = view.hideRoomList - case "users": - view.hideUserList = !view.hideUserList - view.config.Preferences.HideUserList = view.hideUserList - case "baremessages": - view.bareMessages = !view.bareMessages - view.config.Preferences.BareMessageView = view.bareMessages - default: - roomView.AddServiceMessage("Usage: /uitoggle ") - return - } - view.parent.Render() - view.parent.Render() - go view.matrix.SendPreferencesToMatrix() - case "/join": - if len(args) == 0 { - roomView.AddServiceMessage("Usage: /join ") - break - } - identifer := args[0] - server := "" - if len(args) > 1 { - server = args[1] - } - room, err := view.matrix.JoinRoom(identifer, server) - debug.Print("Join room error:", err) - if err == nil { - view.AddRoom(room) - } - case "/logout": - view.matrix.Logout() - default: - roomView.AddServiceMessage("Unknown command.") - } -} - func (view *MainView) ShowBare(roomView *RoomView) { _, height := view.parent.app.GetScreen().Size() view.parent.app.Suspend(func() { -- cgit v1.2.3