commit 3d075168e8b4d38ba812c39a79cb75ee55671bb6
parent 108435c89fbcecca336325a9b82835ad45606270
Author: MTRNord <mtrnord1@gmail.com>
Date: Fri, 25 Aug 2017 01:23:20 +0200
Fix sync (only works with changes from https://github.com/matrix-org/gomatrix/pull/39 )
Signed-off-by: MTRNord <mtrnord1@gmail.com>
Diffstat:
5 files changed, 37 insertions(+), 30 deletions(-)
diff --git a/main.go b/main.go
@@ -8,6 +8,7 @@ import (
"github.com/Nordgedanken/Neo/util"
"github.com/therecipe/qt/widgets"
"github.com/tidwall/buntdb"
+ "sync"
)
var window *widgets.QMainWindow
@@ -65,11 +66,12 @@ func main() {
})
if accessToken != "" && homeserverURL != "" && userID != "" {
+ var wg sync.WaitGroup
localLog.Println("Starting Auto Login Sequenze in background")
results := make(chan *matrix.Client)
wg.Add(1)
- go DoLogin("", "", homeserverURL, userID, accessToken, localLog, results)
+ go DoLogin("", "", homeserverURL, userID, accessToken, localLog, results, &wg)
go func() {
wg.Wait() // wait for each execTask to return
diff --git a/matrix/login.go b/matrix/login.go
@@ -18,9 +18,9 @@ func GetClient(homeserverURL, userID, accessToken string) (clientInstance *Clien
clientInstance = &Client{client}
err = db.Update(func(tx *buntdb.Tx) error {
- tx.Set("user:accessToken", clientInstance.AccessToken, nil)
- tx.Set("user:homeserverURL", clientInstance.HomeserverURL.String(), nil)
- tx.Set("user:userID", clientInstance.UserID, nil)
+ tx.Set("user:accessToken", clientInstance.Client.AccessToken, nil)
+ tx.Set("user:homeserverURL", clientInstance.Client.HomeserverURL.String(), nil)
+ tx.Set("user:userID", clientInstance.Client.UserID, nil)
return nil
})
if err != nil {
@@ -48,7 +48,7 @@ func LoginUser(username, password string) (*Client, error) {
return nil, cliErr
}
- resp, err := cli.Login(&gomatrix.ReqLogin{
+ resp, err := cli.Client.Login(&gomatrix.ReqLogin{
Type: "m.login.password",
User: username,
Password: password,
@@ -56,7 +56,7 @@ func LoginUser(username, password string) (*Client, error) {
if err != nil {
return nil, err
}
- cli.SetCredentials(resp.UserID, resp.AccessToken)
+ cli.Client.SetCredentials(resp.UserID, resp.AccessToken)
DBerr := db.Update(func(tx *buntdb.Tx) error {
tx.Set("user:accessToken", resp.AccessToken, nil)
tx.Set("user:deviceID", resp.DeviceID, nil)
diff --git a/matrix/ownUser.go b/matrix/ownUser.go
@@ -36,9 +36,9 @@ func getUserDisplayName(mxid string, cli *Client) (displayName string, err error
// If cache is empty query the api
if displayName == "" {
- urlPath := cli.BuildURL("profile", mxid, "displayname")
+ urlPath := cli.Client.BuildURL("profile", mxid, "displayname")
var resp *RespUserDisplayName
- _, err = cli.MakeRequest("GET", urlPath, nil, &resp)
+ _, err = cli.Client.MakeRequest("GET", urlPath, nil, &resp)
// Update cache
err = db.Update(func(tx *buntdb.Tx) error {
@@ -59,7 +59,7 @@ func getOwnUserAvatar(cli *Client) *gui.QPixmap {
// Get cache
db.View(func(tx *buntdb.Tx) error {
- QueryErr := tx.AscendKeys("user:"+cli.UserID+":avatarData100x100",
+ QueryErr := tx.AscendKeys("user:"+cli.Client.UserID+":avatarData100x100",
func(key, value string) bool {
avatarData = value
return true
@@ -73,19 +73,19 @@ func getOwnUserAvatar(cli *Client) *gui.QPixmap {
//If cache is empty do a ServerQuery
if avatarData == "" {
// Get avatarURL
- avatarURL, avatarErr := cli.GetAvatarURL()
+ avatarURL, avatarErr := cli.Client.GetAvatarURL()
if avatarErr != nil {
localLog.Println(avatarErr)
}
// If avatarURL is not empty (aka. has a avatar set) download it at the size of 100x100. Else make the data string empty
if avatarURL != "" {
- hsURL := cli.HomeserverURL.String()
+ hsURL := cli.Client.HomeserverURL.String()
avatarURL_splits := strings.Split(strings.Replace(avatarURL, "mxc://", "", -1), "/")
urlPath := hsURL + "/_matrix/media/r0/thumbnail/" + avatarURL_splits[0] + "/" + avatarURL_splits[1] + "?width=100&height=100"
- data, err := cli.MakeRequest("GET", urlPath, nil, nil)
+ data, err := cli.Client.MakeRequest("GET", urlPath, nil, nil)
if err != nil {
localLog.Println(err)
}
@@ -97,7 +97,7 @@ func getOwnUserAvatar(cli *Client) *gui.QPixmap {
// Update cache
DBerr := db.Update(func(tx *buntdb.Tx) error {
- tx.Set("user:"+cli.UserID+":avatarData100x100", IMGdata, nil)
+ tx.Set("user:"+cli.Client.UserID+":avatarData100x100", IMGdata, nil)
return nil
})
if DBerr != nil {
diff --git a/matrix/types.go b/matrix/types.go
@@ -7,7 +7,7 @@ import (
// Client is the Client type extender toadd new methods to it which gomatrix lacks currently
type Client struct {
- *gomatrix.Client
+ Client *gomatrix.Client
}
// RespUserDisplayName is the Response type of getUserDisplayName()
diff --git a/uis.go b/uis.go
@@ -1,6 +1,7 @@
package main
import (
+ "fmt"
"log"
"strings"
"sync"
@@ -15,9 +16,8 @@ import (
var username string
var password string
-var wg sync.WaitGroup
-func DoLogin(username, password, homeserverURL, userID, accessToken string, localLog *log.Logger, results chan<- *matrix.Client) {
+func DoLogin(username, password, homeserverURL, userID, accessToken string, localLog *log.Logger, results chan<- *matrix.Client, wg *sync.WaitGroup) {
defer wg.Done()
var cli *matrix.Client
if accessToken != "" && homeserverURL != "" && userID != "" {
@@ -32,7 +32,7 @@ func DoLogin(username, password, homeserverURL, userID, accessToken string, loca
if cliErr != nil {
localLog.Println(cliErr)
}
- cli.SetCredentials(userID, accessToken)
+ cli.Client.SetCredentials(userID, accessToken)
} else {
var err error
cli, err = matrix.LoginUser(username, password)
@@ -111,12 +111,14 @@ func NewLoginUI(windowWidth, windowHeight int) *widgets.QWidget {
loginButton.ConnectClicked(func(checked bool) {
//TODO register enter and show loader or so
+ var wg sync.WaitGroup
+
if username != "" && password != "" {
localLog.Println("Starting Login Sequenze in background")
results := make(chan *matrix.Client)
wg.Add(1)
- go DoLogin(username, password, "", "", "", localLog, results)
+ go DoLogin(username, password, "", "", "", localLog, results, &wg)
go func() {
wg.Wait() // wait for each execTask to return
@@ -194,11 +196,11 @@ func NewMainUI(windowWidth, windowHeight int, cli *matrix.Client) *widgets.QWidg
messageScroll.SetWidgetResizable(true)
// Messages
- syncer := cli.Syncer.(*gomatrix.DefaultSyncer)
- cli.Store = gomatrix.NewInMemoryStore()
- syncer.Store = gomatrix.NewInMemoryStore()
+ syncer := cli.Client.Syncer.(*gomatrix.DefaultSyncer)
+ customStore := gomatrix.NewInMemoryStore()
+ cli.Client.Store = customStore
+ syncer.Store = customStore
syncer.OnEventType("m.room.message", func(ev *gomatrix.Event) {
- localLog.Println(ev)
// TODO Later needs to match current Room
if ev.RoomID == "!zTIXGmDjyRcAqbrWab:matrix.ffslfl.net" {
messageBody, messageOk := ev.Body()
@@ -216,14 +218,17 @@ func NewMainUI(windowWidth, windowHeight int, cli *matrix.Client) *widgets.QWidg
// Start Non-blocking sync
localLog.Println("Syncing now")
- go func(localLog *log.Logger, cli *matrix.Client) {
- if err := cli.Sync(); err != nil {
- localLog.Println("Sync() returned ", err)
+ go func() {
+ for {
+ fmt.Println("sync")
+ if e := cli.Client.Sync(); e != nil {
+ fmt.Println("Fatal Sync() error")
+ time.Sleep(10 * time.Second)
+ }
time.Sleep(10 * time.Second)
- } else {
- localLog.Println("Stopping Sync()")
}
- }(localLog, cli)
+ }()
+
localLog.Println("Started Syncing")
wrapperLayout.AddWidget(messageScroll, 0, 1, 0)
@@ -251,12 +256,12 @@ func NewMainUI(windowWidth, windowHeight int, cli *matrix.Client) *widgets.QWidg
wg.Add(1)
go func(cli *matrix.Client, localLog *log.Logger, results chan<- bool) {
defer wg.Done()
- _, err := cli.Logout()
+ _, err := cli.Client.Logout()
if err != nil {
localLog.Println(err)
results <- false
} else {
- cli.ClearCredentials()
+ cli.Client.ClearCredentials()
//Flush complete DB
db.View(func(tx *buntdb.Tx) error {
var QueryErr error