adjust mesage replacement based on timestamp, use replaced messages' IDs

This commit is contained in:
Aine 2023-04-06 23:32:42 +03:00
parent 7b8fa14e28
commit 7281464843
No known key found for this signature in database
GPG Key ID: 34969C908CCA2804
2 changed files with 19 additions and 24 deletions

View File

@ -24,9 +24,6 @@ func Run(templatePath string, output string, messages []*matrix.Message) error {
return err
}
for _, message := range messages {
if message.Replaced {
continue
}
err = save(tpl, output, message)
if err != nil {
return err
@ -37,11 +34,7 @@ func Run(templatePath string, output string, messages []*matrix.Message) error {
}
func save(tpl *template.Template, path string, message *matrix.Message) error {
eventID := message.ID
if message.Replace != "" {
eventID = message.Replace
}
file, err := getOutput(path, eventID)
file, err := getOutput(path, message.ID)
if err != nil {
return err
}

View File

@ -18,8 +18,6 @@ type Message struct {
ID id.EventID
// Replace is a matrix ID of old (replaced) event
Replace id.EventID
// Replaced is a flag that message was replaced
Replaced bool
// ReplacedNote is a text note usable from template to mark replaced message as updated
ReplacedNote string
// Author is a matrix id of the sender
@ -48,7 +46,7 @@ var (
// * some room messages don't contain body/formatted body
func Messages(limit int) ([]*Message, error) {
var err error
msgmap = make(map[id.EventID]*Message)
msgmap = make(map[id.EventID]*Message, 0)
if limit > Page {
err = paginate(limit)
} else {
@ -58,8 +56,6 @@ func Messages(limit int) ([]*Message, error) {
return nil, err
}
markReplaced()
var messages []*Message
for _, message := range msgmap {
messages = append(messages, message)
@ -131,6 +127,23 @@ func processEvents(resp *mautrix.RespMessages) {
if message == nil {
continue
}
addMessage(message)
}
}
func addMessage(message *Message) {
if message.Replace != "" {
message.ID = message.Replace
message.ReplacedNote = " (updated)"
}
msg, ok := msgmap[message.ID]
if !ok {
msgmap[message.ID] = message
return
}
if msg.CreatedAtFull.Before(message.CreatedAtFull) {
msgmap[message.ID] = message
}
}
@ -168,14 +181,3 @@ func parseMessage(evt *event.Event) *Message {
CreatedAtFull: createdAt,
}
}
func markReplaced() {
log.Println("marking replaced messages...")
for _, message := range msgmap {
if message.Replace != "" {
message.ReplacedNote = " (updated)"
msgmap[message.Replace].Replaced = true
msgmap[message.Replace].ReplacedNote = " (updated)"
}
}
}