commit bc1fc526f3a06078a68e3cf2a86fa34b39f597d0
parent df5e99ec8fd1b9dbeb80157a00e5b308dfea75f9
Author: MTRNord <mtrnord1@gmail.com>
Date: Wed, 23 Aug 2017 00:56:24 +0200
Prevent Login Window from freezing via running login inside goroutine.
Diffstat:
| M | uis.go | | | 35 | ++++++++++++++++++++++++++++------- |
1 file changed, 28 insertions(+), 7 deletions(-)
diff --git a/uis.go b/uis.go
@@ -2,6 +2,8 @@ package main
import (
"fmt"
+ "log"
+ "sync"
"github.com/Nordgedanken/Neo/matrix"
"github.com/therecipe/qt/core"
@@ -54,15 +56,34 @@ func NewLoginUI(windowWidth, windowHeight int) *widgets.QWidget {
})
loginButton.ConnectClicked(func(checked bool) {
- localLog.Println("Starting Login Sequenze")
- cli, err := matrix.LoginUser(username, password)
- if err != nil {
- localLog.Println(err)
- }
- MainUI := NewMainUI(windowWidth, windowHeight, cli)
+ //TODO register enter and show loader or so
+ localLog.Println("Starting Login Sequenze in background")
+ var wg sync.WaitGroup
+ results := make(chan *matrix.Client)
+
+ wg.Add(1)
+ go func(username, password string, localLog *log.Logger, results chan<- *matrix.Client) {
+ defer wg.Done()
+ cli, err := matrix.LoginUser(username, password)
+ if err != nil {
+ localLog.Println(err)
+ }
+
+ results <- cli
+
+ }(username, password, localLog, results)
+
+ go func() {
+ wg.Wait() // wait for each execTask to return
+ close(results) // then close the results channel
+ }()
//Show MainUI
- window.SetCentralWidget(MainUI)
+ for result := range results {
+ MainUI := NewMainUI(windowWidth, windowHeight, result)
+ window.SetCentralWidget(MainUI)
+ }
+
})
widget.SetWindowTitle("Neo - Login")