summaryrefslogtreecommitdiff
path: root/packages/backend/src/core
diff options
context:
space:
mode:
authorMarie <marie@kaifa.ch>2024-02-07 21:52:27 +0100
committerMarie <marie@kaifa.ch>2024-02-07 21:52:27 +0100
commitaf5ebdfcedd763c236ea3718f06827040d24c458 (patch)
treeaea3469f76fadde61f7514af9324e31c9b6898e0 /packages/backend/src/core
parentfix: add missing diff between SkNote* and MkNote* (diff)
parenttypo (diff)
downloadsharkey-af5ebdfcedd763c236ea3718f06827040d24c458.tar.gz
sharkey-af5ebdfcedd763c236ea3718f06827040d24c458.tar.bz2
sharkey-af5ebdfcedd763c236ea3718f06827040d24c458.zip
merge: more upstream changes
Diffstat (limited to 'packages/backend/src/core')
-rw-r--r--packages/backend/src/core/MfmService.ts4
-rw-r--r--packages/backend/src/core/activitypub/ApMfmService.ts19
-rw-r--r--packages/backend/src/core/activitypub/ApRendererService.ts23
3 files changed, 30 insertions, 16 deletions
diff --git a/packages/backend/src/core/MfmService.ts b/packages/backend/src/core/MfmService.ts
index 51c4252715..5cfcd93a64 100644
--- a/packages/backend/src/core/MfmService.ts
+++ b/packages/backend/src/core/MfmService.ts
@@ -419,6 +419,10 @@ export class MfmService {
},
text: (node) => {
+ if (!node.props.text.match(/[\r\n]/)) {
+ return doc.createTextNode(node.props.text);
+ }
+
const el = doc.createElement('span');
const nodes = node.props.text.split(/\r\n|\r|\n/).map(x => doc.createTextNode(x));
diff --git a/packages/backend/src/core/activitypub/ApMfmService.ts b/packages/backend/src/core/activitypub/ApMfmService.ts
index b900def2e4..0716e43123 100644
--- a/packages/backend/src/core/activitypub/ApMfmService.ts
+++ b/packages/backend/src/core/activitypub/ApMfmService.ts
@@ -25,8 +25,21 @@ export class ApMfmService {
}
@bindThis
- public getNoteHtml(note: MiNote): string | null {
- if (!note.text) return '';
- return this.mfmService.toHtml(mfm.parse(note.text), note.mentionedRemoteUsers ? JSON.parse(note.mentionedRemoteUsers) : []);
+ public getNoteHtml(note: MiNote, apAppend?: string) {
+ let noMisskeyContent = false;
+ const srcMfm = (note.text ?? '') + (apAppend ?? '');
+
+ const parsed = mfm.parse(srcMfm);
+
+ if (!apAppend && parsed?.every(n => ['text', 'unicodeEmoji', 'emojiCode', 'mention', 'hashtag', 'url'].includes(n.type))) {
+ noMisskeyContent = true;
+ }
+
+ const content = this.mfmService.toHtml(parsed, JSON.parse(note.mentionedRemoteUsers));
+
+ return {
+ content,
+ noMisskeyContent,
+ };
}
}
diff --git a/packages/backend/src/core/activitypub/ApRendererService.ts b/packages/backend/src/core/activitypub/ApRendererService.ts
index 3f6ddd8027..be3ebbaf96 100644
--- a/packages/backend/src/core/activitypub/ApRendererService.ts
+++ b/packages/backend/src/core/activitypub/ApRendererService.ts
@@ -409,17 +409,15 @@ export class ApRendererService {
poll = await this.pollsRepository.findOneBy({ noteId: note.id });
}
- let apText = text;
+ let apAppend = '';
if (quote) {
- apText += `\n\nRE: ${quote}`;
+ apAppend += `\n\nRE: ${quote}`;
}
const summary = note.cw === '' ? String.fromCharCode(0x200B) : note.cw;
- const content = this.apMfmService.getNoteHtml(Object.assign({}, note, {
- text: apText,
- }));
+ const { content, noMisskeyContent } = this.apMfmService.getNoteHtml(note, apAppend);
const emojis = await this.getEmojis(note.emojis);
const apemojis = emojis.filter(emoji => !emoji.localOnly).map(emoji => this.renderEmoji(emoji));
@@ -432,9 +430,6 @@ export class ApRendererService {
const asPoll = poll ? {
type: 'Question',
- content: this.apMfmService.getNoteHtml(Object.assign({}, note, {
- text: text,
- })),
[poll.expiresAt && poll.expiresAt < new Date() ? 'closed' : 'endTime']: poll.expiresAt,
[poll.multiple ? 'anyOf' : 'oneOf']: poll.choices.map((text, i) => ({
type: 'Note',
@@ -452,11 +447,13 @@ export class ApRendererService {
attributedTo,
summary: summary ?? undefined,
content: content ?? undefined,
- _misskey_content: text,
- source: {
- content: text,
- mediaType: 'text/x.misskeymarkdown',
- },
+ ...(noMisskeyContent ? {} : {
+ _misskey_content: text,
+ source: {
+ content: text,
+ mediaType: 'text/x.misskeymarkdown',
+ },
+ }),
_misskey_quote: quote,
quoteUrl: quote,
quoteUri: quote,