summaryrefslogtreecommitdiff
path: root/pkg/ui/views/play_keymap.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/ui/views/play_keymap.go')
-rw-r--r--pkg/ui/views/play_keymap.go31
1 files changed, 30 insertions, 1 deletions
diff --git a/pkg/ui/views/play_keymap.go b/pkg/ui/views/play_keymap.go
index d5ccc9c..200f427 100644
--- a/pkg/ui/views/play_keymap.go
+++ b/pkg/ui/views/play_keymap.go
@@ -1,11 +1,14 @@
package views
import (
+ "errors"
"fmt"
+ "strconv"
"github.com/charmbracelet/bubbles/key"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
+ "github.com/notnil/chess"
)
type PlayModelPage int
@@ -20,6 +23,7 @@ const (
type playKeyMap struct {
EnterNewGame key.Binding
StartNewGame key.Binding
+ RestoreGame key.Binding
GoLogout key.Binding
Quit key.Binding
NextPage key.Binding
@@ -36,6 +40,10 @@ var defaultPlayKeyMap = playKeyMap{
key.WithKeys("alt+s", "alt+S"),
key.WithHelp("Alt+S", "Start a new play"),
),
+ RestoreGame: key.NewBinding(
+ key.WithKeys("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"),
+ key.WithHelp("[0-9]", "Restore a game"),
+ ),
GoLogout: key.NewBinding(
key.WithKeys("alt+Q", "alt+q"),
key.WithHelp("Alt+Q", "Logout"),
@@ -60,7 +68,6 @@ func (m PlayModel) handleKeyPress(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
switch {
case key.Matches(msg, m.keys.EnterNewGame):
m.page = InsertCodePage
- m.namePrompt, cmd = m.namePrompt.Update("suca")
return m, cmd
case key.Matches(msg, m.keys.StartNewGame):
@@ -70,6 +77,23 @@ func (m PlayModel) handleKeyPress(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
return m, m.newGameCallback()
}
+ case key.Matches(msg, m.keys.RestoreGame):
+ idx, err := strconv.Atoi(msg.String())
+ m.err = err
+ if err == nil {
+ gameIndex := m.paginator.Page*m.paginator.PerPage + idx
+ if gameIndex < len(m.games) {
+ m.gameToRestore = &m.games[gameIndex]
+ if m.gameToRestore.Outcome != chess.NoOutcome.String() {
+ m.err = errors.New("this game is closed")
+ } else {
+ m.err = nil
+ m.namePrompt.SetValue(m.gameToRestore.Name)
+ return m, m.enterGame()
+ }
+ }
+ }
+
case key.Matches(msg, m.keys.GoLogout):
return m, logout(m.width, m.height+1)
@@ -107,6 +131,10 @@ func (m PlayModel) renderNavigationButtons() string {
altCodeStyle.Render(m.keys.EnterNewGame.Help().Key),
m.keys.EnterNewGame.Help().Desc)
+ restoreKey := fmt.Sprintf("%s %s",
+ altCodeStyle.Render(m.keys.RestoreGame.Help().Key),
+ m.keys.RestoreGame.Help().Desc)
+
startKey := fmt.Sprintf("%s %s",
altCodeStyle.Render(m.keys.StartNewGame.Help().Key),
m.keys.StartNewGame.Help().Desc)
@@ -123,6 +151,7 @@ func (m PlayModel) renderNavigationButtons() string {
lipgloss.Left,
enterKey,
startKey,
+ restoreKey,
lipgloss.JoinHorizontal(lipgloss.Left, prevPageKey, " | ", nextPageKey),
logoutKey,
quitKey,