add ability to logout of server (via new settings menu button)

This commit is contained in:
Drew Weymouth
2023-02-12 17:57:03 -08:00
parent b5aa8e61f0
commit 32345b5c81
3 changed files with 31 additions and 12 deletions
+17 -1
View File
@@ -52,6 +52,8 @@ type BrowsingPane struct {
history []SavedPage
historyIdx int
settingsBtn *widget.Button
settingsMenu *fyne.Menu
navBtnsContainer *fyne.Container
pageContainer *fyne.Container
container *fyne.Container
@@ -65,12 +67,21 @@ func NewBrowsingPane(app *backend.App) *BrowsingPane {
b.reload = widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), b.Reload)
b.app.PlaybackManager.OnSongChange(b.onSongChange)
b.pageContainer = container.NewMax(
// TODO: get this color into the theme
canvas.NewRectangle(color.RGBA{R: 24, G: 24, B: 24, A: 255}),
layout.NewSpacer())
b.settingsBtn = widget.NewButtonWithIcon("", theme.SettingsIcon(), func() {
p := widget.NewPopUpMenu(b.settingsMenu,
fyne.CurrentApp().Driver().CanvasForObject(b.settingsBtn))
p.ShowAtPosition(fyne.NewPos(b.Size().Width-p.MinSize().Width-theme.Padding()/2,
b.navBtnsContainer.MinSize().Height+theme.Padding()))
})
b.settingsMenu = fyne.NewMenu("")
b.navBtnsContainer = container.NewHBox()
b.container = container.NewBorder(
container.New(layouts.NewLeftMiddleRightLayout(0),
container.NewHBox(b.back, b.forward, b.reload), b.navBtnsContainer, layout.NewSpacer()),
container.NewHBox(b.back, b.forward, b.reload), b.navBtnsContainer,
container.NewHBox(layout.NewSpacer(), b.settingsBtn)),
nil, nil, nil, b.pageContainer)
return b
}
@@ -91,6 +102,11 @@ func (b *BrowsingPane) ClearHistory() {
b.historyIdx = 0
}
func (b *BrowsingPane) AddSettingsMenuItem(label string, action func()) {
b.settingsMenu.Items = append(b.settingsMenu.Items,
fyne.NewMenuItem(label, action))
}
func (b *BrowsingPane) AddNavigationButton(iconRes fyne.Resource, action func()) {
b.navBtnsContainer.Add(widget.NewButtonWithIcon("", iconRes, action))
}
+12 -10
View File
@@ -88,26 +88,20 @@ func (c Controller) DoConnectToServerWorkflow(server *backend.ServerConfig) {
pass, err := c.App.ServerManager.GetServerPassword(server)
if err != nil {
log.Printf("error getting password from keyring: %v", err)
c.promptForLogin(func(server *backend.ServerConfig, password string) {
if err := c.App.ServerManager.SetServerPassword(server, password); err != nil {
log.Printf("error setting keyring credentials: %v", err)
// TODO: handle?
}
c.tryConnectToServer(server, password)
})
c.PromptForLogin()
} else {
c.tryConnectToServer(server, pass)
}
}
func (m Controller) promptForLogin(cb func(server *backend.ServerConfig, password string)) {
func (m Controller) PromptForLogin() {
// TODO: this will need to be rewritten a bit when we support multi servers
// need to make sure the intended server is first in the list passed to NewLoginDialog
d := dialogs.NewLoginDialog(m.App.Config.Servers)
pop := widget.NewModalPopUp(d, m.MainWindow.Canvas())
d.OnSubmit = func(server *backend.ServerConfig, password string) {
pop.Hide()
cb(server, password)
m.trySetPasswordAndConnectToServer(server, password)
}
d.OnEditServer = func(server *backend.ServerConfig) {
pop.Hide()
@@ -118,13 +112,21 @@ func (m Controller) promptForLogin(cb func(server *backend.ServerConfig, passwor
server.Hostname = editD.Host
server.Nickname = editD.Nickname
server.Username = editD.Username
cb(server, editD.Password)
m.trySetPasswordAndConnectToServer(server, editD.Password)
}
editPop.Show()
}
pop.Show()
}
func (c Controller) trySetPasswordAndConnectToServer(server *backend.ServerConfig, password string) {
if err := c.App.ServerManager.SetServerPassword(server, password); err != nil {
log.Printf("error setting keyring credentials: %v", err)
// TODO: handle?
}
c.tryConnectToServer(server, password)
}
func (c Controller) tryConnectToServer(server *backend.ServerConfig, password string) {
if err := c.App.ServerManager.ConnectToServer(server, password); err != nil {
log.Printf("error connecting to server: %v", err)
+2 -1
View File
@@ -69,8 +69,9 @@ func NewMainWindow(fyneApp fyne.App, appName string, app *backend.App, size fyne
m.BrowsingPane.DisableNavigationButtons()
m.BrowsingPane.SetPage(nil)
m.BrowsingPane.ClearHistory()
// TODO: show prompt for login
m.Controller.PromptForLogin()
})
m.BrowsingPane.AddSettingsMenuItem("Log Out", app.ServerManager.Logout)
m.addNavigationButtons()
m.addShortcuts()
return m