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 package model
import ( import (
"fmt" "strconv"
"strings" "strings"
"time" "time"
@ -30,7 +30,7 @@ type Status struct {
Mentions []Mention `json:"mentions"` Mentions []Mention `json:"mentions"`
Muted bool `json:"muted"` Muted bool `json:"muted"`
Pinned bool `json:"pinned"` Pinned bool `json:"pinned"`
Poll Poll `json:"poll"` Poll *Poll `json:"poll"`
Reblog *StatusReblogged `json:"reblog"` Reblog *StatusReblogged `json:"reblog"`
Reblogged bool `json:"reblogged"` Reblogged bool `json:"reblogged"`
ReblogsCount int `json:"reblogs_count"` ReblogsCount int `json:"reblogs_count"`
@ -158,48 +158,55 @@ type MediaDimensions struct {
} }
func (s Status) Display(noColor bool) string { func (s Status) Display(noColor bool) string {
format := ` var builder strings.Builder
%s
%s // The account information
%s builder.WriteString(utilities.FullDisplayNameFormat(noColor, s.Account.DisplayName, s.Account.Acct) + "\n\n")
%s
%s
%s // The content of the status.
%s builder.WriteString(utilities.HeaderFormat(noColor, "CONTENT:"))
builder.WriteString(utilities.WrapLines(utilities.ConvertHTMLToText(s.Content), "\n ", 80))
%s // If a poll exists in a status, write the contents to the builder.
Boosts: %d if s.Poll != nil {
Likes: %d for ind, option := range s.Poll.Options {
Replies: %d builder.WriteString(
"\n\n " + strconv.Itoa(ind) + ". " + option.Title +
%s "\n " + strings.Repeat("\u2580", 80) +
%s "\n " + strconv.Itoa(option.VotesCount) + " votes",
%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,
) )
} }
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 { type StatusList struct {
Name string Name string