test connection before dismissing LoginDialog

This commit is contained in:
Drew Weymouth
2023-02-14 17:52:53 -08:00
parent 69a008951e
commit e5a1c4df49
2 changed files with 28 additions and 6 deletions
+9 -2
View File
@@ -103,8 +103,15 @@ func (m Controller) PromptForLoginAndConnect() {
d := dialogs.NewLoginDialog(m.App.Config.Servers)
pop := widget.NewModalPopUp(d, m.MainWindow.Canvas())
d.OnSubmit = func(server *backend.ServerConfig, password string) {
pop.Hide()
m.trySetPasswordAndConnectToServer(server, password)
err := m.App.ServerManager.TestConnectionAndAuth(server.Hostname, server.Username, password)
if err == backend.ErrUnreachable {
d.SetErrorText("Server unreachable")
} else if err != nil {
d.SetErrorText("Authentication failed")
} else {
pop.Hide()
m.trySetPasswordAndConnectToServer(server, password)
}
}
d.OnEditServer = func(server *backend.ServerConfig) {
pop.Hide()
+19 -4
View File
@@ -16,9 +16,10 @@ type LoginDialog struct {
OnSubmit func(server *backend.ServerConfig, password string)
OnEditServer func(server *backend.ServerConfig)
servers []*backend.ServerConfig
serverSelect *widget.Select
passField *widget.Entry
servers []*backend.ServerConfig
serverSelect *widget.Select
passField *widget.Entry
errPromptText *widget.RichText
container *fyne.Container
}
@@ -40,6 +41,10 @@ func NewLoginDialog(servers []*backend.ServerConfig) *LoginDialog {
l.passField = widget.NewPasswordEntry()
okBtn := widget.NewButton("OK", l.onSubmit)
l.errPromptText = widget.NewRichTextWithText("")
l.errPromptText.Segments[0].(*widget.TextSegment).Style.ColorName = theme.ColorNameError
l.errPromptText.Hidden = true
l.container = container.NewVBox(
container.NewHBox(layout.NewSpacer(), titleLabel, layout.NewSpacer()),
container.New(layout.NewFormLayout(),
@@ -48,11 +53,21 @@ func NewLoginDialog(servers []*backend.ServerConfig) *LoginDialog {
widget.NewLabel("Password"),
l.passField),
widget.NewSeparator(),
container.NewHBox(layout.NewSpacer(), okBtn),
container.NewHBox(l.errPromptText, layout.NewSpacer(), okBtn),
)
return l
}
func (l *LoginDialog) SetErrorText(text string) {
l.errPromptText.Segments[0].(*widget.TextSegment).Text = text
if text != "" {
l.errPromptText.Show()
} else {
l.errPromptText.Hide()
}
l.errPromptText.Refresh()
}
func (l *LoginDialog) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(l.container)
}