poke/src/libpoketube/init/pages-404-and-main.js

117 lines
2.6 KiB
JavaScript
Raw Normal View History

2022-11-10 14:27:26 +01:00
const {
fetcher,
core,
wiki,
musicInfo,
modules,
version,
initlog,
init,
} = require("../libpoketube-initsys.js");
2022-11-09 17:48:29 +01:00
const {
IsJsonString,
convert,
getFirstLine,
capitalizeFirstLetter,
turntomins,
getRandomInt,
getRandomArbitrary,
} = require("../ptutils/libpt-coreutils.js");
2023-06-30 13:17:52 +02:00
var http = require("https");
var ping = require("ping");
2022-11-09 17:48:29 +01:00
const sha384 = modules.hash;
2023-11-23 07:24:55 +01:00
const splash = [
"Woke!",
"Gay gay homosexaul gay!",
"free palistine!",
"free software!",
"frick capitalism!",
"still calling it twitter btw!",
"boop!"
]
const random =
splash[Math.floor(Math.random() * splash.length)];
2022-12-18 15:00:51 +01:00
function getJson(str) {
try {
2022-12-18 16:02:03 +01:00
return JSON.parse(str);
2022-12-18 15:00:51 +01:00
} catch {
return null;
}
}
2022-11-09 17:48:29 +01:00
module.exports = function (app, config, renderTemplate) {
2023-06-13 20:31:10 +02:00
app.get("/app", async function (req, res) {
2023-09-30 22:20:29 +02:00
const { fetch } = await import("undici");
2023-02-25 18:46:42 +01:00
let tab = "";
if (req.query.tab) {
tab = `/?type=${capitalizeFirstLetter(req.query.tab)}`;
}
2022-11-09 17:48:29 +01:00
2023-10-05 18:05:51 +02:00
const invtrend = await fetch(
2023-05-16 20:07:17 +02:00
`https://invid-api.poketube.fun/api/v1/trending${tab}`
);
2023-02-25 18:46:42 +01:00
const t = getJson(await invtrend.text());
2022-11-09 17:48:29 +01:00
2023-10-23 16:49:24 +02:00
const invpopular = await fetch(
`https://invid-api.poketube.fun/api/v1/popular`
);
const p = getJson(await invpopular.text());
2023-02-25 18:46:42 +01:00
let j = null;
2022-11-10 14:27:26 +01:00
if (req.query.mobilesearch) {
2023-02-25 18:46:42 +01:00
const query = req.query.mobilesearch;
const continuation = req.query.continuation || "";
2023-09-30 22:20:29 +02:00
const search = await fetch(
2023-05-16 20:07:17 +02:00
`https://inner-api.poketube.fun/api/search?query=${query}&continuation=${continuation}`
);
2022-11-10 14:27:26 +01:00
const text = await search.text();
2023-02-25 18:46:42 +01:00
j = getJson(modules.toJson(text));
2022-11-09 17:48:29 +01:00
}
2023-10-06 16:54:03 +02:00
renderTemplate(res, req, "discover.ejs", {
2022-11-10 14:27:26 +01:00
tab: req.query.tab,
isMobile: req.useragent.isMobile,
2023-10-23 16:49:24 +02:00
p,
2022-11-10 14:27:26 +01:00
mobilesearch: req.query.mobilesearch,
inv: t,
turntomins,
2023-02-25 18:46:42 +01:00
continuation: req.query.continuation,
2022-11-10 14:27:26 +01:00
j,
});
});
2023-05-16 20:07:17 +02:00
2023-06-30 13:17:52 +02:00
app.get("/:v*?", async function (req, res) {
const uaos = req.useragent.os;
const browser = req.useragent.browser;
2023-10-06 16:54:03 +02:00
const isOldWindows = (uaos === "Windows 7" || uaos === "Windows 8") && browser === "Firefox";
2023-06-30 13:17:52 +02:00
const rendermainpage = () => {
if (req.useragent.isMobile) {
2023-10-23 16:49:24 +02:00
return res.redirect("/app");
2023-06-30 13:17:52 +02:00
}
return renderTemplate(res, req, "landing.ejs", {
isOldWindows,
2023-11-23 07:24:55 +01:00
splash
2023-06-30 13:17:52 +02:00
});
};
2023-05-16 20:07:17 +02:00
2023-06-30 13:17:52 +02:00
if (req.params.v && /[a-zA-Z0-9]+/.test(req.params.v)) {
const isvld = await core.isvalidvideo(req.params.v);
if (isvld) {
return res.redirect(`/watch?v=${req.params.v}`);
}
}
return rendermainpage();
});
2022-11-10 14:27:26 +01:00
};