57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package tui
|
|
|
|
import (
|
|
"tailscale-vpn/internal/pages"
|
|
"tailscale-vpn/internal/services"
|
|
)
|
|
|
|
type page int
|
|
|
|
const (
|
|
pageHome page = iota
|
|
pageSettings
|
|
pageSelectServer
|
|
)
|
|
|
|
type TUIInterface struct {
|
|
Services *services.ServicesStore
|
|
Page page
|
|
MenuItems []pages.MenuItem
|
|
Selected int
|
|
Quitting bool
|
|
WindowWidth int
|
|
WindowHeight int
|
|
VPNConnected bool
|
|
VPNLoading bool
|
|
VPNToggleLoading bool
|
|
VPNError error
|
|
HasServers bool
|
|
SelectedServer services.Server
|
|
HasSelectedServer bool
|
|
SettingsServers []services.Server
|
|
SettingsSelected int
|
|
SettingsEditMode string
|
|
SettingsEditingServer services.Server
|
|
SettingsFormName string
|
|
SettingsFormHost string
|
|
SettingsFormField int
|
|
SettingsConfirmDelete bool
|
|
SelectServerServers []services.Server
|
|
SelectServerSelected int
|
|
}
|
|
|
|
func NewTUIInterface(store *services.ServicesStore) TUIInterface {
|
|
servers := store.Config.GetServers()
|
|
selectedServer, hasSelected := store.Config.GetSelectedServer()
|
|
return TUIInterface{
|
|
Services: store,
|
|
Page: pageHome,
|
|
MenuItems: pages.HomeMenuItems(false, len(servers) > 0),
|
|
VPNConnected: false,
|
|
VPNLoading: true,
|
|
HasServers: len(servers) > 0,
|
|
SelectedServer: selectedServer,
|
|
HasSelectedServer: hasSelected,
|
|
}
|
|
}
|