feat: implemented all features besides wireguard

This commit is contained in:
jb
2026-03-11 11:01:35 -03:00
parent 6870144f39
commit 085cda7251
11 changed files with 539 additions and 73 deletions
+121 -6
View File
@@ -5,34 +5,63 @@ import (
"strings"
tea "charm.land/bubbletea/v2"
"charm.land/lipgloss/v2"
)
const (
header = "App do Dono - Instalador Cliente"
header = "App do Dono - Instalador Cliente"
defaultMsg = "ctrl+c: sair"
anyKeyOutMsg = "qualquer tecla: sair"
formMsg = "tab: próximo campo • enter: confirmar • ctrl+c: sair"
)
func (m Model) View() tea.View {
pad := strings.Repeat(" ", padding)
var body string
helpMsg := "ctrl+c: sair"
helpMsg := defaultMsg
switch m.currentStep {
// Docker stuff
case StepCheckDocker:
body = m.viewCheckDocker()
case StepDockerInstall:
body = m.viewDockerInstall()
helpMsg = "qualquer tecla: sair"
helpMsg = anyKeyOutMsg
case StepDockerLogin:
body = m.loginForm.View()
helpMsg = formMsg
case StepDownloadImage:
body = m.viewDownloadImage()
// IP Stuff
case StepIPQuestion:
body = m.viewIPQuestion()
// App Config Stuff
case StepServerConfig:
body = m.serverForm.View()
helpMsg = "tab: próximo campo • enter: confirmar • ctrl+c: sair"
helpMsg = formMsg
case StepDatabaseConfig:
body = m.dbForm.View()
helpMsg = "tab: próximo campo • enter: confirmar • ctrl+c: sair"
helpMsg = formMsg
case StepCertConfig:
body = m.certForm.View()
helpMsg = "tab: próximo campo • enter: confirmar • ctrl+c: sair"
helpMsg = formMsg
// Finalize
case StepGenerateFile:
body = m.viewGenerateFile()
if m.finishedFile && m.configFileError != nil {
helpMsg = anyKeyOutMsg
}
case StepRunDocker:
body = m.viewDockerRun()
if m.finishedDockerRun && m.dockerRunError != nil {
helpMsg = anyKeyOutMsg
}
case StepDone:
body = m.viewDoneMessage()
helpMsg = anyKeyOutMsg
}
help := HelpStyle.Render(helpMsg)
@@ -88,6 +117,32 @@ func (m Model) viewDockerInstall() string {
return sb.String()
}
func (m Model) viewDownloadImage() string {
pad := strings.Repeat(" ", padding)
var sb strings.Builder
if !m.downloadDone {
sb.WriteString(pad + fmt.Sprintf("%s Baixando imagem do container...\n\n", m.spinner.View()))
return sb.String()
}
if m.downloadError == nil {
sb.WriteString(pad + "Instalação concluída com êxito.\n\n")
sb.WriteString(pad + "Pressione qualquer tecla para continuar.")
} else {
sb.WriteString(pad + "Instalação finalizada com erros.\n\n")
dualPad := pad + pad
errText := dualPad + m.downloadMessage + "\n" + dualPad + m.downloadError.Error()
sb.WriteString(ErrorStyle.Width(m.width - (padding * 2)).Align(lipgloss.Left).Render(errText))
sb.WriteString("\n\n" + pad + "Pressione qualquer tecla para sair.")
}
return sb.String()
}
func (m Model) viewIPQuestion() string {
pad := strings.Repeat(" ", padding)
@@ -113,3 +168,63 @@ func (m Model) viewIPQuestion() string {
return sb.String()
}
func (m Model) viewGenerateFile() string {
pad := strings.Repeat(" ", padding)
var sb strings.Builder
if !m.finishedFile {
sb.WriteString(pad + m.spinner.View() + "Gerando arquivo. Aguarde...")
} else {
sb.WriteString(pad + "Geração do arquivo finalizada.\n\n")
if m.configFileError == nil {
sb.WriteString(pad + "Arquivo gerado com sucesso. Pressione qualquer tecla para seguir.")
} else {
sb.WriteString(pad + "Ocorreu um erro ao gerar o arquivo.\n\n")
dualPad := pad + pad
errText := dualPad + m.configFileError.Error()
sb.WriteString(ErrorStyle.Width(m.width - (padding * 2)).Align(lipgloss.Left).Render(errText))
sb.WriteString("\n\n" + pad + "Tente novamente.")
}
}
return sb.String()
}
func (m Model) viewDockerRun() string {
pad := strings.Repeat(" ", padding)
var sb strings.Builder
if !m.finishedDockerRun {
sb.WriteString(pad + m.spinner.View() + "Tentando iniciar o container Docker. Aguarde...")
} else {
sb.WriteString(pad + "Inicialização finalizada.\n\n")
if m.dockerRunError == nil {
sb.WriteString(pad + "Container Docker iniciado com sucesso. Pressione qualquer tecla para seguir.")
} else {
sb.WriteString(pad + "Ocorreu um erro ao iniciar o container.\n\n")
dualPad := pad + pad
errText := dualPad + m.dockerRunError.Error()
sb.WriteString(ErrorStyle.Width(m.width - (padding * 2)).Align(lipgloss.Left).Render(errText))
sb.WriteString("\n\n" + pad + "Tente novamente.")
}
}
return sb.String()
}
func (m Model) viewDoneMessage() string {
pad := strings.Repeat(" ", padding)
var sb strings.Builder
sb.WriteString(pad + "Instalação realizada com sucesso!")
return sb.String()
}