summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/api/model/status.go6
-rw-r--r--internal/typeutils/internaltofrontend.go39
2 files changed, 45 insertions, 0 deletions
diff --git a/internal/api/model/status.go b/internal/api/model/status.go
index ec09f702d..bcd0c0f93 100644
--- a/internal/api/model/status.go
+++ b/internal/api/model/status.go
@@ -166,6 +166,12 @@ type WebStatus struct {
// after the "main" thread, so it and everything
// below it can be considered "replies".
ThreadFirstReply bool
+
+ // Sorted slice of StatusEdit times for
+ // this status, from latest to oldest.
+ // Only set if status has been edited.
+ // Last entry is always creation time.
+ EditTimeline []string `json:"-"`
}
/*
diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go
index 91c9fea8a..2c662c3bd 100644
--- a/internal/typeutils/internaltofrontend.go
+++ b/internal/typeutils/internaltofrontend.go
@@ -1217,6 +1217,45 @@ func (c *Converter) StatusToWebStatus(
// Mark local.
webStatus.Local = *s.Local
+ // Get edit history for this
+ // status, if it's been edited.
+ if webStatus.EditedAt != nil {
+ // Make sure edits are populated.
+ if len(s.Edits) != len(s.EditIDs) {
+ s.Edits, err = c.state.DB.GetStatusEditsByIDs(ctx, s.EditIDs)
+ if err != nil && !errors.Is(err, db.ErrNoEntries) {
+ err := gtserror.Newf("db error getting status edits: %w", err)
+ return nil, err
+ }
+ }
+
+ // Include each historical entry
+ // (this includes the created date).
+ for _, edit := range s.Edits {
+ webStatus.EditTimeline = append(
+ webStatus.EditTimeline,
+ util.FormatISO8601(edit.CreatedAt),
+ )
+ }
+
+ // Make sure to include latest revision.
+ webStatus.EditTimeline = append(
+ webStatus.EditTimeline,
+ *webStatus.EditedAt,
+ )
+
+ // Sort the slice so it goes from
+ // newest -> oldest, like a timeline.
+ //
+ // It'll look something like:
+ //
+ // - edit3 date (ie., latest version)
+ // - edit2 date (if we have it)
+ // - edit1 date (if we have it)
+ // - created date
+ slices.Reverse(webStatus.EditTimeline)
+ }
+
// Set additional templating
// variables on media attachments.