You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.6 KiB
JavaScript

"use strict";
const sendMessageEvent = require("../send-message-event");
const unmapImageInfo = require("../unmap-image-info");
const { validateArguments } = require("@validatem/core");
const required = require("@validatem/required");
const optionalObject = require("../optional-object");
const isNonEmptyString = require("@validatem/is-non-empty-string");
const isInteger = require("@validatem/is-integer");
const isRoomID = require("../is-room-id");
const isThumbnailOptions = require("../is-thumbnail-options");
const isSession = require("@modular-matrix/is-session");
const isMXC = require("@modular-matrix/is-mxc-url");
module.exports = function sendVideoEvent(_session, _options) {
let [ session, options ] = validateArguments(arguments, {
session: [ required, isSession ],
options: [ required, {
roomID: [ required, isRoomID ],
description: [ required, isNonEmptyString ],
video: [ required, {
url: [ required, isMXC ],
displayWidth: [ isInteger ],
displayHeight: [ isInteger ],
mimetype: [ isNonEmptyString ],
filesize: [ isInteger ],
}],
thumbnail: optionalObject(isThumbnailOptions)
}]
});
return sendMessageEvent(session, {
roomID: options.roomID,
type: "m.room.message",
content: {
msgtype: "m.video",
body: options.description,
url: options.video.url,
info: {
w: options.video.displayWidth,
h: options.video.displayHeight,
mimetype: options.video.mimetype,
size: options.video.filesize,
thumbnail_url: options.thumbnail.url,
thumbnail_info: (options.thumbnail.url != null)
? unmapImageInfo(options.thumbnail)
: undefined
}
}
});
};