add ability to logout of server (via new settings menu button)
This commit is contained in:
@@ -52,6 +52,8 @@ type BrowsingPane struct {
|
|||||||
history []SavedPage
|
history []SavedPage
|
||||||
historyIdx int
|
historyIdx int
|
||||||
|
|
||||||
|
settingsBtn *widget.Button
|
||||||
|
settingsMenu *fyne.Menu
|
||||||
navBtnsContainer *fyne.Container
|
navBtnsContainer *fyne.Container
|
||||||
pageContainer *fyne.Container
|
pageContainer *fyne.Container
|
||||||
container *fyne.Container
|
container *fyne.Container
|
||||||
@@ -65,12 +67,21 @@ func NewBrowsingPane(app *backend.App) *BrowsingPane {
|
|||||||
b.reload = widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), b.Reload)
|
b.reload = widget.NewButtonWithIcon("", theme.ViewRefreshIcon(), b.Reload)
|
||||||
b.app.PlaybackManager.OnSongChange(b.onSongChange)
|
b.app.PlaybackManager.OnSongChange(b.onSongChange)
|
||||||
b.pageContainer = container.NewMax(
|
b.pageContainer = container.NewMax(
|
||||||
|
// TODO: get this color into the theme
|
||||||
canvas.NewRectangle(color.RGBA{R: 24, G: 24, B: 24, A: 255}),
|
canvas.NewRectangle(color.RGBA{R: 24, G: 24, B: 24, A: 255}),
|
||||||
layout.NewSpacer())
|
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.navBtnsContainer = container.NewHBox()
|
||||||
b.container = container.NewBorder(
|
b.container = container.NewBorder(
|
||||||
container.New(layouts.NewLeftMiddleRightLayout(0),
|
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)
|
nil, nil, nil, b.pageContainer)
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
@@ -91,6 +102,11 @@ func (b *BrowsingPane) ClearHistory() {
|
|||||||
b.historyIdx = 0
|
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()) {
|
func (b *BrowsingPane) AddNavigationButton(iconRes fyne.Resource, action func()) {
|
||||||
b.navBtnsContainer.Add(widget.NewButtonWithIcon("", iconRes, action))
|
b.navBtnsContainer.Add(widget.NewButtonWithIcon("", iconRes, action))
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-10
@@ -88,26 +88,20 @@ func (c Controller) DoConnectToServerWorkflow(server *backend.ServerConfig) {
|
|||||||
pass, err := c.App.ServerManager.GetServerPassword(server)
|
pass, err := c.App.ServerManager.GetServerPassword(server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error getting password from keyring: %v", err)
|
log.Printf("error getting password from keyring: %v", err)
|
||||||
c.promptForLogin(func(server *backend.ServerConfig, password string) {
|
c.PromptForLogin()
|
||||||
if err := c.App.ServerManager.SetServerPassword(server, password); err != nil {
|
|
||||||
log.Printf("error setting keyring credentials: %v", err)
|
|
||||||
// TODO: handle?
|
|
||||||
}
|
|
||||||
c.tryConnectToServer(server, password)
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
c.tryConnectToServer(server, pass)
|
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
|
// 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
|
// need to make sure the intended server is first in the list passed to NewLoginDialog
|
||||||
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()
|
pop.Hide()
|
||||||
cb(server, password)
|
m.trySetPasswordAndConnectToServer(server, password)
|
||||||
}
|
}
|
||||||
d.OnEditServer = func(server *backend.ServerConfig) {
|
d.OnEditServer = func(server *backend.ServerConfig) {
|
||||||
pop.Hide()
|
pop.Hide()
|
||||||
@@ -118,13 +112,21 @@ func (m Controller) promptForLogin(cb func(server *backend.ServerConfig, passwor
|
|||||||
server.Hostname = editD.Host
|
server.Hostname = editD.Host
|
||||||
server.Nickname = editD.Nickname
|
server.Nickname = editD.Nickname
|
||||||
server.Username = editD.Username
|
server.Username = editD.Username
|
||||||
cb(server, editD.Password)
|
m.trySetPasswordAndConnectToServer(server, editD.Password)
|
||||||
}
|
}
|
||||||
editPop.Show()
|
editPop.Show()
|
||||||
}
|
}
|
||||||
pop.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) {
|
func (c Controller) tryConnectToServer(server *backend.ServerConfig, password string) {
|
||||||
if err := c.App.ServerManager.ConnectToServer(server, password); err != nil {
|
if err := c.App.ServerManager.ConnectToServer(server, password); err != nil {
|
||||||
log.Printf("error connecting to server: %v", err)
|
log.Printf("error connecting to server: %v", err)
|
||||||
|
|||||||
+2
-1
@@ -69,8 +69,9 @@ func NewMainWindow(fyneApp fyne.App, appName string, app *backend.App, size fyne
|
|||||||
m.BrowsingPane.DisableNavigationButtons()
|
m.BrowsingPane.DisableNavigationButtons()
|
||||||
m.BrowsingPane.SetPage(nil)
|
m.BrowsingPane.SetPage(nil)
|
||||||
m.BrowsingPane.ClearHistory()
|
m.BrowsingPane.ClearHistory()
|
||||||
// TODO: show prompt for login
|
m.Controller.PromptForLogin()
|
||||||
})
|
})
|
||||||
|
m.BrowsingPane.AddSettingsMenuItem("Log Out", app.ServerManager.Logout)
|
||||||
m.addNavigationButtons()
|
m.addNavigationButtons()
|
||||||
m.addShortcuts()
|
m.addShortcuts()
|
||||||
return m
|
return m
|
||||||
|
|||||||
Reference in New Issue
Block a user