morpheus

A Matrix client written in Go-QT
git clone git://archive.git.mtrnord.blog/Nordgedanken/morpheus.git
Log | Files | Refs | README | LICENSE

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:
Muis.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")