Mercurial > prosody-modules
view mod_muc_media_metadata/mod_muc_media_metadata.lua @ 4974:807007913f67
mod_log_json: Prefer native Lua table.pack over Prosody util.table one
Prosody is removing support for Lua 5.1, which was the reason for
util.table.pack to exist in the first place, since Lua 5.2+ provides
table.pack. In prosody rev 5eaf77114fdb everything was switched over to
use table.pack, opening the door for removing util.table.pack at some
point. This change here is to prepare for that future eventuality.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 11 Jul 2022 20:08:41 +0200 |
parents | d4537f045a78 |
children |
line wrap: on
line source
local async = require "util.async"; local promise = require "util.promise"; local http = require "net.http"; local st = require "util.stanza"; local xmlns_metadata = "xmpp:prosody.im/protocol/media-metadata#0" local fetch_headers = { bytes = "content-length"; type = "content-type"; etag = "etag"; blurhash = "blurhash"; }; local function fetch_media_metadata(url) return promise.new(function (resolve) http.request(url, { method = "HEAD" }, function (body, code, response) --luacheck: ignore 212/body if code == 200 then local metadata = {}; for metadata_name, header_name in pairs(fetch_headers) do metadata[metadata_name] = response.headers[header_name]; end resolve(metadata); else resolve(nil); end end); end); end local function metadata_to_tag(metadata) if not metadata then return; end local metadata_tag = st.stanza("metadata", { xmlns = xmlns_metadata }); for k, v in pairs(metadata) do metadata_tag:text_tag(k, v) end return metadata_tag; end module:hook("muc-occupant-groupchat", function (event) local stanza = event.stanza; local promises; for oob in stanza:childtags("x", "jabber:x:oob") do if not promises then promises = {}; end local url = oob:get_child_text("url"); local p = fetch_media_metadata(url) :next(metadata_to_tag) :next(function (metadata_tag) oob:add_child(metadata_tag); end); table.insert(promises, p); end if not promises then return; end async.wait(promise.all(promises)); end);