Started working on pushing multiple raw links to user.
This commit is contained in:
parent
349a6b82aa
commit
e0832c2c1f
|
|
@ -26,9 +26,9 @@ class media{
|
||||||
* @param {String} id - Video ID from source (IE: youtube watch code/archive.org file path)
|
* @param {String} id - Video ID from source (IE: youtube watch code/archive.org file path)
|
||||||
* @param {String} type - Original video source
|
* @param {String} type - Original video source
|
||||||
* @param {Number} duration - Length of media in seconds
|
* @param {Number} duration - Length of media in seconds
|
||||||
* @param {String} rawLink - URL to raw file copy of media, not applicable to all sources
|
* @param {String} rawLink - URLs to raw file copies of media, not applicable to all sources, not saved to the DB
|
||||||
*/
|
*/
|
||||||
constructor(title, fileName, url, id, type, duration, rawLink = url){
|
constructor(title, fileName, url, id, type, duration, rawLink){
|
||||||
/**
|
/**
|
||||||
* Chosen title of media
|
* Chosen title of media
|
||||||
*/
|
*/
|
||||||
|
|
@ -59,11 +59,19 @@ class media{
|
||||||
*/
|
*/
|
||||||
this.duration = duration;
|
this.duration = duration;
|
||||||
|
|
||||||
|
if(rawLink == null){
|
||||||
/**
|
/**
|
||||||
* URL to raw file copy of media, not applicable to all sources
|
* URL to raw file copy of media, not applicable to all sources
|
||||||
*/
|
*/
|
||||||
|
this.rawLink = {
|
||||||
|
audio: [],
|
||||||
|
video: [],
|
||||||
|
combo: [['default',url]]
|
||||||
|
};
|
||||||
|
}else{
|
||||||
this.rawLink = rawLink;
|
this.rawLink = rawLink;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = media;
|
module.exports = media;
|
||||||
|
|
@ -67,6 +67,8 @@ module.exports.yankMedia = async function(url, title){
|
||||||
module.exports.refreshRawLink = async function(mediaObj){
|
module.exports.refreshRawLink = async function(mediaObj){
|
||||||
switch(mediaObj.type){
|
switch(mediaObj.type){
|
||||||
case 'yt':
|
case 'yt':
|
||||||
|
console.log("lolnope");
|
||||||
|
/* We're skipping this one for now...
|
||||||
//Scrape expiration from query strings
|
//Scrape expiration from query strings
|
||||||
const expires = mediaObj.rawLink.match(/expire=([0-9]+)/);
|
const expires = mediaObj.rawLink.match(/expire=([0-9]+)/);
|
||||||
//Went with regex for speed, but I figure I'd keep this around in case we want the accuracy of a battle-tested implementation
|
//Went with regex for speed, but I figure I'd keep this around in case we want the accuracy of a battle-tested implementation
|
||||||
|
|
@ -85,6 +87,7 @@ module.exports.refreshRawLink = async function(mediaObj){
|
||||||
|
|
||||||
//return media object
|
//return media object
|
||||||
return mediaObj;
|
return mediaObj;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
//Return null to tell the calling function there is no refresh required for this media type
|
//Return null to tell the calling function there is no refresh required for this media type
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ module.exports.fetchDailymotionMetadata = async function(id, title){
|
||||||
* @param {String} type - Link type to attach to the resulting media object
|
* @param {String} type - Link type to attach to the resulting media object
|
||||||
* @returns {Array} Array of Media objects containing relevant metadata
|
* @returns {Array} Array of Media objects containing relevant metadata
|
||||||
*/
|
*/
|
||||||
async function fetchVideoMetadata(link, title, type, format = 'b'){
|
async function fetchVideoMetadata(link, title, type, format = 'ba,bv'){
|
||||||
//Create media list
|
//Create media list
|
||||||
const mediaList = [];
|
const mediaList = [];
|
||||||
|
|
||||||
|
|
@ -109,16 +109,40 @@ async function fetchVideoMetadata(link, title, type, format = 'b'){
|
||||||
|
|
||||||
//Pull data from rawMetadata, sanatizing title to prevent XSS
|
//Pull data from rawMetadata, sanatizing title to prevent XSS
|
||||||
const name = validator.escape(validator.trim(rawMetadata.title));
|
const name = validator.escape(validator.trim(rawMetadata.title));
|
||||||
const rawLink = rawMetadata.requested_downloads[0].url;
|
|
||||||
|
//Create new raw link object (should we make a class? Probably over kill for a fucking method-less hashtable)
|
||||||
|
const rawLinks = {
|
||||||
|
audio: [],
|
||||||
|
video: [],
|
||||||
|
combo: []
|
||||||
|
}
|
||||||
|
|
||||||
|
//for each item
|
||||||
|
for(const link of rawMetadata.requested_downloads){
|
||||||
|
//if there isn't video included
|
||||||
|
if(link.vcodec == 'none'){
|
||||||
|
//Add the link under the format within the audio map
|
||||||
|
rawLinks.audio.push([link.format_note, link.url]);
|
||||||
|
//if there isn't audio included
|
||||||
|
}else if(link.acodec == 'none'){
|
||||||
|
//Add the link under the format within the video map
|
||||||
|
rawLinks.video.push([link.format_note, link.url]);
|
||||||
|
//otherwise, it includes audio and video
|
||||||
|
}else{
|
||||||
|
//Add the link under the format within the combo map
|
||||||
|
rawLinks.combo.push([link.format_note, link.url]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const id = rawMetadata.id;
|
const id = rawMetadata.id;
|
||||||
|
|
||||||
//if we where handed a null title
|
//if we where handed a null title
|
||||||
if(title == null || title == ''){
|
if(title == null || title == ''){
|
||||||
//Create new media object from file info substituting filename for title
|
//Create new media object from file info substituting filename for title
|
||||||
mediaList.push(new media(name, name, link, id, type, Number(rawMetadata.duration), rawLink));
|
mediaList.push(new media(name, name, link, id, type, Number(rawMetadata.duration), rawLinks));
|
||||||
}else{
|
}else{
|
||||||
//Create new media object from file info
|
//Create new media object from file info
|
||||||
mediaList.push(new media(title, name, link, id, type, Number(rawMetadata.duration), rawLink));
|
mediaList.push(new media(title, name, link, id, type, Number(rawMetadata.duration), rawLinks));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Return list of media
|
//Return list of media
|
||||||
|
|
@ -136,10 +160,10 @@ async function fetchVideoMetadata(link, title, type, format = 'b'){
|
||||||
* @param {String} format - Format string to hand YT-DLP, defaults to 'b'
|
* @param {String} format - Format string to hand YT-DLP, defaults to 'b'
|
||||||
* @returns {Object} Metadata dump from YT-DLP
|
* @returns {Object} Metadata dump from YT-DLP
|
||||||
*/
|
*/
|
||||||
async function ytdlpFetch(link, format = 'b'){
|
async function ytdlpFetch(link, format = 'ba,ogg'){
|
||||||
//return promise from ytdlp
|
//return promise from ytdlp
|
||||||
return ytdlp(link, {
|
return ytdlp(link, {
|
||||||
|
format,
|
||||||
dumpSingleJson: true,
|
dumpSingleJson: true,
|
||||||
format
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue