X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/5dbb2e42e88e78bfc79b473b5b1dc466d8dbbf62..d73a88b9e0835b1d7f0711e02db56555101a7830:/whatsapp_inbox.go diff --git a/whatsapp_inbox.go b/whatsapp_inbox.go index cff43c7..7d4e9e4 100644 --- a/whatsapp_inbox.go +++ b/whatsapp_inbox.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "log/slog" + "path/filepath" "slices" "strings" "sync" @@ -40,6 +41,8 @@ func newWhatsAppInbox(state *WhatsAppState, clock func() time.Time, groups *What clock: clock, groups: groups, images: images, + voices: &VoiceStore{dir: filepath.Join(filepath.Dir(filepath.Dir(state.path)), voiceDirName)}, + voice: &VoiceTranscriber{}, logger: logger, wake: make(chan struct{}, 1), failures: make(chan error, 1), @@ -73,6 +76,8 @@ type WhatsAppInbox struct { clock func() time.Time groups *WhatsAppGroups images *ImageStore + voices *VoiceStore + voice *VoiceTranscriber logger *slog.Logger wake chan struct{} failures chan error @@ -243,6 +248,8 @@ func (i *WhatsAppInbox) receive(ctx context.Context, link WhatsAppLink, event *e defer cancel() message.Text = i.imageText(ctx, link, event, message.Text) + } else if event.Message.GetAudioMessage().GetPTT() { + message.Text = whatsappRedact(link.own, whatsappVoice(ctx, link.client, i.voices, i.voice, event.Message.GetAudioMessage())) } _, err := i.state.Add(chat, message, time.Now()) @@ -356,7 +363,7 @@ func whatsappMessage(ctx context.Context, device *store.Device, own []string, ev chatJID := info.Chat.ToNonAD() switch { case device == nil: - case event.IsEdit, info.Edit != "", event.IsEphemeral, event.IsViewOnce, event.Message.GetImageMessage().GetViewOnce(), event.Message.GetVideoMessage().GetViewOnce(), event.SourceWebMsg != nil: + case event.IsEdit, info.Edit != "", event.IsEphemeral, event.IsViewOnce, event.Message.GetImageMessage().GetViewOnce(), event.Message.GetVideoMessage().GetViewOnce(), event.Message.GetAudioMessage().GetViewOnce(), event.SourceWebMsg != nil: case chatJID.Server != types.DefaultUserServer && chatJID.Server != types.HiddenUserServer && chatJID.Server != types.GroupServer: case slices.Contains(own, chatJID.User): default: @@ -378,6 +385,9 @@ func whatsappText(ctx context.Context, device *store.Device, own []string, event contextInfo := extended.GetContextInfo() switch { + case event.Message.GetAudioMessage().GetPTT(): + text = "(voice not downloaded)" + contextInfo = event.Message.GetAudioMessage().GetContextInfo() case event.Message.GetImageMessage() != nil: image := event.Message.GetImageMessage() text = image.GetCaption()