X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/6e7c7f3d47f086b9d59fe40b91fb071e1528684e..3aa065806f87d0876fbd7b05e5ded4aad380cc73:/whatsapp_batch.go?ds=inline diff --git a/whatsapp_batch.go b/whatsapp_batch.go index 08dfb6a..16b4b2c 100644 --- a/whatsapp_batch.go +++ b/whatsapp_batch.go @@ -27,20 +27,33 @@ type WhatsAppBatch struct { Messages []WhatsAppMessage `json:"messages"` } -// Turn tells if the batch starts a turn: a private batch with a message of -// another person, or a group batch with a message of another person that -// mentions the user or replies to a message of the user. -func (b WhatsAppBatch) Turn() bool { - return slices.ContainsFunc(b.Messages, func(message WhatsAppMessage) bool { - return !message.Mine && (!b.Chat.Group || message.Mention || message.Reply) - }) +// WhatsAppChat is a chat: its ID, its name, and whether it is a group. +type WhatsAppChat struct { + ID string `json:"id"` + Name string `json:"name"` + Group bool `json:"group,omitempty"` +} + +// WhatsAppMessage is one message of a batch: its ID, the name of its sender, +// its WhatsApp time, and its text. Mine marks a message of the user. Mention +// and Reply mark a message that mentions the user or replies to a message of +// the user. +type WhatsAppMessage struct { + ID string `json:"id"` + Sender string `json:"sender"` + Time time.Time `json:"time"` + Text string `json:"text"` + Mine bool `json:"mine,omitempty"` + Mention bool `json:"mention,omitempty"` + Reply bool `json:"reply,omitempty"` } // Text returns the text of the batch for the log, with the times in location. // The first line starts with [WhatsApp] and names the chat, its ID, and the day // of the first message. Each message has a line with its time and its sender, // and the messages of the user have the sender You. A batch that starts a turn -// ends with the line about the empty reply. +// ends with the line about the empty reply. Image markers start on their own +// lines so that the shared image reader can find them. func (b WhatsAppBatch) Text(location *time.Location) string { kind := "private chat" if b.Chat.Group { @@ -59,7 +72,12 @@ func (b WhatsAppBatch) Text(location *time.Location) string { sender += " (replies to you)" } - lines = append(lines, message.Time.In(location).Format("15:04")+" "+sender+": "+message.Text) + prefix := message.Time.In(location).Format("15:04") + " " + sender + ":" + if len(imageFiles(message.Text)) > 0 { + lines = append(lines, prefix, message.Text) + } else { + lines = append(lines, prefix+" "+message.Text) + } } if b.Turn() { @@ -69,23 +87,11 @@ func (b WhatsAppBatch) Text(location *time.Location) string { return strings.Join(lines, "\n") } -// WhatsAppChat is a chat: its ID, its name, and whether it is a group. -type WhatsAppChat struct { - ID string `json:"id"` - Name string `json:"name"` - Group bool `json:"group,omitempty"` -} - -// WhatsAppMessage is one text message of a batch: its ID, the name of its -// sender, its WhatsApp time, and its text. Mine marks a message of the user. -// Mention and Reply mark a message that mentions the user or replies to a -// message of the user. -type WhatsAppMessage struct { - ID string `json:"id"` - Sender string `json:"sender"` - Time time.Time `json:"time"` - Text string `json:"text"` - Mine bool `json:"mine,omitempty"` - Mention bool `json:"mention,omitempty"` - Reply bool `json:"reply,omitempty"` +// Turn tells if the batch starts a turn: a private batch with a message of +// another person, or a group batch with a message of another person that +// mentions the user or replies to a message of the user. +func (b WhatsAppBatch) Turn() bool { + return slices.ContainsFunc(b.Messages, func(message WhatsAppMessage) bool { + return !message.Mine && (!b.Chat.Group || message.Mention || message.Reply) + }) }