scroller filename as metadata

This commit is contained in:
2026-05-27 06:33:28 +02:00
parent 25dfa6c8a2
commit 635afe9f9f
2 changed files with 14 additions and 5 deletions

View File

@@ -209,6 +209,12 @@
if (!str) return ''; if (!str) return '';
return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
} }
function decodeHtmlEntities(str) {
if (!str) return '';
const txt = document.createElement('textarea');
txt.innerHTML = String(str);
return txt.value;
}
function timeAgo(iso) { function timeAgo(iso) {
const s = Math.floor((Date.now() - new Date(iso)) / 1000); const s = Math.floor((Date.now() - new Date(iso)) / 1000);
const i = window.f0ckI18n || {}; const i = window.f0ckI18n || {};
@@ -1690,7 +1696,8 @@
is_audio: false, is_audio: false,
comment_count: p.replies || 0, comment_count: p.replies || 0,
rating_label: isWsg ? 'SFW' : (isGif ? 'NSFW' : 'External'), rating_label: isWsg ? 'SFW' : (isGif ? 'NSFW' : 'External'),
rating_class: isWsg ? 'sfw' : (isGif ? 'nsfw' : 'untagged') rating_class: isWsg ? 'sfw' : (isGif ? 'nsfw' : 'untagged'),
original_filename: p.filename ? `${decodeHtmlEntities(p.filename)}${ext}` : null
}; };
}) })
.filter(Boolean); .filter(Boolean);
@@ -1855,7 +1862,8 @@
url: item.external_media_url || item.dest, url: item.external_media_url || item.dest,
rating: rating, rating: rating,
tags: '4chan', tags: '4chan',
comment: `Rehosted from 4chan thread: ${applied.externalUrl || 'unknown'}` comment: `Rehosted from 4chan thread: ${applied.externalUrl || 'unknown'}`,
...(item.original_filename ? { original_filename: item.original_filename } : {})
}) })
}); });
const data = await resp.json(); const data = await resp.json();

View File

@@ -319,7 +319,7 @@ export default (router) => {
// POST /api/v2/scroller/rehost // POST /api/v2/scroller/rehost
// Downloads an external item and adds it to the platform // Downloads an external item and adds it to the platform
router.post(/^\/api\/v2\/scroller\/rehost\/?$/, lib.loggedin, async (req, res) => { router.post(/^\/api\/v2\/scroller\/rehost\/?$/, lib.loggedin, async (req, res) => {
const { url, rating: initialRating, tags: tagsRaw, comment, is_oc } = req.post || {}; const { url, rating: initialRating, tags: tagsRaw, comment, is_oc, original_filename } = req.post || {};
if (!url) return res.reply({ code: 400, body: JSON.stringify({ success: false, msg: 'URL is required' }) }); if (!url) return res.reply({ code: 400, body: JSON.stringify({ success: false, msg: 'URL is required' }) });
@@ -436,8 +436,9 @@ export default (router) => {
usernetwork: 'web', usernetwork: 'web',
stamp: ~~(Date.now() / 1000), stamp: ~~(Date.now() / 1000),
active: !isApprovalRequired, active: !isApprovalRequired,
is_oc: !!is_oc is_oc: !!is_oc,
}, 'src', 'dest', 'mime', 'size', 'checksum', 'phash', 'username', 'userchannel', 'usernetwork', 'stamp', 'active', 'is_oc')} original_filename: original_filename || null
}, 'src', 'dest', 'mime', 'size', 'checksum', 'phash', 'username', 'userchannel', 'usernetwork', 'stamp', 'active', 'is_oc', 'original_filename')}
RETURNING id RETURNING id
`; `;