Update src/libpoketube/init/pages-channel-and-download.js

This commit is contained in:
ashley 2024-07-15 20:09:54 +00:00
parent e01174182c
commit 7767c69ad1

View file

@ -230,52 +230,46 @@ module.exports = function (app, config, renderTemplate) {
? `&continuation=${req.query.continuations}` ? `&continuation=${req.query.continuations}`
: ""; : "";
const sort_by = req.query.sort_by || "newest"; const sort_by = req.query.sort_by || "newest";
const getChannelData = async (url) => { const getChannelData = async (url) => {
try { try {
return await fetch(url) return await fetch(url)
.then((res) => res.text()) .then((res) => res.text())
.then((txt) => getJson(txt)); .then((txt) => getJson(txt));
} catch (error) { } catch (error) {
return null; return null;
} }
}; };
const apiUrl = config.invapi + "/channels/"; const apiUrl = config.invapi + "/channels/";
const channelINVUrl = `${apiUrl}${ID}/`; const channelUrl = `${apiUrl}${atob(
const checkPronoun = async (id) => (await (await fetch('https://raw.githubusercontent.com/ashley0143/poke/main/pronounsdb.json')).json())[id] || `no pronouns set`; ChannelTabs.videos
const pronoun = await checkPronoun(ID); )}/${ID}/?sort_by=${sort_by}${continuation}`;
const shortsUrl = `${apiUrl}${ID}/${atob(
ChannelTabs.shorts
)}?sort_by=${sort_by}${continuations}`;
const streamUrl = `${apiUrl}${ID}/${atob(
ChannelTabs.streams
)}?sort_by=${sort_by}${continuationl}`;
const communityUrl = `${apiUrl}${atob(
ChannelTabs.community
)}/${ID}/?hl=en-US`;
const PlaylistUrl = `${apiUrl}${atob(
ChannelTabs.playlist
)}/${ID}/?hl=en-US`;
const channelINVData = await getChannelData(channelINVUrl); const channelINVUrl = `${apiUrl}${ID}/`;
const cinv = await getChannelData(channelINVUrl);
const pronoun = "no pronouns :c"
if (!channelINVData) {
throw new Error('Failed to fetch channel INV data');
}
const ChannelTabs = channelINVData.tabs;
const channelUrl = ChannelTabs.videos ? `${apiUrl}${atob(ChannelTabs.videos)}/${ID}/?sort_by=${sort_by}${continuation}` : null;
const shortsUrl = ChannelTabs.shorts ? `${apiUrl}${ID}/${atob(ChannelTabs.shorts)}?sort_by=${sort_by}${continuations}` : null;
const streamUrl = ChannelTabs.streams ? `${apiUrl}${ID}/${atob(ChannelTabs.streams)}?sort_by=${sort_by}${continuationl}` : null;
const communityUrl = ChannelTabs.community ? `${apiUrl}${atob(ChannelTabs.community)}/${ID}/?hl=en-US` : null;
const PlaylistUrl = ChannelTabs.playlist ? `${apiUrl}${atob(ChannelTabs.playlist)}/${ID}/?hl=en-US` : null;
const fetchData = async (url) => {
return url ? getChannelData(url) : "";
};
var [tj, shorts, playlist, stream, c] = await Promise.all([
fetchData(channelUrl),
fetchData(shortsUrl),
fetchData(PlaylistUrl),
fetchData(streamUrl),
fetchData(communityUrl)
]);
var [tj, shorts, playlist, stream, c, cinv] = await Promise.all([
getChannelData(channelUrl),
getChannelData(shortsUrl),
getChannelData(PlaylistUrl),
getChannelData(streamUrl),
getChannelData(communityUrl),
getChannelData(channelINVUrl),
]);
function getThumbnailUrl(video) { function getThumbnailUrl(video) {
const maxresDefaultThumbnail = video.videoThumbnails.find( const maxresDefaultThumbnail = video.videoThumbnails.find(
@ -317,23 +311,21 @@ var [tj, shorts, playlist, stream, c] = await Promise.all([
if (tj) {
if (continuation) { if (continuation) {
const currentAuthorId = String(cinv.authorId).trim(); const currentAuthorId = String(cinv.authorId).trim();
const firstVideoAuthorId = String(tj.videos[0].authorId).trim(); const firstVideoAuthorId = String(tj.videos[0].authorId).trim();
if (currentAuthorId.localeCompare(firstVideoAuthorId) !== 0) { if (currentAuthorId.localeCompare(firstVideoAuthorId) !== 0) {
res.status(400).send("Continuation does not match the channel :c"); res.status(400).send("Continuation does not match the channel :c");
return; // Exit the function after sending the response }
} }
}
var ChannelFirstVideoObject = await fetch( const ChannelFirstVideoObject = await fetch(
`${config.invapi}/videos/${tj.videos[0].videoId}` `${config.invapi}/videos/${tj.videos[0].videoId}`
) )
.then((res) => res.text()) .then((res) => res.text())
.then((txt) => getJson(txt)); .then((txt) => getJson(txt));
}
renderTemplate(res, req, "channel.ejs", { renderTemplate(res, req, "channel.ejs", {
ID, ID,