From 69ed5611cfb80cc1b1c84717dfc660a73050941e Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Wed, 28 May 2025 13:32:51 -0400 Subject: re-implement preview groups as SkUrlPreviewGroup --- .../frontend/src/components/SkUrlPreviewGroup.vue | 280 +++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 packages/frontend/src/components/SkUrlPreviewGroup.vue (limited to 'packages/frontend/src/components/SkUrlPreviewGroup.vue') diff --git a/packages/frontend/src/components/SkUrlPreviewGroup.vue b/packages/frontend/src/components/SkUrlPreviewGroup.vue new file mode 100644 index 0000000000..4c43c989bd --- /dev/null +++ b/packages/frontend/src/components/SkUrlPreviewGroup.vue @@ -0,0 +1,280 @@ + + + + + + + -- cgit v1.2.3-freya From 2536768133a716c0a5f45ee7ef7e0694b907a205 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Fri, 30 May 2025 12:57:52 -0400 Subject: check for note in initial de-duplication pass --- packages/frontend/src/components/SkUrlPreviewGroup.vue | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'packages/frontend/src/components/SkUrlPreviewGroup.vue') diff --git a/packages/frontend/src/components/SkUrlPreviewGroup.vue b/packages/frontend/src/components/SkUrlPreviewGroup.vue index 4c43c989bd..beba20f783 100644 --- a/packages/frontend/src/components/SkUrlPreviewGroup.vue +++ b/packages/frontend/src/components/SkUrlPreviewGroup.vue @@ -207,9 +207,13 @@ function deduplicatePreviews(previews: Summary[]): Summary[] { // Skip if we have AP and the other doesn't if (preview.activityPub && !p.activityPub) return false; + // Skip if we have a note and the other doesn't + if (preview.note && !p.note) return false; + // Skip later previews (keep the earliest instance)... - // ...but only if we have AP or the later one doesn't. - if (i > index && (preview.activityPub || !p.activityPub)) return false; + // ...but only if we have AP or the later one doesn't... + // ...and only if we have note or the later one doesn't. + if (i > index && (preview.activityPub || !p.activityPub) && (preview.note || !p.note)) return false; // If we get here, then "preview" is a duplicate of "p" and should be skipped. return true; -- cgit v1.2.3-freya From 876ec968bd6883dccec2a0a3fb839fd06cdd4063 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Fri, 30 May 2025 12:58:35 -0400 Subject: consider duplicate previews where one URL can't be resolved, but another URL resolves to a local copy of the same note --- .../frontend/src/components/SkUrlPreviewGroup.vue | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'packages/frontend/src/components/SkUrlPreviewGroup.vue') diff --git a/packages/frontend/src/components/SkUrlPreviewGroup.vue b/packages/frontend/src/components/SkUrlPreviewGroup.vue index beba20f783..5175e16cfc 100644 --- a/packages/frontend/src/components/SkUrlPreviewGroup.vue +++ b/packages/frontend/src/components/SkUrlPreviewGroup.vue @@ -35,6 +35,7 @@ import { extractUrlFromMfm } from '@/utility/extract-url-from-mfm'; import { $i } from '@/i'; import { misskeyApi } from '@/utility/misskey-api'; import MkUrlPreview from '@/components/MkUrlPreview.vue'; +import { getNoteUrls } from '@/utility/getNoteUrls'; type Summary = Awaited> & { haveNoteLocally?: boolean; @@ -265,6 +266,31 @@ function deduplicatePreviews(previews: Summary[]): Summary[] { return true; })); + // eslint-disable-next-line no-param-reassign + previews = previews + // Remove any previews where the note duplicates url + .filter((preview, index) => !previews.some((p, i) => { + // Skip the current preview (don't count self as duplicate). + if (p === preview) return false; + + // Skip if we have a note + if (preview.note) return false; + + // Skip if other does not have a note + if (!p.note) return false; + + // Skip later previews (keep the earliest instance) + if (i > index) return false; + + const noteUrls = getNoteUrls(p.note); + + // Remove if other duplicates our AP URL + if (preview.activityPub && noteUrls.includes(preview.activityPub)) return true; + + // Remove if other duplicates our main URL + return noteUrls.includes(preview.url); + })); + return previews; } -- cgit v1.2.3-freya From bae4c07bb3ff2714286719ea47d4fb3601411b74 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Wed, 4 Jun 2025 11:15:42 -0400 Subject: support link attributions in SkUrlPreviewGroup --- packages/frontend/src/components/MkUrlPreview.vue | 64 +++++++++++++++------- .../frontend/src/components/SkUrlPreviewGroup.vue | 58 ++++++++++++++++---- 2 files changed, 92 insertions(+), 30 deletions(-) (limited to 'packages/frontend/src/components/SkUrlPreviewGroup.vue') diff --git a/packages/frontend/src/components/MkUrlPreview.vue b/packages/frontend/src/components/MkUrlPreview.vue index 680a9a7141..5d0e6e3df7 100644 --- a/packages/frontend/src/components/MkUrlPreview.vue +++ b/packages/frontend/src/components/MkUrlPreview.vue @@ -99,13 +99,24 @@ SPDX-License-Identifier: AGPL-3.0-only + +