2024-06-17 18:59:20 +01:00
// SPDX-FileCopyrightText: 2024 Dan Anglin <d.n.i.anglin@gmail.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
package printer
import (
"strconv"
"strings"
"codeflow.dananglin.me.uk/apollo/enbas/internal/model"
"codeflow.dananglin.me.uk/apollo/enbas/internal/utilities"
)
func ( p Printer ) PrintStatus ( status model . Status ) {
var builder strings . Builder
// The account information
builder . WriteString ( "\n" + p . fullDisplayNameFormat ( status . Account . DisplayName , status . Account . Acct ) )
2024-06-18 19:58:59 +01:00
// The ID of the status
builder . WriteString ( "\n\n" + p . headerFormat ( "STATUS ID:" ) )
builder . WriteString ( "\n" + status . ID )
2024-06-17 18:59:20 +01:00
// The content of the status.
builder . WriteString ( "\n\n" + p . headerFormat ( "CONTENT:" ) )
builder . WriteString ( utilities . WrapLines ( utilities . ConvertHTMLToText ( status . Content ) , "\n" , p . maxTerminalWidth ) )
2024-06-18 19:58:59 +01:00
// Details of media attachments (if any).
if len ( status . MediaAttachments ) > 0 {
builder . WriteString ( "\n\n" + p . headerFormat ( "MEDIA ATTACHMENTS:" ) )
for ind , media := range status . MediaAttachments {
builder . WriteString ( "\n\n[" + strconv . Itoa ( ind ) + "] " + p . fieldFormat ( "ID:" ) + " " + media . ID )
builder . WriteString ( "\n " + p . fieldFormat ( "Type:" ) + " " + media . Type )
description := media . Description
if description == "" {
description = noMediaDescription
}
builder . WriteString ( "\n " + p . fieldFormat ( "Description:" ) + " " + description )
builder . WriteString ( "\n " + p . fieldFormat ( "Media URL:" ) + " " + media . URL )
}
}
2024-06-17 18:59:20 +01:00
// If a poll exists in a status, write the contents to the builder.
if status . Poll != nil {
builder . WriteString ( p . pollOptions ( * status . Poll ) )
}
// Status creation time
builder . WriteString ( "\n\n" + p . headerFormat ( "CREATED AT:" ) )
builder . WriteString ( "\n" + p . formatDateTime ( status . CreatedAt ) )
// Status stats
builder . WriteString ( "\n\n" + p . headerFormat ( "STATS:" ) )
builder . WriteString ( "\n" + p . fieldFormat ( "Boosts: " ) + strconv . Itoa ( status . ReblogsCount ) )
builder . WriteString ( "\n" + p . fieldFormat ( "Likes: " ) + strconv . Itoa ( status . FavouritesCount ) )
builder . WriteString ( "\n" + p . fieldFormat ( "Replies: " ) + strconv . Itoa ( status . RepliesCount ) )
// Status visibility
builder . WriteString ( "\n\n" + p . headerFormat ( "VISIBILITY:" ) )
builder . WriteString ( "\n" + status . Visibility . String ( ) )
// Status URL
builder . WriteString ( "\n\n" + p . headerFormat ( "URL:" ) )
builder . WriteString ( "\n" + status . URL )
builder . WriteString ( "\n\n" )
p . print ( builder . String ( ) )
}
func ( p Printer ) PrintStatusList ( list model . StatusList ) {
var builder strings . Builder
builder . WriteString ( p . headerFormat ( list . Name ) + "\n" )
for _ , status := range list . Statuses {
builder . WriteString ( "\n" + p . fullDisplayNameFormat ( status . Account . DisplayName , status . Account . Acct ) )
statusID := status . ID
createdAt := status . CreatedAt
2024-06-19 01:36:32 +01:00
content := status . Content
poll := status . Poll
mediaAttachments := status . MediaAttachments
2024-06-17 18:59:20 +01:00
if status . Reblog != nil {
2024-06-17 21:59:34 +01:00
builder . WriteString (
"\n" + utilities . WrapLines ( "reposted this status from " + p . fullDisplayNameFormat ( status . Reblog . Account . DisplayName , status . Reblog . Account . Acct ) , "\n" , p . maxTerminalWidth ) ,
)
2024-06-17 18:59:20 +01:00
statusID = status . Reblog . ID
createdAt = status . Reblog . CreatedAt
2024-06-19 01:36:32 +01:00
content = status . Reblog . Content
poll = status . Reblog . Poll
mediaAttachments = status . Reblog . MediaAttachments
2024-06-17 18:59:20 +01:00
}
2024-06-19 01:36:32 +01:00
builder . WriteString ( "\n" + utilities . WrapLines ( utilities . ConvertHTMLToText ( content ) , "\n" , p . maxTerminalWidth ) )
2024-06-17 18:59:20 +01:00
2024-06-19 01:36:32 +01:00
if poll != nil {
builder . WriteString ( p . pollOptions ( * poll ) )
2024-06-17 18:59:20 +01:00
}
2024-06-19 01:36:32 +01:00
for _ , media := range mediaAttachments {
2024-06-20 12:30:20 +01:00
builder . WriteString ( "\n\n" + p . imageIcon + " Media attachment: " + media . ID )
builder . WriteString ( "\n Media type: " + media . Type + "\n " )
2024-06-18 19:58:59 +01:00
description := media . Description
if description == "" {
description = noMediaDescription
}
builder . WriteString ( utilities . WrapLines ( description , "\n " , p . maxTerminalWidth - 3 ) )
}
2024-06-17 18:59:20 +01:00
builder . WriteString (
"\n\n" +
p . fieldFormat ( "Status ID:" ) + " " + statusID + "\t" +
p . fieldFormat ( "Created at:" ) + " " + p . formatDateTime ( createdAt ) +
"\n" ,
)
builder . WriteString ( p . statusSeparator + "\n" )
}
p . print ( builder . String ( ) )
}