checkpoint: draw poll contents in status if poll exists

This commit is contained in:
Dan Anglin 2024-06-11 01:26:25 +01:00
parent ac2e74cac3
commit 8e59ecf697
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638

View file

@ -5,7 +5,7 @@
package model
import (
"fmt"
"strconv"
"strings"
"time"
@ -30,7 +30,7 @@ type Status struct {
Mentions []Mention `json:"mentions"`
Muted bool `json:"muted"`
Pinned bool `json:"pinned"`
Poll Poll `json:"poll"`
Poll *Poll `json:"poll"`
Reblog *StatusReblogged `json:"reblog"`
Reblogged bool `json:"reblogged"`
ReblogsCount int `json:"reblogs_count"`
@ -158,47 +158,54 @@ type MediaDimensions struct {
}
func (s Status) Display(noColor bool) string {
format := `
%s
var builder strings.Builder
%s
%s
%s
%s
// The account information
builder.WriteString(utilities.FullDisplayNameFormat(noColor, s.Account.DisplayName, s.Account.Acct) + "\n\n")
%s
%s
// The content of the status.
builder.WriteString(utilities.HeaderFormat(noColor, "CONTENT:"))
builder.WriteString(utilities.WrapLines(utilities.ConvertHTMLToText(s.Content), "\n ", 80))
%s
Boosts: %d
Likes: %d
Replies: %d
%s
%s
%s
%s
`
return fmt.Sprintf(
format,
utilities.FullDisplayNameFormat(noColor, s.Account.DisplayName, s.Account.Acct),
utilities.HeaderFormat(noColor, "CONTENT:"),
utilities.WrapLines(utilities.ConvertHTMLToText(s.Content), "\n ", 80),
utilities.HeaderFormat(noColor, "STATUS ID:"),
s.ID,
utilities.HeaderFormat(noColor, "CREATED AT:"),
utilities.FormatTime(s.CreatedAt),
utilities.HeaderFormat(noColor, "STATS:"),
s.ReblogsCount,
s.FavouritesCount,
s.RepliesCount,
utilities.HeaderFormat(noColor, "VISIBILITY:"),
s.Visibility,
utilities.HeaderFormat(noColor, "URL:"),
s.URL,
// If a poll exists in a status, write the contents to the builder.
if s.Poll != nil {
for ind, option := range s.Poll.Options {
builder.WriteString(
"\n\n " + strconv.Itoa(ind) + ". " + option.Title +
"\n " + strings.Repeat("\u2580", 80) +
"\n " + strconv.Itoa(option.VotesCount) + " votes",
)
}
builder.WriteString("\n")
}
// The ID of the status
builder.WriteString("\n" + utilities.HeaderFormat(noColor, "STATUS ID:") + "\n " + s.ID)
// The ID of the poll if it exists
if s.Poll != nil {
builder.WriteString("\n\n" + utilities.HeaderFormat(noColor, "POLL ID:") + "\n " + s.Poll.ID)
}
// Status creation time
builder.WriteString("\n\n" + utilities.HeaderFormat(noColor, "CREATED AT:") + "\n " + utilities.FormatTime(s.CreatedAt))
// Status stats
builder.WriteString(
"\n\n" +
utilities.HeaderFormat(noColor, "STATS:") +
"\n " + utilities.FieldFormat(noColor, "Boosts: ") + strconv.Itoa(s.ReblogsCount) +
"\n " + utilities.FieldFormat(noColor, "Likes: ") + strconv.Itoa(s.FavouritesCount) +
"\n " + utilities.FieldFormat(noColor, "Replies: ") + strconv.Itoa(s.RepliesCount),
)
// Status visibility
builder.WriteString("\n\n" + utilities.HeaderFormat(noColor, "VISIBILITY:") + "\n " + s.Visibility.String())
// Status URL
builder.WriteString("\n\n" + utilities.HeaderFormat(noColor, "URL:") + "\n " + s.URL)
return builder.String()
}
type StatusList struct {