Dan Anglin
eb016b96e9
Summary: This commit updates and enhances poll interaction. From now on users will interact with a poll via the status that contains it. Direct interaction with the poll (via the poll's ID) is no longer supported. This helps resolve an issue where it wasn't possible to find the owner of the poll when interacting with it directly. Changes: - Users can no longer view a poll directly using the Poll ID. Instead polls can be viewed when viewing statuses or timelines. - More details about a poll is shown in statuses and timelines. - Votes are now added to polls via statuses. - Poll results are hidden unless the following conditions are met. - The user is the owner of the poll. - The poll has expired. - The user has already voted in the poll. - Enbas can now detect and stop a poll owner from voting in their own poll. - When a status is created Enbas will now only print the ID of the created status instead of the whole thing. PR: apollo/enbas#43 Resolves apollo/enbas#39
144 lines
5.4 KiB
Go
144 lines
5.4 KiB
Go
package printer
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
|
|
"codeflow.dananglin.me.uk/apollo/enbas/internal/model"
|
|
)
|
|
|
|
func (p Printer) PrintAccount(
|
|
account model.Account,
|
|
relationship *model.AccountRelationship,
|
|
preferences *model.Preferences,
|
|
statuses *model.StatusList,
|
|
userAccountID string,
|
|
) {
|
|
var builder strings.Builder
|
|
|
|
builder.WriteString("\n" + p.fullDisplayNameFormat(account.DisplayName, account.Acct))
|
|
builder.WriteString("\n\n" + p.headerFormat("ACCOUNT ID:"))
|
|
builder.WriteString("\n" + account.ID)
|
|
builder.WriteString("\n\n" + p.headerFormat("JOINED ON:"))
|
|
builder.WriteString("\n" + p.formatDate(account.CreatedAt))
|
|
builder.WriteString("\n\n" + p.headerFormat("STATS:"))
|
|
builder.WriteString("\n" + p.fieldFormat("Followers:"))
|
|
builder.WriteString(" " + strconv.Itoa(account.FollowersCount))
|
|
builder.WriteString("\n" + p.fieldFormat("Following:"))
|
|
builder.WriteString(" " + strconv.Itoa(account.FollowingCount))
|
|
builder.WriteString("\n" + p.fieldFormat("Statuses:"))
|
|
builder.WriteString(" " + strconv.Itoa(account.StatusCount))
|
|
builder.WriteString("\n\n" + p.headerFormat("BIOGRAPHY:"))
|
|
builder.WriteString(p.convertHTMLToText(account.Note, true))
|
|
builder.WriteString("\n\n" + p.headerFormat("METADATA:"))
|
|
|
|
for _, field := range account.Fields {
|
|
builder.WriteString("\n" + p.fieldFormat(field.Name) + ": " + p.convertHTMLToText(field.Value, false))
|
|
}
|
|
|
|
builder.WriteString("\n\n" + p.headerFormat("ACCOUNT URL:"))
|
|
builder.WriteString("\n" + account.URL)
|
|
|
|
if relationship != nil {
|
|
builder.WriteString(p.accountRelationship(relationship))
|
|
}
|
|
|
|
if preferences != nil {
|
|
builder.WriteString(p.userPreferences(preferences))
|
|
}
|
|
|
|
if statuses != nil {
|
|
builder.WriteString("\n\n" + p.statusList(*statuses, userAccountID))
|
|
}
|
|
|
|
builder.WriteString("\n\n")
|
|
|
|
p.print(builder.String())
|
|
}
|
|
|
|
func (p Printer) accountRelationship(relationship *model.AccountRelationship) string {
|
|
var builder strings.Builder
|
|
|
|
builder.WriteString("\n\n" + p.headerFormat("YOUR RELATIONSHIP WITH THIS ACCOUNT:"))
|
|
builder.WriteString("\n" + p.fieldFormat("Following:"))
|
|
builder.WriteString(" " + strconv.FormatBool(relationship.Following))
|
|
builder.WriteString("\n" + p.fieldFormat("Is following you:"))
|
|
builder.WriteString(" " + strconv.FormatBool(relationship.FollowedBy))
|
|
builder.WriteString("\n" + p.fieldFormat("A follow request was sent and is pending:"))
|
|
builder.WriteString(" " + strconv.FormatBool(relationship.FollowRequested))
|
|
builder.WriteString("\n" + p.fieldFormat("Received a pending follow request:"))
|
|
builder.WriteString(" " + strconv.FormatBool(relationship.FollowRequestedBy))
|
|
builder.WriteString("\n" + p.fieldFormat("Endorsed:"))
|
|
builder.WriteString(" " + strconv.FormatBool(relationship.Endorsed))
|
|
builder.WriteString("\n" + p.fieldFormat("Showing Reposts (boosts):"))
|
|
builder.WriteString(" " + strconv.FormatBool(relationship.ShowingReblogs))
|
|
builder.WriteString("\n" + p.fieldFormat("Muted:"))
|
|
builder.WriteString(" " + strconv.FormatBool(relationship.Muting))
|
|
builder.WriteString("\n" + p.fieldFormat("Notifications muted:"))
|
|
builder.WriteString(" " + strconv.FormatBool(relationship.MutingNotifications))
|
|
builder.WriteString("\n" + p.fieldFormat("Blocking:"))
|
|
builder.WriteString(" " + strconv.FormatBool(relationship.Blocking))
|
|
builder.WriteString("\n" + p.fieldFormat("Is blocking you:"))
|
|
builder.WriteString(" " + strconv.FormatBool(relationship.BlockedBy))
|
|
builder.WriteString("\n" + p.fieldFormat("Blocking account's domain:"))
|
|
builder.WriteString(" " + strconv.FormatBool(relationship.DomainBlocking))
|
|
|
|
if relationship.PrivateNote != "" {
|
|
builder.WriteString("\n\n" + p.headerFormat("YOUR PRIVATE NOTE ABOUT THIS ACCOUNT:"))
|
|
builder.WriteString("\n" + p.wrapLines(relationship.PrivateNote, 0))
|
|
}
|
|
|
|
return builder.String()
|
|
}
|
|
|
|
func (p Printer) userPreferences(preferences *model.Preferences) string {
|
|
var builder strings.Builder
|
|
|
|
builder.WriteString("\n\n" + p.headerFormat("YOUR PREFERENCES:"))
|
|
|
|
builder.WriteString("\n" + p.fieldFormat("Default post language:"))
|
|
builder.WriteString(" " + preferences.PostingDefaultLanguage)
|
|
|
|
builder.WriteString("\n" + p.fieldFormat("Default post visibility:"))
|
|
builder.WriteString(" " + preferences.PostingDefaultVisibility)
|
|
|
|
builder.WriteString("\n" + p.fieldFormat("Mark posts as sensitive by default:"))
|
|
builder.WriteString(" " + strconv.FormatBool(preferences.PostingDefaultSensitive))
|
|
|
|
return builder.String()
|
|
}
|
|
|
|
func (p Printer) PrintAccountList(list model.AccountList) {
|
|
var builder strings.Builder
|
|
|
|
builder.WriteString("\n")
|
|
|
|
switch list.Type {
|
|
case model.AccountListFollowers:
|
|
builder.WriteString(p.headerFormat("Followed by:"))
|
|
case model.AccountListFollowing:
|
|
builder.WriteString(p.headerFormat("Following:"))
|
|
case model.AccountListBlockedAccount:
|
|
builder.WriteString(p.headerFormat("Blocked accounts:"))
|
|
case model.AccountListFollowRequests:
|
|
builder.WriteString(p.headerFormat("Accounts that have requested to follow you:"))
|
|
case model.AccountListMuted:
|
|
builder.WriteString(p.headerFormat("Muted accounts:"))
|
|
default:
|
|
builder.WriteString(p.headerFormat("Accounts:"))
|
|
}
|
|
|
|
if list.Type == model.AccountListBlockedAccount {
|
|
for ind := range list.Accounts {
|
|
builder.WriteString("\n" + symbolBullet + " " + list.Accounts[ind].Acct + " (" + list.Accounts[ind].ID + ")")
|
|
}
|
|
} else {
|
|
for ind := range list.Accounts {
|
|
builder.WriteString("\n" + symbolBullet + " " + p.fullDisplayNameFormat(list.Accounts[ind].DisplayName, list.Accounts[ind].Acct))
|
|
}
|
|
}
|
|
|
|
builder.WriteString("\n")
|
|
|
|
p.print(builder.String())
|
|
}
|