potential fix for favorites in production, let's try
This commit is contained in:
parent
e18270a1ce
commit
52b83dee3a
@ -201,8 +201,7 @@ export default {
|
|||||||
tmp
|
tmp
|
||||||
};
|
};
|
||||||
return data;
|
return data;
|
||||||
},
|
},getRandom: async (o = ({ user, tag, mime, mode, fav, session })) => {
|
||||||
getRandom: async (o = ({ user, tag, mime, mode, session })) => {
|
|
||||||
const user = o.user ? decodeURI(o.user) : null;
|
const user = o.user ? decodeURI(o.user) : null;
|
||||||
const tag = lib.parseTag(o.tag ?? null);
|
const tag = lib.parseTag(o.tag ?? null);
|
||||||
const mime = (o.mime ?? "");
|
const mime = (o.mime ?? "");
|
||||||
@ -210,28 +209,45 @@ export default {
|
|||||||
|
|
||||||
const modequery = mime == "audio" ? lib.getMode(0) : lib.getMode(o.mode ?? 0);
|
const modequery = mime == "audio" ? lib.getMode(0) : lib.getMode(o.mode ?? 0);
|
||||||
|
|
||||||
const item = await db`
|
let item;
|
||||||
|
|
||||||
|
if (o.fav && user) {
|
||||||
|
// Special case: random from user's favorites
|
||||||
|
item = await db`
|
||||||
|
select
|
||||||
|
items.id
|
||||||
|
from favorites
|
||||||
|
inner join items on favorites.item_id = items.id
|
||||||
|
inner join "user" on "user".id = favorites.user_id
|
||||||
|
where
|
||||||
|
"user".user ilike ${'%' + user + '%'}
|
||||||
|
and items.active = 'true'
|
||||||
|
${mime ? db`and items.mime ilike ${smime}` : db``}
|
||||||
|
order by random()
|
||||||
|
limit 1
|
||||||
|
`;
|
||||||
|
} else {
|
||||||
|
// Normal random logic
|
||||||
|
item = await db`
|
||||||
select
|
select
|
||||||
items.id
|
items.id
|
||||||
from items
|
from items
|
||||||
left join tags_assign on tags_assign.item_id = items.id
|
left join tags_assign on tags_assign.item_id = items.id
|
||||||
left join tags on tags.id = tags_assign.tag_id
|
left join tags on tags.id = tags_assign.tag_id
|
||||||
left join favorites on favorites.item_id = items.id
|
|
||||||
left join "user" on "user".id = favorites.user_id
|
|
||||||
where
|
where
|
||||||
${ db.unsafe(modequery) }
|
${db.unsafe(modequery)}
|
||||||
and items.active = 'true'
|
and items.active = 'true'
|
||||||
${ tag ? db`and tags.normalized ilike '%' || slugify(${tag}) || '%'` : db`` }
|
${tag ? db`and tags.normalized ilike '%' || slugify(${tag}) || '%'` : db``}
|
||||||
${ o.fav ? db`and "user".user ilike ${'%'+user+'%'}` : db`` }
|
${user ? db`and items.username ilike ${'%' + user + '%'}` : db``}
|
||||||
${ user ? db`and items.username ilike ${'%'+user+'%'}` : db`` }
|
${mime ? db`and items.mime ilike ${smime}` : db``}
|
||||||
${ mime ? db`and items.mime ilike ${smime}` : db`` }
|
${!o.session && globalfilter ? db`and items.id not in (select item_id from tags_assign where item_id = items.id and (${db.unsafe(globalfilter)}))` : db``}
|
||||||
${ !o.session && globalfilter ? db`and items.id not in (select item_id from tags_assign where item_id = items.id and (${db.unsafe(globalfilter)}))` : db`` }
|
|
||||||
group by items.id, tags.tag
|
group by items.id, tags.tag
|
||||||
order by random()
|
order by random()
|
||||||
limit 1
|
limit 1
|
||||||
`;
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
if(item.length === 0) {
|
if (item.length === 0) {
|
||||||
return {
|
return {
|
||||||
success: false,
|
success: false,
|
||||||
message: "no f0cks found :("
|
message: "no f0cks found :("
|
||||||
@ -246,4 +262,4 @@ export default {
|
|||||||
itemid: item[0].id
|
itemid: item[0].id
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import cfg from "../../inc/config.mjs";
|
import cfg from "../../inc/config.mjs";
|
||||||
import lib from "../lib.mjs";
|
|
||||||
import f0cklib from "../routeinc/f0cklib.mjs";
|
import f0cklib from "../routeinc/f0cklib.mjs";
|
||||||
|
|
||||||
export default (router, tpl) => {
|
export default (router, tpl) => {
|
||||||
@ -7,12 +6,14 @@ export default (router, tpl) => {
|
|||||||
let referer = req.headers.referer ?? '';
|
let referer = req.headers.referer ?? '';
|
||||||
let opts = {};
|
let opts = {};
|
||||||
|
|
||||||
if(referer.match(new RegExp(cfg.main.url.regex))) { // parse referer
|
if (referer.match(new RegExp(cfg.main.url.regex))) { // parse referer
|
||||||
referer = referer.split(cfg.main.url.domain)[1];
|
referer = referer.split(cfg.main.url.domain)[1];
|
||||||
console.log("referer: ", referer);
|
console.log("referer: ", referer);
|
||||||
|
|
||||||
const tmp = referer.match(/^\/?(?:\/tag\/(?<tag>.+?))?(?:\/user\/(?<user>.+?)\/(?<mode>f0cks|favs))?(?:\/(?<mime>image|audio|video))?(?:\/p\/(?<page>\d+))?(?:\/(?<itemid>\d+))?$/);
|
const tmp = referer.match(/^\/?(?:\/tag\/(?<tag>.+?))?(?:\/user\/(?<user>.+?)\/(?<mode>f0cks|favs))?(?:\/(?<mime>image|audio|video))?(?:\/p\/(?<page>\d+))?(?:\/(?<itemid>\d+))?$/);
|
||||||
console.log("tmp: ", tmp);
|
console.log("tmp: ", tmp);
|
||||||
if(tmp)
|
|
||||||
|
if (tmp && tmp.groups)
|
||||||
opts = tmp.groups;
|
opts = tmp.groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,14 +22,14 @@ export default (router, tpl) => {
|
|||||||
tag: opts.tag,
|
tag: opts.tag,
|
||||||
mime: opts.mime,
|
mime: opts.mime,
|
||||||
page: opts.page,
|
page: opts.page,
|
||||||
fav: opts.mode == 'favs',
|
fav: opts.mode === 'favs',
|
||||||
mode: req.session.mode,
|
mode: req.session.mode,
|
||||||
session: !!req.session
|
session: !!req.session
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("data", data);
|
console.log("data", data);
|
||||||
|
|
||||||
if(!data.success) {
|
if (!data.success) {
|
||||||
return res.reply({
|
return res.reply({
|
||||||
code: 404,
|
code: 404,
|
||||||
body: tpl.render('error', {
|
body: tpl.render('error', {
|
||||||
@ -40,5 +41,6 @@ export default (router, tpl) => {
|
|||||||
|
|
||||||
res.redirect(encodeURI(`${data.link.main}${data.link.path}${data.itemid}`));
|
res.redirect(encodeURI(`${data.link.main}${data.link.path}${data.itemid}`));
|
||||||
});
|
});
|
||||||
|
|
||||||
return router;
|
return router;
|
||||||
};
|
};
|
Loading…
x
Reference in New Issue
Block a user