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
import (
"fmt"
"os"
"text/template"
"maunium.net/go/mautrix/id"
"gitlab.com/etke.cc/emm/matrix"
)
@ -28,8 +24,8 @@ func Run(templatePath string, output string, messages []*matrix.Message) error {
return err
}
for _, message := range messages {
if message.Replace != "" {
remove(output, message.Replace)
if message.Replaced {
continue
}
err = save(tpl, output, message)
if err != nil {
@ -40,17 +36,12 @@ func Run(templatePath string, output string, messages []*matrix.Message) error {
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 {
file, err := getOutput(path, message.ID)
eventID := message.ID
if message.Replace != "" {
eventID = message.Replace
}
file, err := getOutput(path, eventID)
if err != nil {
return err
}

View File

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