feat: add support for file mimetypes and update attachment filename generation

This commit is contained in:
gabrieljablonski 2025-05-08 22:23:54 -03:00
parent d4915e864f
commit 16637c03c6
2 changed files with 25 additions and 9 deletions

View File

@ -227,7 +227,8 @@ class Whatsapp::IncomingMessageBaileysService < Whatsapp::IncomingMessageBaseSer
filename = @raw_message.dig(:message, :documentMessage, :fileName)
return filename if filename.present?
"#{file_content_type}_#{message_id}_#{Time.current.strftime('%Y%m%d')}"
ext = ".#{message_mimetype.split(';').first.split('/').last}" if message_mimetype.present?
"#{file_content_type}_#{message_id}_#{Time.current.strftime('%Y%m%d')}#{ext}"
end
def message_content
@ -247,6 +248,21 @@ class Whatsapp::IncomingMessageBaileysService < Whatsapp::IncomingMessageBaseSer
@raw_message[:key][:id]
end
def message_mimetype
case message_type
when 'image'
@raw_message.dig(:message, :imageMessage, :mimetype)
when 'sticker'
@raw_message.dig(:message, :stickerMessage, :mimetype)
when 'video'
@raw_message.dig(:message, :videoMessage, :mimetype)
when 'audio'
@raw_message.dig(:message, :audioMessage, :mimetype)
when 'file'
@raw_message.dig(:message, :documentMessage, :mimetype)
end
end
def message_under_process?
key = format(Redis::RedisKeys::MESSAGE_SOURCE_KEY, id: message_id)
Redis::Alfred.get(key)

View File

@ -445,7 +445,7 @@ describe Whatsapp::IncomingMessageBaileysService do
let(:raw_message) do
{
key: { id: 'msg_123', remoteJid: '5511912345678@s.whatsapp.net', fromMe: false },
message: { imageMessage: { caption: 'Hello from Baileys' } },
message: { imageMessage: { caption: 'Hello from Baileys', mimetype: 'image/png' } },
pushName: 'John Doe'
}
end
@ -487,7 +487,7 @@ describe Whatsapp::IncomingMessageBaileysService do
expect(attachment.file).to be_present
expect(attachment.file_type).to eq('image')
expect(attachment.file.filename.to_s).to eq("image_msg_123_#{Time.current.strftime('%Y%m%d')}")
expect(attachment.file.filename.to_s).to eq("image_msg_123_#{Time.current.strftime('%Y%m%d')}.png")
expect(attachment.file.content_type).to eq('image/png')
end
end
@ -496,7 +496,7 @@ describe Whatsapp::IncomingMessageBaileysService do
let(:raw_message) do
{
key: { id: 'msg_123', remoteJid: '5511912345678@s.whatsapp.net', fromMe: false },
message: { videoMessage: { caption: 'Hello from Baileys' } },
message: { videoMessage: { caption: 'Hello from Baileys', mimetype: 'video/mp4' } },
pushName: 'John Doe'
}
end
@ -538,7 +538,7 @@ describe Whatsapp::IncomingMessageBaileysService do
expect(attachment.file).to be_present
expect(attachment.file_type).to eq('video')
expect(attachment.file.filename.to_s).to eq("video_msg_123_#{Time.current.strftime('%Y%m%d')}")
expect(attachment.file.filename.to_s).to eq("video_msg_123_#{Time.current.strftime('%Y%m%d')}.mp4")
expect(attachment.file.content_type).to eq('video/mp4')
end
end
@ -588,7 +588,7 @@ describe Whatsapp::IncomingMessageBaileysService do
let(:raw_message) do
{
key: { id: 'msg_123', remoteJid: '5511912345678@s.whatsapp.net', fromMe: false },
message: { audioMessage: {} },
message: { audioMessage: { mimetype: 'audio/opus' } },
pushName: 'John Doe'
}
end
@ -621,7 +621,7 @@ describe Whatsapp::IncomingMessageBaileysService do
expect(attachment.file_type).to eq('audio')
expect(attachment.file).to be_present
expect(attachment.file.filename.to_s).to eq("audio_msg_123_#{Time.current.strftime('%Y%m%d')}")
expect(attachment.file.filename.to_s).to eq("audio_msg_123_#{Time.current.strftime('%Y%m%d')}.opus")
expect(attachment.file.content_type).to eq('audio/opus')
end
end
@ -630,7 +630,7 @@ describe Whatsapp::IncomingMessageBaileysService do
let(:raw_message) do
{
key: { id: 'msg_123', remoteJid: '5511912345678@s.whatsapp.net', fromMe: false },
message: { stickerMessage: {} },
message: { stickerMessage: { mimetype: 'image/png' } },
pushName: 'John Doe'
}
end
@ -663,7 +663,7 @@ describe Whatsapp::IncomingMessageBaileysService do
expect(attachment.file_type).to eq('image')
expect(attachment.file).to be_present
expect(attachment.file.filename.to_s).to eq("image_msg_123_#{Time.current.strftime('%Y%m%d')}")
expect(attachment.file.filename.to_s).to eq("image_msg_123_#{Time.current.strftime('%Y%m%d')}.png")
expect(attachment.file.content_type).to eq('image/png')
end
end