From 0944ecf32af3d0ba321e31780da197db6a002e7e Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Sun, 26 Oct 2025 19:48:38 -0400 Subject: [PATCH] Fix owner checks by reusing selected video details --- js/app.js | 58 ++++++++++++++++++++++++++++++++++---------- js/channelProfile.js | 9 ++++--- js/subscriptions.js | 9 ++++--- 3 files changed, 57 insertions(+), 19 deletions(-) diff --git a/js/app.js b/js/app.js index 5214016f..4e6bd1fb 100644 --- a/js/app.js +++ b/js/app.js @@ -1473,6 +1473,7 @@ class Application { eventId: video.id, index: Number.isFinite(index) ? index : null, triggerElement: trigger, + video, }); }; this.videoListView.setEditHandler(this.videoListViewEditHandler); @@ -1485,6 +1486,7 @@ class Application { eventId: video.id, index: Number.isFinite(index) ? index : null, triggerElement: trigger, + video, }); }; this.videoListView.setRevertHandler(this.videoListViewRevertHandler); @@ -1496,6 +1498,7 @@ class Application { this.handleFullDeleteVideo({ eventId: video.id, index: Number.isFinite(index) ? index : null, + video, }); }; this.videoListView.setDeleteHandler(this.videoListViewDeleteHandler); @@ -8754,8 +8757,9 @@ class Application { const isElement = (value) => typeof Element !== "undefined" && value instanceof Element; let triggerElement = null; + let providedVideo = null; if (target && typeof target === "object") { - const eventId = + let eventId = typeof target.eventId === "string" ? target.eventId.trim() : ""; let index = null; if (typeof target.index === "number" && Number.isInteger(target.index)) { @@ -8766,18 +8770,29 @@ class Application { const parsed = Number.parseInt(target.index.trim(), 10); index = Number.isNaN(parsed) ? null : parsed; } + const targetVideo = target.video; + if (targetVideo && typeof targetVideo === "object") { + const candidateId = + typeof targetVideo.id === "string" ? targetVideo.id.trim() : ""; + if (candidateId) { + providedVideo = targetVideo; + if (!eventId) { + eventId = candidateId; + } + } + } if (isElement(target.triggerElement)) { triggerElement = target.triggerElement; } else if (isElement(target.trigger)) { triggerElement = target.trigger; } - return { eventId, index, triggerElement }; + return { eventId, index, triggerElement, video: providedVideo }; } if (typeof target === "string") { const trimmed = target.trim(); if (!trimmed) { - return { eventId: "", index: null, triggerElement }; + return { eventId: "", index: null, triggerElement, video: null }; } if (/^-?\d+$/.test(trimmed)) { const parsed = Number.parseInt(trimmed, 10); @@ -8785,22 +8800,24 @@ class Application { eventId: "", index: Number.isNaN(parsed) ? null : parsed, triggerElement, + video: null, }; } - return { eventId: trimmed, index: null, triggerElement }; + return { eventId: trimmed, index: null, triggerElement, video: null }; } if (typeof target === "number" && Number.isInteger(target)) { - return { eventId: "", index: target, triggerElement }; + return { eventId: "", index: target, triggerElement, video: null }; } - return { eventId: "", index: null, triggerElement }; + return { eventId: "", index: null, triggerElement, video: null }; } async resolveVideoActionTarget({ eventId = "", index = null, preloadedList, + video: providedVideo = null, } = {}) { const trimmedEventId = typeof eventId === "string" ? eventId.trim() : ""; const normalizedIndex = @@ -8808,13 +8825,28 @@ class Application { ? index : null; + const initialVideo = + providedVideo && typeof providedVideo === "object" ? providedVideo : null; + const providedId = + initialVideo && typeof initialVideo.id === "string" + ? initialVideo.id.trim() + : ""; + const targetEventId = trimmedEventId || providedId; + const candidateLists = Array.isArray(preloadedList) ? [preloadedList] : []; + if (providedId) { + this.videosMap.set(providedId, initialVideo); + if (!trimmedEventId || providedId === trimmedEventId) { + return initialVideo; + } + } + for (const list of candidateLists) { - if (trimmedEventId) { - const match = list.find((video) => video?.id === trimmedEventId); + if (targetEventId) { + const match = list.find((video) => video?.id === targetEventId); if (match) { this.videosMap.set(match.id, match); return match; @@ -8833,26 +8865,26 @@ class Application { } } - if (trimmedEventId) { - const fromMap = this.videosMap.get(trimmedEventId); + if (targetEventId) { + const fromMap = this.videosMap.get(targetEventId); if (fromMap) { return fromMap; } const activeVideos = nostrClient.getActiveVideos(); - const fromActive = activeVideos.find((video) => video.id === trimmedEventId); + const fromActive = activeVideos.find((video) => video.id === targetEventId); if (fromActive) { this.videosMap.set(fromActive.id, fromActive); return fromActive; } - const fromAll = nostrClient.allEvents.get(trimmedEventId); + const fromAll = nostrClient.allEvents.get(targetEventId); if (fromAll) { this.videosMap.set(fromAll.id, fromAll); return fromAll; } - const fetched = await nostrClient.getEventById(trimmedEventId); + const fetched = await nostrClient.getEventById(targetEventId); if (fetched) { this.videosMap.set(fetched.id, fetched); return fetched; diff --git a/js/channelProfile.js b/js/channelProfile.js index a251ca80..3c8623cf 100644 --- a/js/channelProfile.js +++ b/js/channelProfile.js @@ -4436,21 +4436,24 @@ export async function renderChannelVideosFromList({ videoCard.onEdit = ({ video: editVideo, index: editIndex }) => { app?.handleEditVideo?.({ eventId: editVideo?.id || "", - index: Number.isFinite(editIndex) ? editIndex : null + index: Number.isFinite(editIndex) ? editIndex : null, + video: editVideo || null }); }; videoCard.onRevert = ({ video: revertVideo, index: revertIndex }) => { app?.handleRevertVideo?.({ eventId: revertVideo?.id || "", - index: Number.isFinite(revertIndex) ? revertIndex : null + index: Number.isFinite(revertIndex) ? revertIndex : null, + video: revertVideo || null }); }; videoCard.onDelete = ({ video: deleteVideo, index: deleteIndex }) => { app?.handleFullDeleteVideo?.({ eventId: deleteVideo?.id || "", - index: Number.isFinite(deleteIndex) ? deleteIndex : null + index: Number.isFinite(deleteIndex) ? deleteIndex : null, + video: deleteVideo || null }); }; diff --git a/js/subscriptions.js b/js/subscriptions.js index bbba8338..92a96f92 100644 --- a/js/subscriptions.js +++ b/js/subscriptions.js @@ -1252,7 +1252,8 @@ class SubscriptionsManager { } app?.handleEditVideo?.({ eventId: video.id, - index: Number.isFinite(index) ? index : null + index: Number.isFinite(index) ? index : null, + video }); }); @@ -1262,7 +1263,8 @@ class SubscriptionsManager { } app?.handleRevertVideo?.({ eventId: video.id, - index: Number.isFinite(index) ? index : null + index: Number.isFinite(index) ? index : null, + video }); }); @@ -1272,7 +1274,8 @@ class SubscriptionsManager { } app?.handleFullDeleteVideo?.({ eventId: video.id, - index: Number.isFinite(index) ? index : null + index: Number.isFinite(index) ? index : null, + video }); });