mirror of
https://github.com/lifegpc/eh-downloader.git
synced 2026-07-08 01:31:00 +08:00
/api/file/random support is_ad and is_nsfw
This commit is contained in:
40
db.ts
40
db.ts
@@ -766,13 +766,39 @@ export class EhDb {
|
||||
[gid],
|
||||
)[0][0];
|
||||
}
|
||||
get_random_file() {
|
||||
const s = this.convert_file(
|
||||
this.db.queryEntries<EhFileRaw>(
|
||||
"SELECT * FROM file ORDER BY RANDOM() LIMIT 1;",
|
||||
),
|
||||
);
|
||||
return s.length ? s[0] : undefined;
|
||||
get_random_file(is_nsfw: boolean | null, is_ad: boolean | null) {
|
||||
if (is_nsfw === null && is_ad === null) {
|
||||
const s = this.convert_file(
|
||||
this.db.queryEntries<EhFileRaw>(
|
||||
"SELECT * FROM file ORDER BY RANDOM() LIMIT 1;",
|
||||
),
|
||||
);
|
||||
return s.length ? s[0] : undefined;
|
||||
} else if (is_nsfw === null) {
|
||||
const s = this.convert_file(
|
||||
this.db.queryEntries<EhFileRaw>(
|
||||
"SELECT file.* FROM file LEFT JOIN filemeta ON file.token = filemeta.token WHERE IFNULL(filemeta.is_ad, 0) = ? ORDER BY RANDOM() LIMIT 1;",
|
||||
[is_ad],
|
||||
),
|
||||
);
|
||||
return s.length ? s[0] : undefined;
|
||||
} else if (is_ad === null) {
|
||||
const s = this.convert_file(
|
||||
this.db.queryEntries<EhFileRaw>(
|
||||
"SELECT file.* FROM file LEFT JOIN filemeta ON file.token = filemeta.token WHERE IFNULL(filemeta.is_nsfw, 0) = ? ORDER BY RANDOM() LIMIT 1;",
|
||||
[is_nsfw],
|
||||
),
|
||||
);
|
||||
return s.length ? s[0] : undefined;
|
||||
} else {
|
||||
const s = this.convert_file(
|
||||
this.db.queryEntries<EhFileRaw>(
|
||||
"SELECT file.* FROM file LEFT JOIN filemeta ON file.token = filemeta.token WHERE IFNULL(filemeta.is_nsfw, 0) = ? AND IFNULL(filemeta.is_ad, 0) = ? ORDER BY RANDOM() LIMIT 1;",
|
||||
[is_nsfw, is_ad],
|
||||
),
|
||||
);
|
||||
return s.length ? s[0] : undefined;
|
||||
}
|
||||
}
|
||||
get_tasks() {
|
||||
return this.transaction(() =>
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
import { Handlers } from "$fresh/server.ts";
|
||||
import { get_task_manager } from "../../../server.ts";
|
||||
import { parse_bool } from "../../../server/parse_form.ts";
|
||||
|
||||
export const handler: Handlers = {
|
||||
GET(req, _ctx) {
|
||||
async GET(req, _ctx) {
|
||||
const m = get_task_manager();
|
||||
const f = m.db.get_random_file();
|
||||
if (!f) return new Response("File not found.", { status: 404 });
|
||||
const u = new URL(req.url);
|
||||
const is_nsfw = await parse_bool(u.searchParams.get("is_nsfw"), null);
|
||||
const is_ad = await parse_bool(u.searchParams.get("is_ad"), null);
|
||||
const f = m.db.get_random_file(is_nsfw, is_ad);
|
||||
if (!f) return new Response("File not found.", { status: 404 });
|
||||
return Response.redirect(`${u.origin}/api/file/${f.id}`);
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user