This commit is contained in:
2026-08-09 03:24:21 +02:00
parent 3e20394c85
commit a8a093450f
2 changed files with 33 additions and 4 deletions

View File

@@ -588,7 +588,23 @@ export default {
const effMode = Number(mode ?? 0); const effMode = Number(mode ?? 0);
const multiRatingSQL = (Array.isArray(ratings) && ratings.length > 0) ? lib.getMultiRatingMode(ratings) : null; 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 tagFilter = db``;
let titleFilter = db``; let titleFilter = db``;
@@ -749,7 +765,7 @@ export default {
// Determine the effective mode for optimization check (similar to Random) // Determine the effective mode for optimization check (similar to Random)
const nsfl_id = cfg.nsfl_tag_id || 3; 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) => { const baseQuery = (whereClause, orderBy, limit = 1) => {
return db` return db`

View File

@@ -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` const next = await db`
select id select id
from "items" 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 order by id
limit 1 limit 1
`; `;
const prev = await db` const prev = await db`
select id select id
from "items" 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 order by id desc
limit 1 limit 1
`; `;