natsim

NATS ↔ Instant Messaging Bridge
git clone https://git.instinctive.eu/natsim.git
Log | Files | Refs | README | LICENSE

commit aead4385586e0e43268bbe4f8d6a74c4bd95e328
parent a9f6405239c93474964fe10499aa43c152815eda
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Mon, 21 Jul 2025 19:08:55 +0000

Message data is quoted in curmsg command
Diffstat:
Mmain.go | 47+++++++++++++++++++++++++----------------------
1 file changed, 25 insertions(+), 22 deletions(-)

diff --git a/main.go b/main.go @@ -299,7 +299,7 @@ func (natsim *NatsIM) doCommands() { sb.WriteString("[WIP]") sb.WriteString(packMark(natsim.Irc.Show, natsim.curMsg.Subject, - string(natsim.curMsg.Data))) + natsim.ircQuoteData(natsim.curMsg.Data))) if natsim.curMsg.Reply != "" { show := LineMark{Start: "Reply-To:"} @@ -603,6 +603,29 @@ func (natsim *NatsIM) ircJoined(e *irc.Event) { } } +func (natsim *NatsIM) ircQuoteData(data []byte) string { + strdata := string(data) + suffix := 0 + for len(strdata) > 0 && strdata[len(strdata)-1] == '\n' { + suffix++ + strdata = strdata[0 : len(strdata)-1] + } + + var quoted strings.Builder + for i, line := range strings.Split(strdata, "\n") { + if i > 0 { + quoted.WriteString("\n") + } + qline := strconv.QuoteToGraphic(line) + if qline[0] != '"' || qline[len(qline)-1] != '"' { + panic("Expected double-quotes") + } + quoted.WriteString(qline[1 : len(qline)-1]) + } + quoted.WriteString(strings.Repeat("\\n", suffix)) + return quoted.String() +} + func (natsim *NatsIM) ircReceive(e *irc.Event) { msg := e.Message() if name, arg, found := unpackMark(natsim.Irc.Cmd, msg, true); found { @@ -760,28 +783,8 @@ func (natsim *NatsIM) natsReceive(m *nats.Msg) { return } - strdata := string(m.Data) - suffix := 0 - for len(strdata) > 0 && strdata[len(strdata)-1] == '\n' { - suffix++ - strdata = strdata[0 : len(strdata)-1] - } - - var data strings.Builder - for i, line := range strings.Split(strdata, "\n") { - if i > 0 { - data.WriteString("\n") - } - qline := strconv.QuoteToGraphic(line) - if qline[0] != '"' || qline[len(qline)-1] != '"' { - panic("Expected double-quotes") - } - data.WriteString(qline[1 : len(qline)-1]) - } - data.WriteString(strings.Repeat("\\n", suffix)) - var sb strings.Builder - sb.WriteString(packMark(natsim.Irc.Show, m.Subject, data.String())) + sb.WriteString(packMark(natsim.Irc.Show, m.Subject, natsim.ircQuoteData(m.Data))) if m.Reply != "" && natsim.Irc.ShowReply != nil { sb.WriteString(natsim.Irc.ShowReply.Start)