fedimbed: basic video and audio file support

This commit is contained in:
Cynthia Foxwell 2022-12-06 10:39:24 -07:00
parent 680891f264
commit b8fab6ec4f

View file

@ -69,7 +69,9 @@ async function processUrl(msg, url) {
.replace("gotosocial", "GoToSocial")
.replace(/^(.)/, (_, c) => c.toUpperCase());
const attachments = [];
const images = [];
const videos = [];
const audios = [];
let content, cw, author, timestamp;
// Fetch post
@ -172,7 +174,9 @@ async function processUrl(msg, url) {
postData2.content;
author = {
name: postData2.account.display_name,
handle: postData2.account.fqn ?? `${postData2.account.username}@${urlObj.hostname}`,
handle:
postData2.account.fqn ??
`${postData2.account.username}@${urlObj.hostname}`,
url: postData2.account.url,
avatar: postData2.account.avatar,
};
@ -190,10 +194,22 @@ async function processUrl(msg, url) {
cw = postData.summary;
timestamp = postData.published;
for (const attachment of postData.attachment) {
attachments.push({
if (attachment.mediaType.startsWith("video/")) {
videos.push({
url: attachment.url,
desc: attachment.name,
});
} else if (attachment.mediaType.startsWith("image/")) {
images.push({
url: attachment.url,
desc: attachment.name,
});
} else if (attachment.mediaType.startsWith("audio/")) {
audios.push({
url: attachment.url,
desc: attachment.name,
});
}
}
// Author data is not sent with the post with AS2
@ -240,7 +256,7 @@ async function processUrl(msg, url) {
let desc = "";
let MAX_LENGTH = 3999;
if (cw != "" && attachments.length == 0) {
if (cw != "" && (images.length == 0 || videos.length == 0)) {
desc += "\u26a0 " + cw + "\n\n||" + content + "||";
MAX_LENGTH -= 8 - cw.length;
} else {
@ -270,26 +286,62 @@ async function processUrl(msg, url) {
},
fields: [],
};
if (attachments.length > 0) {
if (attachments.length > 1) {
if (images.length > 0) {
if (images.length > 1) {
baseEmbed.fields.push({
name: "Images",
value: attachments
value: images
.map((attachment, index) => `[Image ${index + 1}](${attachment.url})`)
.join(" | "),
inline: true,
});
} else {
baseEmbed.fields.push({
name: "Image",
value: `[Click for image](${attachments[0].url})`,
value: `[Click for image](${images[0].url})`,
inline: true,
});
}
}
if (videos.length > 0) {
if (videos.length > 1) {
baseEmbed.fields.push({
name: "Videos",
value: videos
.map((attachment, index) => `[Video ${index + 1}](${attachment.url})`)
.join(" | "),
inline: true,
});
} else {
baseEmbed.fields.push({
name: "Video",
value: `[Click for video](${videos[0].url})`,
inline: true,
});
}
}
if (audios.length > 0) {
if (audios.length > 1) {
baseEmbed.fields.push({
name: "Audios",
value: audios
.map((attachment, index) => `[Audio ${index + 1}](${attachment.url})`)
.join(" | "),
inline: true,
});
} else {
baseEmbed.fields.push({
name: "Audio",
value: `[Click for audio](${audios[0].url})`,
inline: true,
});
}
}
const embeds = [];
if (attachments.length > 0) {
for (const attachment of attachments) {
if (images.length > 0) {
for (const attachment of images) {
const embed = Object.assign({}, baseEmbed);
embed.image = {
url: attachment.url,