fedimbed: cohost support
This commit is contained in:
parent
9b86bbcabe
commit
a7ca9fd347
1 changed files with 26 additions and 3 deletions
|
@ -24,7 +24,8 @@ const PATH_REGEX = {
|
|||
misskey: /^\/notes\/[a-z0-9]+\/?/,
|
||||
gotosocial: /^\/@(.+?)\/statuses\/[0-9A-Z]+\/?/,
|
||||
lemmy: /^\/post\/\d+\/?/,
|
||||
honk: /^\/u\/(.+?)\/h\/(.+?)\/?$/,
|
||||
honk: /^\/u\/(.+?)\/h\/(.+?)\/?/,
|
||||
cohost: /^\/[A-Za-z0-9]+\/post\/\d+-[A-Za-z0-9-]+\/?/,
|
||||
};
|
||||
|
||||
const PLATFORM_COLORS = {
|
||||
|
@ -38,9 +39,12 @@ const PLATFORM_COLORS = {
|
|||
lemmy: 0x14854f,
|
||||
birdsitelive: 0x1da1f2,
|
||||
iceshrimp: 0x8e82f9, // YCbCr interpolated as the accent color is a gradient
|
||||
cohost: 0x83254f,
|
||||
};
|
||||
|
||||
const domainCache = new Map();
|
||||
domainCache.set("cohost.org", "cohost"); // no nodeinfo
|
||||
|
||||
async function resolvePlatform(url) {
|
||||
const urlObj = new URL(url);
|
||||
if (domainCache.has(urlObj.hostname)) return domainCache.get(urlObj.hostname);
|
||||
|
@ -137,7 +141,8 @@ async function processUrl(msg, url, spoiler = false) {
|
|||
let platformName = platform
|
||||
.replace("gotosocial", "GoToSocial")
|
||||
.replace("birdsitelive", '"Twitter" (BirdsiteLive)')
|
||||
.replace(/^(.)/, (_, c) => c.toUpperCase());
|
||||
.replace(/^(.)/, (_, c) => c.toUpperCase())
|
||||
.replace("Cohost", "cohost");
|
||||
|
||||
const images = [];
|
||||
const videos = [];
|
||||
|
@ -475,7 +480,9 @@ async function processUrl(msg, url, spoiler = false) {
|
|||
)
|
||||
.then((res) => res.json())
|
||||
.catch((err) => {
|
||||
logger.error("fedimbed", `Failed to get author for "${url}": ${err}`);
|
||||
// only posts can be activity+json right now, reduce log spam
|
||||
if (platform !== "cohost")
|
||||
logger.error("fedimbed", `Failed to get author for "${url}": ${err}`);
|
||||
});
|
||||
|
||||
if (authorData) {
|
||||
|
@ -486,6 +493,18 @@ async function processUrl(msg, url, spoiler = false) {
|
|||
url: authorData.url,
|
||||
avatar: authorData.icon?.url,
|
||||
};
|
||||
} else {
|
||||
// bootleg author, mainly for cohost
|
||||
const authorUrl = postData.actor ?? postData.attributedTo;
|
||||
const authorUrlObj = new URL(authorUrl);
|
||||
const name = authorUrlObj.pathname.substring(
|
||||
authorUrlObj.pathname.lastIndexOf("/") + 1
|
||||
);
|
||||
author = {
|
||||
name,
|
||||
handle: `${name}@${authorUrlObj.hostname}`,
|
||||
url: authorUrl,
|
||||
};
|
||||
}
|
||||
|
||||
if (postData.endTime && postData.oneOf && postData.votersCount) {
|
||||
|
@ -515,6 +534,10 @@ async function processUrl(msg, url, spoiler = false) {
|
|||
|
||||
// FIXME: stop being lazy and use an html parser
|
||||
content = content.replace(/<a .*?href="([^"]+?)".*?>(.+?)<\/a>/g, "[$2]($1)");
|
||||
content = content.replace(
|
||||
/<img .*?src="([^"]+?)".*?alt="([^"]+?)".*?\/>/g,
|
||||
"[$2]($1)"
|
||||
);
|
||||
content = content.replace(/<\/?\s*br\s*\/?>/g, "\n");
|
||||
content = content.replace(/<\/p><p>/g, "\n\n");
|
||||
content = content.replace(/<ol>/g, "\n");
|
||||
|
|
Loading…
Reference in a new issue