From a8a093450f60de7c132a2ead038cc6966057a37c Mon Sep 17 00:00:00 2001 From: Kibi Kelburton Date: Sun, 9 Aug 2026 03:24:21 +0200 Subject: [PATCH] gfd --- src/inc/routeinc/f0cklib.mjs | 20 ++++++++++++++++++-- src/inc/routes/apiv2/index.mjs | 17 +++++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/inc/routeinc/f0cklib.mjs b/src/inc/routeinc/f0cklib.mjs index 93e37b3..d5a7398 100644 --- a/src/inc/routeinc/f0cklib.mjs +++ b/src/inc/routeinc/f0cklib.mjs @@ -588,7 +588,23 @@ export default { const effMode = Number(mode ?? 0); const multiRatingSQL = (Array.isArray(ratings) && ratings.length > 0) ? lib.getMultiRatingMode(ratings) : null; - const modequery = multiRatingSQL ?? lib.getMode(effMode); + let baseMode = multiRatingSQL ?? lib.getMode(effMode); + if (!session) { + if ((mode === 3 || mode === undefined || mode === null) && !multiRatingSQL) { + if (cfg.websrv.public_nsfw) { + baseMode = cfg.websrv.public_untagged + ? "(items.id in (select item_id from tags_assign where tag_id in (1, 2)) or not exists (select 1 from tags_assign where item_id = items.id))" + : "items.id in (select item_id from tags_assign where tag_id in (1, 2))"; + } else { + baseMode = cfg.websrv.public_untagged + ? "(items.id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id))" + : "items.id in (select item_id from tags_assign where tag_id = 1)"; + } + } else if (!cfg.websrv.public_untagged && (mode === 2 || (Array.isArray(ratings) && ratings.length === 1 && ratings[0] === 'untagged'))) { + baseMode = "1 = 0"; + } + } + const modequery = baseMode; let tagFilter = db``; let titleFilter = db``; @@ -749,7 +765,7 @@ export default { // Determine the effective mode for optimization check (similar to Random) const nsfl_id = cfg.nsfl_tag_id || 3; - const useTagsDriver = (effMode === 0 || effMode === 1 || effMode === 4) && !fav && !tag && !user && !hall; + const useTagsDriver = !!session && (effMode === 0 || effMode === 1 || effMode === 4) && !fav && !tag && !user && !hall; const baseQuery = (whereClause, orderBy, limit = 1) => { return db` diff --git a/src/inc/routes/apiv2/index.mjs b/src/inc/routes/apiv2/index.mjs index 06746a2..11d1c51 100644 --- a/src/inc/routes/apiv2/index.mjs +++ b/src/inc/routes/apiv2/index.mjs @@ -780,17 +780,30 @@ export default router => { }); } + let guestTagFilter = db``; + if (!session) { + if (cfg.websrv.public_nsfw) { + guestTagFilter = cfg.websrv.public_untagged + ? db`and (id in (select item_id from tags_assign where tag_id in (1, 2)) or not exists (select 1 from tags_assign where item_id = items.id))` + : db`and id in (select item_id from tags_assign where tag_id in (1, 2))`; + } else { + guestTagFilter = cfg.websrv.public_untagged + ? db`and (id in (select item_id from tags_assign where tag_id = 1) or not exists (select 1 from tags_assign where item_id = items.id))` + : db`and id in (select item_id from tags_assign where tag_id = 1)`; + } + } + const next = await db` select id from "items" - where id > ${+id} and active = true and coalesce(visibility, 0) = 0 + where id > ${+id} and active = true and coalesce(visibility, 0) = 0 ${guestTagFilter} order by id limit 1 `; const prev = await db` select id from "items" - where id < ${+id} and active = true and coalesce(visibility, 0) = 0 + where id < ${+id} and active = true and coalesce(visibility, 0) = 0 ${guestTagFilter} order by id desc limit 1 `;