properly update replaced messages

This commit is contained in:
Aine 2023-04-03 10:07:26 +03:00
parent a776108dd5
commit 7b8fa14e28
No known key found for this signature in database
GPG Key ID: 34969C908CCA2804
2 changed files with 17 additions and 24 deletions

View File

@ -1,12 +1,8 @@
package export package export
import ( import (
"fmt"
"os"
"text/template" "text/template"
"maunium.net/go/mautrix/id"
"gitlab.com/etke.cc/emm/matrix" "gitlab.com/etke.cc/emm/matrix"
) )
@ -28,8 +24,8 @@ func Run(templatePath string, output string, messages []*matrix.Message) error {
return err return err
} }
for _, message := range messages { for _, message := range messages {
if message.Replace != "" { if message.Replaced {
remove(output, message.Replace) continue
} }
err = save(tpl, output, message) err = save(tpl, output, message)
if err != nil { if err != nil {
@ -40,17 +36,12 @@ func Run(templatePath string, output string, messages []*matrix.Message) error {
return nil return nil
} }
func remove(output string, eventID id.EventID) {
if !isMulti(output) {
return
}
// nolint // in 99.99% cases it will be "no such file or directory" error, which is ok.
os.Remove(fmt.Sprintf(output, eventID))
}
func save(tpl *template.Template, path string, message *matrix.Message) error { func save(tpl *template.Template, path string, message *matrix.Message) error {
file, err := getOutput(path, message.ID) eventID := message.ID
if message.Replace != "" {
eventID = message.Replace
}
file, err := getOutput(path, eventID)
if err != nil { if err != nil {
return err return err
} }

View File

@ -18,6 +18,10 @@ type Message struct {
ID id.EventID ID id.EventID
// Replace is a matrix ID of old (replaced) event // Replace is a matrix ID of old (replaced) event
Replace id.EventID 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 // Author is a matrix id of the sender
Author id.UserID Author id.UserID
// Text is the message body in plaintext/markdown format // Text is the message body in plaintext/markdown format
@ -54,7 +58,7 @@ func Messages(limit int) ([]*Message, error) {
return nil, err return nil, err
} }
removeReplaced() markReplaced()
var messages []*Message var messages []*Message
for _, message := range msgmap { for _, message := range msgmap {
@ -165,15 +169,13 @@ func parseMessage(evt *event.Event) *Message {
} }
} }
func removeReplaced() { func markReplaced() {
var list []id.EventID log.Println("marking replaced messages...")
log.Println("removing replaced messages...")
for _, message := range msgmap { for _, message := range msgmap {
if message.Replace != "" { if message.Replace != "" {
list = append(list, message.Replace) message.ReplacedNote = " (updated)"
msgmap[message.Replace].Replaced = true
msgmap[message.Replace].ReplacedNote = " (updated)"
} }
} }
for _, eventID := range list {
delete(msgmap, eventID)
}
} }