diff --git a/internal/model/status.go b/internal/model/status.go index 09befcd..7fa3597 100644 --- a/internal/model/status.go +++ b/internal/model/status.go @@ -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 + // 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") + } -%s - %s + // The ID of the status + builder.WriteString("\n" + utilities.HeaderFormat(noColor, "STATUS ID:") + "\n " + s.ID) -%s - %s -` + // 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) + } - 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, + // 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 {