110 lines
3.0 KiB
Plaintext
110 lines
3.0 KiB
Plaintext
|
|
// const fetch = require('node-fetch')
|
|
|
|
// // greets chatgpt
|
|
// async function getFileDetailsFromUrl(url) {
|
|
// const controller = new AbortController();
|
|
// const signal = controller.signal;
|
|
|
|
// const options = {
|
|
// signal,
|
|
// };
|
|
|
|
// let retries = 10;
|
|
|
|
// while (retries) {
|
|
// console.log(`fetching ${url}`);
|
|
// const timeoutId = setTimeout(() => {
|
|
// console.log('fetch timed out, aborting...');
|
|
// controller.abort();
|
|
// }, 5000);
|
|
|
|
// try {
|
|
// const res = await fetch(url, options);
|
|
|
|
// clearTimeout(timeoutId);
|
|
|
|
// console.log('finished fetch');
|
|
// if (!res.ok) throw new Error(`problem while getting file from url with url ${url}`);
|
|
// if (!res?.headers?.get('x-bz-file-name')) throw new Error(`${url} did not have a x-bz-file-name in the response headers`);
|
|
// if (!res?.headers?.get('x-bz-file-id')) throw new Error(`${url} did not have a x-bz-file-id in the response headers`);
|
|
|
|
// return {
|
|
// key: res.headers.get('x-bz-file-name'),
|
|
// url: url,
|
|
// uploadId: res.headers.get('x-bz-file-id'),
|
|
// };
|
|
// } catch (err) {
|
|
// clearTimeout(timeoutId);
|
|
// retries--;
|
|
|
|
// if (retries === 0) {
|
|
// console.error(`Could not fetch file details from URL: ${url}.`);
|
|
// throw err;
|
|
// }
|
|
|
|
// console.warn(`Retrying fetch (${retries} attempts left)`);
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
async up(knex) {
|
|
// You have full access to the Knex.js API with an already initialized connection to the database
|
|
|
|
|
|
// we iterate through the local, non-strapi backup db first.
|
|
// get list of all tags
|
|
// for each tag
|
|
// * get list of related vods
|
|
// * create relation in Strapi
|
|
// *
|
|
|
|
|
|
|
|
// Get all VODs from the database
|
|
const vods = await knex.select('*').from('vods');
|
|
|
|
|
|
// Process each VOD
|
|
for (const vod of vods) {
|
|
|
|
// courtesy timer
|
|
await new Promise((resolve) => setTimeout(resolve, 10))
|
|
|
|
// @todo
|
|
|
|
console.log(vod)
|
|
// Get the file details from the VOD's video source URL
|
|
if (vod?.video_src) {
|
|
try {
|
|
const fileDetails = await getFileDetailsFromUrl(vod.video_src);
|
|
|
|
// Insert the B2 file into the database
|
|
const [file] = await knex('b2_files').insert({
|
|
url: fileDetails.url,
|
|
key: fileDetails.key,
|
|
upload_id: fileDetails.uploadId,
|
|
}).returning('id');
|
|
|
|
console.log(file)
|
|
console.log(`attempting to insert vod_id:${vod.id}, b_2_file_id:${file.id} for videoSrcB2`)
|
|
|
|
// Link the B2 file to the VOD
|
|
await knex('vods_video_src_b_2_links').insert({
|
|
vod_id: vod.id,
|
|
b_2_file_id: file.id,
|
|
});
|
|
} catch (e) {
|
|
console.error(e)
|
|
console.log(`there was an error so we are skipping vod ${vod.id}`)
|
|
}
|
|
} else {
|
|
console.log(`${vod.id} has no video_src. skipping.`)
|
|
}
|
|
}
|
|
},
|
|
}; |