feat: implemented all features besides wireguard
This commit is contained in:
+121
-6
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user