aboutsummaryrefslogtreecommitdiff
path: root/matrix/rooms
diff options
context:
space:
mode:
Diffstat (limited to 'matrix/rooms')
-rw-r--r--matrix/rooms/room.go41
1 files changed, 34 insertions, 7 deletions
diff --git a/matrix/rooms/room.go b/matrix/rooms/room.go
index 17bf21b..8a543e8 100644
--- a/matrix/rooms/room.go
+++ b/matrix/rooms/room.go
@@ -24,12 +24,19 @@ import (
"maunium.net/go/gomatrix"
"maunium.net/go/gomuks/debug"
+ "os"
+ "encoding/gob"
)
+func init() {
+ gob.Register([]interface{}{})
+ gob.Register(map[string]interface{}{})
+}
+
type RoomNameSource int
const (
- ExplicitRoomName RoomNameSource = iota
+ ExplicitRoomName RoomNameSource = iota
CanonicalAliasRoomName
AliasRoomName
MemberRoomName
@@ -44,8 +51,8 @@ type RoomTag struct {
}
type UnreadMessage struct {
- EventID string
- Counted bool
+ EventID string
+ Counted bool
Highlight bool
}
@@ -63,9 +70,9 @@ type Room struct {
SessionUserID string
// The number of unread messages that were notified about.
- UnreadMessages []UnreadMessage
+ UnreadMessages []UnreadMessage
unreadCountCache *int
- highlightCache *bool
+ highlightCache *bool
// Whether or not this room is marked as a direct chat.
IsDirect bool
@@ -113,6 +120,26 @@ func (room *Room) UnlockHistory() {
}
}
+func (room *Room) Load(path string) error {
+ file, err := os.OpenFile(path, os.O_RDONLY, 0600)
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+ dec := gob.NewDecoder(file)
+ return dec.Decode(room)
+}
+
+func (room *Room) Save(path string) error {
+ file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0600)
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+ enc := gob.NewEncoder(file)
+ return enc.Encode(room)
+}
+
// MarkRead clears the new message statuses on this room.
func (room *Room) MarkRead(eventID string) {
readToIndex := -1
@@ -159,8 +186,8 @@ func (room *Room) HasNewMessages() bool {
func (room *Room) AddUnread(eventID string, counted, highlight bool) {
room.UnreadMessages = append(room.UnreadMessages, UnreadMessage{
- EventID: eventID,
- Counted: counted,
+ EventID: eventID,
+ Counted: counted,
Highlight: highlight,
})
if counted {