morpheus

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

commit 76f0ef1b20bc6a5408ff8fbd28ffd39612348011
parent c36aa9eda7ea508fe34fbdbd465ab8d513d82b05
Author: MTRNord <mtrnord1@gmail.com>
Date:   Sat, 21 Oct 2017 21:41:47 +0200

Load Cache on Start and Room Switch \(^^)/

Signed-off-by: MTRNord <mtrnord1@gmail.com>

Diffstat:
Mmatrix/db.go | 35-----------------------------------
Mui/MainUI.go | 62++++++++++++++++++++++++++++++++++++++++++++++++++++----------
Mui/roomlist.go | 2++
3 files changed, 54 insertions(+), 45 deletions(-)

diff --git a/matrix/db.go b/matrix/db.go @@ -5,7 +5,6 @@ import ( "path/filepath" "strconv" - "github.com/matrix-org/gomatrix" "github.com/shibukawa/configdir" "github.com/tidwall/buntdb" ) @@ -52,39 +51,6 @@ func OpenUserDB() (db *buntdb.DB, err error) { return } -// InitData inits basic Data like getting aliases of joinedRooms -func InitData(cli *gomatrix.Client) (err error) { - db, DBOpenErr := OpenCacheDB() - if DBOpenErr != nil { - localLog.Fatalln(DBOpenErr) - } - defer db.Close() - - // Todo Get aliases - /*for _, room := range rooms.JoinedRooms { - var roomAliases RoomAliases - if StateEventErr := cli.StateEvent(room, "m.room.aliases", "", &roomAliases); StateEventErr != nil { - localLog.Println(StateEventErr) - // Not returning as a Error NotFound is allowed - } - - for index, alias := range roomAliases.Content.Aliases { - // Update cache - DBerr := db.Update(func(tx *buntdb.Tx) error { - localLog.Println(room) - _, _, DBSetErr := tx.Set("room|"+room+"|aliases|"+string(index), alias, nil) - return DBSetErr - }) - if DBerr != nil { - err = DBerr - return - } - } - - }*/ - return -} - // CacheMessageEvents writes message infos into the cache into the defined room func CacheMessageEvents(id, sender, roomID, message string, timestamp int64) (err error) { db, DBOpenErr := OpenCacheDB() @@ -95,7 +61,6 @@ func CacheMessageEvents(id, sender, roomID, message string, timestamp int64) (er // Update cache DBerr := db.Update(func(tx *buntdb.Tx) error { - localLog.Println(roomID) _, _, DBSetIDErr := tx.Set("room|"+roomID+"|messages|"+id+"|id", id, nil) if DBSetIDErr != nil { return DBSetIDErr diff --git a/ui/MainUI.go b/ui/MainUI.go @@ -5,6 +5,8 @@ import ( "log" "sync" + "strconv" + "github.com/Nordgedanken/Morpheus/matrix" "github.com/Nordgedanken/Morpheus/util" "github.com/matrix-org/gomatrix" @@ -72,12 +74,6 @@ func (m *MainUI) NewUI() (err error) { m.MainWidget = loader.Load(file, m.widget) file.Close() - InitDataErr := matrix.InitData(m.cli) - if InitDataErr != nil { - err = InitDataErr - return - } - messageScrollArea := widgets.NewQScrollAreaFromPointer(m.widget.FindChild("messageScroll", core.Qt__FindChildrenRecursively).Pointer()) messagesScrollAreaContent := widgets.NewQWidgetFromPointer(m.widget.FindChild("messagesScrollAreaContent", core.Qt__FindChildrenRecursively).Pointer()) roomScrollArea := widgets.NewQScrollAreaFromPointer(m.widget.FindChild("roomScroll", core.Qt__FindChildrenRecursively).Pointer()) @@ -94,7 +90,6 @@ func (m *MainUI) NewUI() (err error) { layout.SetContentsMargins(0, 0, 0, 0) m.widget.ConnectResizeEvent(func(event *gui.QResizeEvent) { - fmt.Println("resize Widget") m.MainWidget.Resize(event.Size()) event.Accept() }) @@ -148,7 +143,7 @@ func (m *MainUI) NewUI() (err error) { } }) - m.startSync(m.MessageListLayout) + m.startSync() m.widget.SetSizePolicy2(widgets.QSizePolicy__Expanding, widgets.QSizePolicy__Expanding) m.MainWidget.SetSizePolicy2(widgets.QSizePolicy__Expanding, widgets.QSizePolicy__Expanding) @@ -164,6 +159,8 @@ func (m *MainUI) NewUI() (err error) { m.initRoomList(roomListLayout, roomScrollArea) + go m.loadCache() + m.MainWidget.SetWindowTitle("Morpheus - " + m.rooms[m.currentRoom].GetRoomTopic()) avatar, roomAvatarErr := m.rooms[m.currentRoom].GetRoomAvatar() @@ -285,7 +282,7 @@ func (m *MainUI) logout(widget *widgets.QWidget, messageScrollArea *widgets.QScr return } -func (m *MainUI) startSync(messageListLayout *QVBoxLayoutWithTriggerSlot) (err error) { +func (m *MainUI) startSync() (err error) { //Start Syncer! m.syncer = m.cli.Syncer.(*gomatrix.DefaultSyncer) m.storage = gomatrix.NewInMemoryStore() @@ -307,7 +304,7 @@ func (m *MainUI) startSync(messageListLayout *QVBoxLayoutWithTriggerSlot) (err e fmt.Println(room) fmt.Println(m.currentRoom) if room == m.currentRoom { - messageListLayout.TriggerMessage(msg, sender, timestamp) + m.MessageListLayout.TriggerMessage(msg, sender, timestamp) } }) @@ -343,3 +340,48 @@ func (m *MainUI) initRoomList(roomListLayout *QRoomVBoxLayoutWithTriggerSlot, ro return } + +func (m *MainUI) loadCache() (err error) { + db, DBOpenErr := matrix.OpenCacheDB() + if DBOpenErr != nil { + err = DBOpenErr + } + defer db.Close() + + DBerr := db.View(func(tx *buntdb.Tx) error { + IDErr := tx.AscendKeys("room|"+m.currentRoom+"|messages|*|id", func(_, id string) bool { + msg, GetMsgErr := tx.Get("room|" + m.currentRoom + "|messages|" + id + "|message") + if GetMsgErr != nil { + fmt.Println("GetMsgErr: ", GetMsgErr) + return false + } + + sender, GetSenderErr := tx.Get("room|" + m.currentRoom + "|messages|" + id + "|sender") + if GetSenderErr != nil { + return false + } + + timestamp, GetTimestampErr := tx.Get("room|" + m.currentRoom + "|messages|" + id + "|timestamp") + if GetTimestampErr != nil { + return false + } + timestampInt, ConvErr := strconv.ParseInt(timestamp, 10, 64) + if ConvErr != nil { + return false + } + m.MessageListLayout.TriggerMessage(msg, sender, timestampInt) + return true + }) + if IDErr != nil { + fmt.Println("IDErr: ", IDErr) + return IDErr + } + return nil + }) + if DBerr != nil { + fmt.Println("DBERR: ", DBerr) + err = DBerr + return + } + return +} diff --git a/ui/roomlist.go b/ui/roomlist.go @@ -92,6 +92,8 @@ func (roomViewLayout *QRoomVBoxLayoutWithTriggerSlot) NewRoom(room *matrix.Room, widgetScroll.DeleteLater() } + go mainUIStruct.loadCache() + return true }