From ec375f5bdc6bad766aca94c51ac82afcd3164fa0 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Wed, 30 Dec 2020 00:41:34 -0500 Subject: [PATCH] consolidate ArgsToStrings --- irc/handlers.go | 6 +++--- irc/utils/args.go | 31 ------------------------------- irc/utils/args_test.go | 8 -------- irc/utils/text.go | 11 +++++++++++ irc/utils/text_test.go | 8 ++++++++ 5 files changed, 22 insertions(+), 42 deletions(-) diff --git a/irc/handlers.go b/irc/handlers.go index 7d86267d..f461d26f 100644 --- a/irc/handlers.go +++ b/irc/handlers.go @@ -1864,7 +1864,7 @@ func monitorListHandler(server *Server, client *Client, msg ircmsg.IrcMessage, r nickList = append(nickList, replynick) } - for _, line := range utils.ArgsToStrings(maxLastArgLength, nickList, ",") { + for _, line := range utils.BuildTokenLines(maxLastArgLength, nickList, ",") { rb.Add(nil, server.name, RPL_MONLIST, nick, line) } @@ -1890,12 +1890,12 @@ func monitorStatusHandler(server *Server, client *Client, msg ircmsg.IrcMessage, } if len(online) > 0 { - for _, line := range utils.ArgsToStrings(maxLastArgLength, online, ",") { + for _, line := range utils.BuildTokenLines(maxLastArgLength, online, ",") { rb.Add(nil, server.name, RPL_MONONLINE, client.Nick(), line) } } if len(offline) > 0 { - for _, line := range utils.ArgsToStrings(maxLastArgLength, offline, ",") { + for _, line := range utils.BuildTokenLines(maxLastArgLength, offline, ",") { rb.Add(nil, server.name, RPL_MONOFFLINE, client.Nick(), line) } } diff --git a/irc/utils/args.go b/irc/utils/args.go index 20884ef3..a80bbab5 100644 --- a/irc/utils/args.go +++ b/irc/utils/args.go @@ -18,37 +18,6 @@ var ( ErrInvalidParams = errors.New("Invalid parameters") ) -// ArgsToStrings takes the arguments and splits them into a series of strings, -// each argument separated by delim and each string bounded by maxLength. -func ArgsToStrings(maxLength int, arguments []string, delim string) []string { - var messages []string - - var buffer string - for { - if len(arguments) < 1 { - break - } - - if len(buffer) > 0 && maxLength < len(buffer)+len(delim)+len(arguments[0]) { - messages = append(messages, buffer) - buffer = "" - continue - } - - if len(buffer) > 0 { - buffer += delim - } - buffer += arguments[0] - arguments = arguments[1:] - } - - if len(buffer) > 0 { - messages = append(messages, buffer) - } - - return messages -} - func StringToBool(str string) (result bool, err error) { switch strings.ToLower(str) { case "on", "true", "t", "yes", "y", "enabled": diff --git a/irc/utils/args_test.go b/irc/utils/args_test.go index b846d122..5c84b26a 100644 --- a/irc/utils/args_test.go +++ b/irc/utils/args_test.go @@ -5,14 +5,6 @@ package utils import "testing" -func TestArgsToStrings(t *testing.T) { - val := ArgsToStrings(512, []string{"a", "b", "c"}, ",") - assertEqual(val, []string{"a,b,c"}, t) - - val = ArgsToStrings(10, []string{"abcd", "efgh", "ijkl"}, ",") - assertEqual(val, []string{"abcd,efgh", "ijkl"}, t) -} - func TestStringToBool(t *testing.T) { val, err := StringToBool("on") assertEqual(val, true, t) diff --git a/irc/utils/text.go b/irc/utils/text.go index bffa7a34..d9104564 100644 --- a/irc/utils/text.go +++ b/irc/utils/text.go @@ -132,3 +132,14 @@ func (t *TokenLineBuilder) Lines() (result []string) { } return } + +// BuildTokenLines is a convenience to apply TokenLineBuilder to a predetermined +// slice of tokens. +func BuildTokenLines(lineLen int, tokens []string, delim string) []string { + var tl TokenLineBuilder + tl.Initialize(lineLen, delim) + for _, arg := range tokens { + tl.Add(arg) + } + return tl.Lines() +} diff --git a/irc/utils/text_test.go b/irc/utils/text_test.go index 68e23946..6aa05e76 100644 --- a/irc/utils/text_test.go +++ b/irc/utils/text_test.go @@ -35,3 +35,11 @@ func TestTokenLineBuilder(t *testing.T) { t.Errorf("text incorrectly split into lines: %s instead of %s", joined, monteCristo) } } + +func TestBuildTokenLines(t *testing.T) { + val := BuildTokenLines(512, []string{"a", "b", "c"}, ",") + assertEqual(val, []string{"a,b,c"}, t) + + val = BuildTokenLines(10, []string{"abcd", "efgh", "ijkl"}, ",") + assertEqual(val, []string{"abcd,efgh", "ijkl"}, t) +}