Files
tailscale-vpn/internal/tui/commands.go
2026-04-10 01:46:57 +09:00

101 lines
2.3 KiB
Go

package tui
import (
"context"
"fmt"
"tailscale-vpn/internal/pages"
"tailscale-vpn/internal/services"
tea "charm.land/bubbletea/v2"
)
func checkVPNStatusCmd(store *services.ServicesStore) tea.Cmd {
return func() tea.Msg {
ctx := context.Background()
connected, err := store.VPN.CheckStatus(ctx)
return pages.VPNStatusMsg{
Connected: connected,
Err: err,
}
}
}
func turnOnVPNCmd(store *services.ServicesStore) tea.Cmd {
return func() tea.Msg {
ctx := context.Background()
if err := store.VPN.TurnOn(ctx); err != nil {
return pages.VPNToggleMsg{
Connected: false,
Err: err,
}
}
connected, _ := store.VPN.CheckStatus(ctx)
return pages.VPNToggleMsg{
Connected: connected,
Err: nil,
}
}
}
func turnOffVPNCmd(store *services.ServicesStore) tea.Cmd {
return func() tea.Msg {
ctx := context.Background()
if err := store.VPN.TurnOff(ctx); err != nil {
return pages.VPNToggleMsg{
Connected: true,
Err: err,
}
}
connected, _ := store.VPN.CheckStatus(ctx)
return pages.VPNToggleMsg{
Connected: connected,
Err: nil,
}
}
}
func loadServersCmd(store *services.ServicesStore) tea.Cmd {
return func() tea.Msg {
servers := store.Config.GetServers()
return pages.ServerListLoadedMsg{
Servers: servers,
Err: nil,
}
}
}
func addServerCmd(store *services.ServicesStore, name, host string) tea.Cmd {
return func() tea.Msg {
err := store.Config.AddServer(name, host)
return pages.ServerSaveMsg{Err: err}
}
}
func updateServerCmd(store *services.ServicesStore, id, name, host string) tea.Cmd {
return func() tea.Msg {
err := store.Config.UpdateServer(id, name, host)
return pages.ServerSaveMsg{Err: err}
}
}
func deleteServerCmd(store *services.ServicesStore, id string) tea.Cmd {
return func() tea.Msg {
err := store.Config.RemoveServer(id)
return pages.ServerDeleteMsg{Err: err}
}
}
func selectServerCmd(store *services.ServicesStore, serverID string) tea.Cmd {
return func() tea.Msg {
err := store.Config.SetSelectedServer(serverID)
if err != nil {
return pages.ServerSelectedMsg{Err: err}
}
server, ok := store.Config.GetSelectedServer()
if !ok {
return pages.ServerSelectedMsg{Err: fmt.Errorf("failed to get selected server")}
}
return pages.ServerSelectedMsg{Server: server, Err: nil}
}
}