outgoing_mms.rb

 1# frozen_string_literal: true
 2
 3class OutgoingMMS
 4	def self.for(m)
 5		body = m.body.sub(m.oobs.first&.url.to_s, "")
 6		OutgoingMMS.new(
 7			addresses: m.addresses ||
 8				[Addresses::Address.new(uri: "sms:#{m.to.node}")],
 9			body: body,
10			urls: m.oobs&.map(&:url)
11		)
12	end
13
14	def initialize(addresses:, body: nil, urls: nil)
15		@addresses = addresses.to_a
16		@to = @addresses.pop
17		@body = body
18		@urls = urls
19	end
20
21	def as_json(*)
22		{
23			encoding: :native,
24			recip: @addresses.map { |adr| adr.uri.sub(/\Asms:\+?/, "") }.join(",")
25		}
26			.merge(@urls ? { files: @urls.join(",") } : {})
27			.merge(@body && !@body.empty? ? { textmessagebody: @body } : {})
28	end
29
30	def to_json(*)
31		as_json.to_json
32	end
33
34	def to_stanza(id:, from:)
35		Blather::Stanza::Message.new(@to.jid, to_json).tap do |m|
36			m.id = id
37			m.from =
38				ProxiedJID.proxy(from, CONFIG[:component][:jid])
39					.with(resource: "#{from.resource}/#{m.id}")
40		end
41	end
42end