1
0
Fork 0

Add a footer to each toot

This commit is contained in:
Daniele Tricoli 2022-03-12 23:51:08 +01:00
parent 4ff99a750c
commit 30a96b9e27
3 changed files with 35 additions and 9 deletions

View File

@ -79,7 +79,7 @@ the specified Mastodon account.`,
text := update.Message.Text
in_reply_to := ""
for _, message := range utils.SplitTextAtChunk(text, max_characters) {
for _, message := range utils.SplitTextAtChunk(text, max_characters, "") {
status, err := c.PostStatus(context.Background(), &mastodon.Toot{
Status: message,
Visibility: parseMastodonVisibility(os.Getenv(MASTODON_TOOT_VISIBILITY)),

View File

@ -2,16 +2,17 @@ package utils
import "strings"
// Split text in chunks of almost specified size.
func SplitTextAtChunk(text string, size int) []string {
// Split text in chunks of almost specified size and append the text in footer.
func SplitTextAtChunk(text string, size int, footer string) []string {
words := strings.SplitN(text, " ", -1)
size = size - len(footer)
chunks := []string{}
var message string
for i, word := range words {
if len(message+" "+word) > size {
chunks = append(chunks, message)
chunks = append(chunks, message+footer)
message = word
continue
}
@ -21,7 +22,7 @@ func SplitTextAtChunk(text string, size int) []string {
message += " " + word
}
}
chunks = append(chunks, message)
chunks = append(chunks, message+footer)
return chunks
}

View File

@ -6,8 +6,7 @@ import (
"github.com/stretchr/testify/assert"
)
func TestSplitTestAtChuk(t *testing.T) {
func TestSplitTestAtChunkNoFooter(t *testing.T) {
text := `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
@ -17,7 +16,7 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.`
assert.Equal(
t,
SplitTextAtChunk(text, 300),
SplitTextAtChunk(text, 300, ""),
[]string{
`Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
@ -29,6 +28,32 @@ sunt in culpa qui officia deserunt mollit anim id est laborum.`})
assert.Equal(
t,
SplitTextAtChunk(text, 500),
SplitTextAtChunk(text, 500, ""),
[]string{text})
}
func TestSplitTestAtChunk(t *testing.T) {
text := `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.`
assert.Equal(
t,
SplitTextAtChunk(text, 300, "FOOTER TEXT"),
[]string{
`Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velitFOOTER TEXT`,
`esse cillum
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.FOOTER TEXT`})
assert.Equal(
t,
SplitTextAtChunk(text, 500, "FOOTER TEXT"),
[]string{text + "FOOTER TEXT"})
}