feat(mail): Sort pinned messages first in inbox (gt-ngu1)

Add Pinned field to BeadsMessage and sort pinned messages before
unpinned ones in listBeads(). Within each group, sort by newest first.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-20 17:53:52 -08:00
parent 4c060f4aaa
commit f6ff533891
3 changed files with 11 additions and 0 deletions

View File

@@ -104,6 +104,14 @@ func (m *Mailbox) listBeads() ([]*Message, error) {
return nil, err
}
// Sort pinned messages first, then by timestamp (newest first)
sort.Slice(beadsMsgs, func(i, j int) bool {
if beadsMsgs[i].Pinned != beadsMsgs[j].Pinned {
return beadsMsgs[i].Pinned // pinned comes first
}
return beadsMsgs[i].CreatedAt.After(beadsMsgs[j].CreatedAt)
})
// Convert to GGT messages
var messages []*Message
for _, bm := range beadsMsgs {

View File

@@ -154,6 +154,7 @@ type BeadsMessage struct {
Status string `json:"status"` // open=unread, closed=read
CreatedAt time.Time `json:"created_at"`
Labels []string `json:"labels"` // Metadata labels (from:X, thread:X, reply-to:X, msg-type:X)
Pinned bool `json:"pinned,omitempty"`
// Cached parsed values (populated by ParseLabels)
sender string