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