checkpoint: moved wrapper and html funcs to printer package
This commit is contained in:
parent
c72340490d
commit
0635dda059
7 changed files with 39 additions and 33 deletions
|
@ -9,7 +9,6 @@ import (
|
|||
"strings"
|
||||
|
||||
"codeflow.dananglin.me.uk/apollo/enbas/internal/model"
|
||||
"codeflow.dananglin.me.uk/apollo/enbas/internal/utilities"
|
||||
)
|
||||
|
||||
func (p Printer) PrintAccount(account model.Account, relationship *model.AccountRelationship, preferences *model.Preferences) {
|
||||
|
@ -28,11 +27,11 @@ func (p Printer) PrintAccount(account model.Account, relationship *model.Account
|
|||
builder.WriteString("\n" + p.fieldFormat("Statuses:"))
|
||||
builder.WriteString(" " + strconv.Itoa(account.StatusCount))
|
||||
builder.WriteString("\n\n" + p.headerFormat("BIOGRAPHY:"))
|
||||
builder.WriteString(utilities.WrapLines(utilities.ConvertHTMLToText(account.Note), "\n", p.maxTerminalWidth))
|
||||
builder.WriteString(p.wrapLines(convertHTMLToText(account.Note), 0))
|
||||
builder.WriteString("\n\n" + p.headerFormat("METADATA:"))
|
||||
|
||||
for _, field := range account.Fields {
|
||||
builder.WriteString("\n" + p.fieldFormat(field.Name) + ": " + utilities.ConvertHTMLToText(field.Value))
|
||||
builder.WriteString("\n" + p.fieldFormat(field.Name) + ": " + convertHTMLToText(field.Value))
|
||||
}
|
||||
|
||||
builder.WriteString("\n\n" + p.headerFormat("ACCOUNT URL:"))
|
||||
|
@ -80,7 +79,7 @@ func (p Printer) accountRelationship(relationship *model.AccountRelationship) st
|
|||
|
||||
if relationship.PrivateNote != "" {
|
||||
builder.WriteString("\n\n" + p.headerFormat("YOUR PRIVATE NOTE ABOUT THIS ACCOUNT:"))
|
||||
builder.WriteString("\n" + utilities.WrapLines(relationship.PrivateNote, "\n", p.maxTerminalWidth))
|
||||
builder.WriteString("\n" + p.wrapLines(relationship.PrivateNote, 0))
|
||||
}
|
||||
|
||||
return builder.String()
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
package utilities
|
||||
package printer
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
@ -23,7 +23,7 @@ type htmlConvertState struct {
|
|||
orderedListIndex int
|
||||
}
|
||||
|
||||
func ConvertHTMLToText(text string) string {
|
||||
func convertHTMLToText(text string) string {
|
||||
var builder strings.Builder
|
||||
|
||||
state := htmlConvertState{
|
|
@ -8,7 +8,6 @@ import (
|
|||
"strings"
|
||||
|
||||
"codeflow.dananglin.me.uk/apollo/enbas/internal/model"
|
||||
"codeflow.dananglin.me.uk/apollo/enbas/internal/utilities"
|
||||
)
|
||||
|
||||
func (p Printer) PrintInstance(instance model.InstanceV2) {
|
||||
|
@ -18,13 +17,13 @@ func (p Printer) PrintInstance(instance model.InstanceV2) {
|
|||
builder.WriteString("\n" + instance.Title)
|
||||
|
||||
builder.WriteString("\n\n" + p.headerFormat("INSTANCE DESCRIPTION:"))
|
||||
builder.WriteString("\n" + utilities.WrapLines(instance.DescriptionText, "\n", p.maxTerminalWidth))
|
||||
builder.WriteString("\n" + p.wrapLines(instance.DescriptionText, 0))
|
||||
|
||||
builder.WriteString("\n\n" + p.headerFormat("DOMAIN:"))
|
||||
builder.WriteString("\n" + instance.Domain)
|
||||
|
||||
builder.WriteString("\n\n" + p.headerFormat("TERMS AND CONDITIONS:"))
|
||||
builder.WriteString("\n" + utilities.WrapLines(instance.TermsText, "\n ", p.maxTerminalWidth))
|
||||
builder.WriteString("\n" + p.wrapLines(instance.TermsText, 2))
|
||||
|
||||
builder.WriteString("\n\n" + p.headerFormat("VERSION:"))
|
||||
builder.WriteString("\nRunning GoToSocial " + instance.Version)
|
||||
|
|
|
@ -71,8 +71,8 @@ func (p Printer) pollOptions(poll model.Poll) string {
|
|||
}
|
||||
|
||||
func (p Printer) pollMeter(votage float64) string {
|
||||
numVoteBlocks := int(math.Floor(float64(p.maxTerminalWidth) * votage))
|
||||
numBackgroundBlocks := p.maxTerminalWidth - numVoteBlocks
|
||||
numVoteBlocks := int(math.Floor(float64(p.lineWrapCharacterLimit) * votage))
|
||||
numBackgroundBlocks := p.lineWrapCharacterLimit - numVoteBlocks
|
||||
|
||||
voteBlockColor := p.theme.boldgreen
|
||||
backgroundBlockColor := p.theme.grey
|
||||
|
|
|
@ -45,7 +45,7 @@ type theme struct {
|
|||
type Printer struct {
|
||||
theme theme
|
||||
noColor bool
|
||||
maxTerminalWidth int
|
||||
lineWrapCharacterLimit int
|
||||
pager string
|
||||
statusSeparator string
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ type Printer struct {
|
|||
func NewPrinter(
|
||||
noColor bool,
|
||||
pager string,
|
||||
maxTerminalWidth int,
|
||||
lineWrapCharacterLimit int,
|
||||
) *Printer {
|
||||
theme := theme{
|
||||
reset: "\033[0m",
|
||||
|
@ -68,16 +68,16 @@ func NewPrinter(
|
|||
boldyellow: "\033[33;1m",
|
||||
}
|
||||
|
||||
if maxTerminalWidth < minTerminalWidth {
|
||||
maxTerminalWidth = minTerminalWidth
|
||||
if lineWrapCharacterLimit < minTerminalWidth {
|
||||
lineWrapCharacterLimit = minTerminalWidth
|
||||
}
|
||||
|
||||
return &Printer{
|
||||
theme: theme,
|
||||
noColor: noColor,
|
||||
maxTerminalWidth: maxTerminalWidth,
|
||||
lineWrapCharacterLimit: lineWrapCharacterLimit,
|
||||
pager: pager,
|
||||
statusSeparator: strings.Repeat("\u2501", maxTerminalWidth),
|
||||
statusSeparator: strings.Repeat("\u2501", lineWrapCharacterLimit),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,6 @@ import (
|
|||
"strings"
|
||||
|
||||
"codeflow.dananglin.me.uk/apollo/enbas/internal/model"
|
||||
"codeflow.dananglin.me.uk/apollo/enbas/internal/utilities"
|
||||
)
|
||||
|
||||
func (p Printer) PrintStatus(status model.Status) {
|
||||
|
@ -24,7 +23,7 @@ func (p Printer) PrintStatus(status model.Status) {
|
|||
|
||||
// The content of the status.
|
||||
builder.WriteString("\n\n" + p.headerFormat("CONTENT:"))
|
||||
builder.WriteString(utilities.WrapLines(utilities.ConvertHTMLToText(status.Content), "\n", p.maxTerminalWidth))
|
||||
builder.WriteString(p.wrapLines(convertHTMLToText(status.Content), 0))
|
||||
|
||||
// Details of media attachments (if any).
|
||||
if len(status.MediaAttachments) > 0 {
|
||||
|
@ -93,7 +92,10 @@ func (p Printer) PrintStatusList(list model.StatusList) {
|
|||
|
||||
if status.Reblog != nil {
|
||||
builder.WriteString(
|
||||
"\n" + utilities.WrapLines("reposted this status from "+p.fullDisplayNameFormat(status.Reblog.Account.DisplayName, status.Reblog.Account.Acct), "\n", p.maxTerminalWidth),
|
||||
"\n" + p.wrapLines(
|
||||
"reposted this status from "+p.fullDisplayNameFormat(status.Reblog.Account.DisplayName, status.Reblog.Account.Acct),
|
||||
0,
|
||||
),
|
||||
)
|
||||
|
||||
statusID = status.Reblog.ID
|
||||
|
@ -103,7 +105,7 @@ func (p Printer) PrintStatusList(list model.StatusList) {
|
|||
mediaAttachments = status.Reblog.MediaAttachments
|
||||
}
|
||||
|
||||
builder.WriteString("\n" + utilities.WrapLines(utilities.ConvertHTMLToText(content), "\n", p.maxTerminalWidth))
|
||||
builder.WriteString("\n" + p.wrapLines(convertHTMLToText(content), 0))
|
||||
|
||||
if poll != nil {
|
||||
builder.WriteString(p.pollOptions(*poll))
|
||||
|
@ -118,7 +120,7 @@ func (p Printer) PrintStatusList(list model.StatusList) {
|
|||
description = noMediaDescription
|
||||
}
|
||||
|
||||
builder.WriteString(utilities.WrapLines(description, "\n ", p.maxTerminalWidth-3))
|
||||
builder.WriteString(p.wrapLines(description, 3))
|
||||
}
|
||||
|
||||
boosted := symbolBoosted
|
||||
|
|
|
@ -2,24 +2,30 @@
|
|||
//
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
package utilities
|
||||
package printer
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
func WrapLines(text, separator string, charLimit int) string {
|
||||
func (p Printer) wrapLines(text string, nIndent int) string {
|
||||
if nIndent >= p.lineWrapCharacterLimit {
|
||||
nIndent = 0
|
||||
}
|
||||
|
||||
separator := "\n" + strings.Repeat(" ", nIndent)
|
||||
|
||||
lines := strings.Split(text, "\n")
|
||||
|
||||
if len(lines) == 1 {
|
||||
return wrapLine(lines[0], separator, charLimit)
|
||||
return wrapLine(lines[0], separator, p.lineWrapCharacterLimit - nIndent)
|
||||
}
|
||||
|
||||
var builder strings.Builder
|
||||
|
||||
for i, line := range lines {
|
||||
builder.WriteString(wrapLine(line, separator, charLimit))
|
||||
builder.WriteString(wrapLine(line, separator, p.lineWrapCharacterLimit - nIndent))
|
||||
|
||||
if i < len(lines)-1 {
|
||||
builder.WriteString(separator)
|
Loading…
Reference in a new issue