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) d := dialogs.NewLoginDialog(m.App.Config.Servers)
pop := widget.NewModalPopUp(d, m.MainWindow.Canvas()) pop := widget.NewModalPopUp(d, m.MainWindow.Canvas())
d.OnSubmit = func(server *backend.ServerConfig, password string) { d.OnSubmit = func(server *backend.ServerConfig, password string) {
pop.Hide() err := m.App.ServerManager.TestConnectionAndAuth(server.Hostname, server.Username, password)
m.trySetPasswordAndConnectToServer(server, 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) { d.OnEditServer = func(server *backend.ServerConfig) {
pop.Hide() pop.Hide()
+19 -4
View File
@@ -16,9 +16,10 @@ type LoginDialog struct {
OnSubmit func(server *backend.ServerConfig, password string) OnSubmit func(server *backend.ServerConfig, password string)
OnEditServer func(server *backend.ServerConfig) OnEditServer func(server *backend.ServerConfig)
servers []*backend.ServerConfig servers []*backend.ServerConfig
serverSelect *widget.Select serverSelect *widget.Select
passField *widget.Entry passField *widget.Entry
errPromptText *widget.RichText
container *fyne.Container container *fyne.Container
} }
@@ -40,6 +41,10 @@ func NewLoginDialog(servers []*backend.ServerConfig) *LoginDialog {
l.passField = widget.NewPasswordEntry() l.passField = widget.NewPasswordEntry()
okBtn := widget.NewButton("OK", l.onSubmit) 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( l.container = container.NewVBox(
container.NewHBox(layout.NewSpacer(), titleLabel, layout.NewSpacer()), container.NewHBox(layout.NewSpacer(), titleLabel, layout.NewSpacer()),
container.New(layout.NewFormLayout(), container.New(layout.NewFormLayout(),
@@ -48,11 +53,21 @@ func NewLoginDialog(servers []*backend.ServerConfig) *LoginDialog {
widget.NewLabel("Password"), widget.NewLabel("Password"),
l.passField), l.passField),
widget.NewSeparator(), widget.NewSeparator(),
container.NewHBox(layout.NewSpacer(), okBtn), container.NewHBox(l.errPromptText, layout.NewSpacer(), okBtn),
) )
return l 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 { func (l *LoginDialog) CreateRenderer() fyne.WidgetRenderer {
return widget.NewSimpleRenderer(l.container) return widget.NewSimpleRenderer(l.container)
} }