diff --git a/cmd/run.go b/cmd/run.go index 31c2451..55f8654 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -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)), diff --git a/utils/text.go b/utils/text.go index 0ec83da..9dbf240 100644 --- a/utils/text.go +++ b/utils/text.go @@ -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 } diff --git a/utils/text_test.go b/utils/text_test.go index fc481c8..ab941ee 100644 --- a/utils/text_test.go +++ b/utils/text_test.go @@ -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"}) +}