mirror of
https://github.com/Tzahi12345/YoutubeDL-Material.git
synced 2026-04-16 21:01:29 +03:00
Fixed bug where unsubscribing from a channel would clear the entire files table
Fixed issue where yt-dlp did not work with subscriptions
This commit is contained in:
@@ -29,8 +29,7 @@ const read_last_lines = require('read-last-lines');
|
|||||||
var ps = require('ps-node');
|
var ps = require('ps-node');
|
||||||
|
|
||||||
// needed if bin/details somehow gets deleted
|
// needed if bin/details somehow gets deleted
|
||||||
const DETAILS_BIN_PATH = 'node_modules/youtube-dl/bin/details'
|
if (!fs.existsSync(CONSTS.DETAILS_BIN_PATH)) fs.writeJSONSync(CONSTS.DETAILS_BIN_PATH, {"version":"2000.06.06","path":"node_modules\\youtube-dl\\bin\\youtube-dl.exe","exec":"youtube-dl.exe","downloader":"youtube-dl"})
|
||||||
if (!fs.existsSync(DETAILS_BIN_PATH)) fs.writeJSONSync(DETAILS_BIN_PATH, {"version":"2000.06.06","path":"node_modules\\youtube-dl\\bin\\youtube-dl.exe","exec":"youtube-dl.exe","downloader":"youtube-dl"})
|
|
||||||
|
|
||||||
var youtubedl = require('youtube-dl');
|
var youtubedl = require('youtube-dl');
|
||||||
|
|
||||||
@@ -1180,7 +1179,7 @@ async function generateArgs(url, type, options) {
|
|||||||
downloadConfig = downloadConfig.concat(globalArgs.split(',,'));
|
downloadConfig = downloadConfig.concat(globalArgs.split(',,'));
|
||||||
}
|
}
|
||||||
|
|
||||||
const default_downloader = getCurrentDownloader() || config_api.getConfigItem('ytdl_default_downloader');
|
const default_downloader = utils.getCurrentDownloader() || config_api.getConfigItem('ytdl_default_downloader');
|
||||||
if (default_downloader === 'yt-dlp') {
|
if (default_downloader === 'yt-dlp') {
|
||||||
downloadConfig.push('--no-clean-infojson');
|
downloadConfig.push('--no-clean-infojson');
|
||||||
}
|
}
|
||||||
@@ -1361,17 +1360,17 @@ async function autoUpdateYoutubeDL() {
|
|||||||
const default_downloader = config_api.getConfigItem('ytdl_default_downloader');
|
const default_downloader = config_api.getConfigItem('ytdl_default_downloader');
|
||||||
const tags_url = download_sources[default_downloader]['tags_url'];
|
const tags_url = download_sources[default_downloader]['tags_url'];
|
||||||
// get current version
|
// get current version
|
||||||
let current_app_details_exists = fs.existsSync(DETAILS_BIN_PATH);
|
let current_app_details_exists = fs.existsSync(CONSTS.DETAILS_BIN_PATH);
|
||||||
if (!current_app_details_exists) {
|
if (!current_app_details_exists) {
|
||||||
logger.warn(`Failed to get youtube-dl binary details at location '${DETAILS_BIN_PATH}'. Generating file...`);
|
logger.warn(`Failed to get youtube-dl binary details at location '${CONSTS.DETAILS_BIN_PATH}'. Generating file...`);
|
||||||
fs.writeJSONSync(DETAILS_BIN_PATH, {"version":"2020.00.00", "downloader": default_downloader});
|
fs.writeJSONSync(CONSTS.DETAILS_BIN_PATH, {"version":"2020.00.00", "downloader": default_downloader});
|
||||||
}
|
}
|
||||||
let current_app_details = JSON.parse(fs.readFileSync(DETAILS_BIN_PATH));
|
let current_app_details = JSON.parse(fs.readFileSync(CONSTS.DETAILS_BIN_PATH));
|
||||||
let current_version = current_app_details['version'];
|
let current_version = current_app_details['version'];
|
||||||
let current_downloader = current_app_details['downloader'];
|
let current_downloader = current_app_details['downloader'];
|
||||||
let stored_binary_path = current_app_details['path'];
|
let stored_binary_path = current_app_details['path'];
|
||||||
if (!stored_binary_path || typeof stored_binary_path !== 'string') {
|
if (!stored_binary_path || typeof stored_binary_path !== 'string') {
|
||||||
// logger.info(`INFO: Failed to get youtube-dl binary path at location: ${DETAILS_BIN_PATH}, attempting to guess actual path...`);
|
// logger.info(`INFO: Failed to get youtube-dl binary path at location: ${CONSTS.DETAILS_BIN_PATH}, attempting to guess actual path...`);
|
||||||
const guessed_base_path = 'node_modules/youtube-dl/bin/';
|
const guessed_base_path = 'node_modules/youtube-dl/bin/';
|
||||||
const guessed_file_path = guessed_base_path + 'youtube-dl' + (is_windows ? '.exe' : '');
|
const guessed_file_path = guessed_base_path + 'youtube-dl' + (is_windows ? '.exe' : '');
|
||||||
if (fs.existsSync(guessed_file_path)) {
|
if (fs.existsSync(guessed_file_path)) {
|
||||||
@@ -1454,15 +1453,10 @@ async function downloadLatestYoutubeDLPBinary(new_version) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateDetailsJSON(new_version, downloader) {
|
function updateDetailsJSON(new_version, downloader) {
|
||||||
const details_json = fs.readJSONSync(DETAILS_BIN_PATH);
|
const details_json = fs.readJSONSync(CONSTS.DETAILS_BIN_PATH);
|
||||||
if (new_version) details_json['version'] = new_version;
|
if (new_version) details_json['version'] = new_version;
|
||||||
details_json['downloader'] = downloader;
|
details_json['downloader'] = downloader;
|
||||||
fs.writeJSONSync(DETAILS_BIN_PATH, details_json);
|
fs.writeJSONSync(CONSTS.DETAILS_BIN_PATH, details_json);
|
||||||
}
|
|
||||||
|
|
||||||
function getCurrentDownloader() {
|
|
||||||
const details_json = fs.readJSONSync(DETAILS_BIN_PATH);
|
|
||||||
return details_json['downloader'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function checkExistsWithTimeout(filePath, timeout) {
|
async function checkExistsWithTimeout(filePath, timeout) {
|
||||||
|
|||||||
@@ -207,8 +207,11 @@ AVAILABLE_PERMISSIONS = [
|
|||||||
'downloads_manager'
|
'downloads_manager'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const DETAILS_BIN_PATH = 'node_modules/youtube-dl/bin/details'
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
CONFIG_ITEMS: CONFIG_ITEMS,
|
CONFIG_ITEMS: CONFIG_ITEMS,
|
||||||
AVAILABLE_PERMISSIONS: AVAILABLE_PERMISSIONS,
|
AVAILABLE_PERMISSIONS: AVAILABLE_PERMISSIONS,
|
||||||
CURRENT_VERSION: 'v4.2'
|
CURRENT_VERSION: 'v4.2',
|
||||||
|
DETAILS_BIN_PATH: DETAILS_BIN_PATH
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -256,6 +256,9 @@ function generateFileObject2(file_path, type) {
|
|||||||
var jsonobj = utils.getJSON(file_path, type);
|
var jsonobj = utils.getJSON(file_path, type);
|
||||||
if (!jsonobj) {
|
if (!jsonobj) {
|
||||||
return null;
|
return null;
|
||||||
|
} else if (!jsonobj['_filename']) {
|
||||||
|
logger.error(`Failed to get filename from info JSON! File ${jsonobj['title']} could not be added.`);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
const ext = (type === 'audio') ? '.mp3' : '.mp4'
|
const ext = (type === 'audio') ? '.mp3' : '.mp4'
|
||||||
const true_file_path = utils.getTrueFileName(jsonobj['_filename'], type);
|
const true_file_path = utils.getTrueFileName(jsonobj['_filename'], type);
|
||||||
@@ -781,26 +784,26 @@ exports.removeRecord = async (table, filter_obj) => {
|
|||||||
return !!(output['result']['ok']);
|
return !!(output['result']['ok']);
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.removeAllRecords = async (table = null) => {
|
exports.removeAllRecords = async (table = null, filter_obj = null) => {
|
||||||
// local db override
|
// local db override
|
||||||
const tables_to_remove = table ? [table] : tables_list;
|
const tables_to_remove = table ? [table] : tables_list;
|
||||||
|
logger.debug(`Removing all records from: ${tables_to_remove} with filter: ${JSON.stringify(filter_obj)}`)
|
||||||
if (using_local_db) {
|
if (using_local_db) {
|
||||||
logger.debug(`Removing all records from: ${tables_to_remove}`)
|
|
||||||
for (let i = 0; i < tables_to_remove.length; i++) {
|
for (let i = 0; i < tables_to_remove.length; i++) {
|
||||||
const table_to_remove = tables_to_remove[i];
|
const table_to_remove = tables_to_remove[i];
|
||||||
local_db.assign({[table_to_remove]: []}).write();
|
if (filter_obj) applyFilterLocalDB(local_db.get(table), filter_obj, 'remove').write();
|
||||||
logger.debug(`Removed all records from ${table_to_remove}`);
|
else local_db.assign({[table_to_remove]: []}).write();
|
||||||
|
logger.debug(`Successfully removed records from ${table_to_remove}`);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
let success = true;
|
let success = true;
|
||||||
logger.debug(`Removing all records from: ${tables_to_remove}`)
|
|
||||||
for (let i = 0; i < tables_to_remove.length; i++) {
|
for (let i = 0; i < tables_to_remove.length; i++) {
|
||||||
const table_to_remove = tables_to_remove[i];
|
const table_to_remove = tables_to_remove[i];
|
||||||
|
|
||||||
const output = await database.collection(table_to_remove).deleteMany({});
|
const output = await database.collection(table_to_remove).deleteMany(filter_obj ? filter_obj : {});
|
||||||
logger.debug(`Removed all records from ${table_to_remove}`);
|
logger.debug(`Successfully removed records from ${table_to_remove}`);
|
||||||
success &= !!(output['result']['ok']);
|
success &= !!(output['result']['ok']);
|
||||||
}
|
}
|
||||||
return success;
|
return success;
|
||||||
@@ -988,6 +991,8 @@ exports.transferDB = async (local_to_remote) => {
|
|||||||
|
|
||||||
config_api.setConfigItem('ytdl_use_local_db', using_local_db);
|
config_api.setConfigItem('ytdl_use_local_db', using_local_db);
|
||||||
|
|
||||||
|
logger.debug('Transfer finished!');
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -413,6 +413,11 @@ async function generateArgsForSubscription(sub, user_uid, redownload = false, de
|
|||||||
downloadConfig.push('--write-thumbnail');
|
downloadConfig.push('--write-thumbnail');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const default_downloader = utils.getCurrentDownloader() || config_api.getConfigItem('ytdl_default_downloader');
|
||||||
|
if (default_downloader === 'yt-dlp') {
|
||||||
|
downloadConfig.push('--no-clean-infojson');
|
||||||
|
}
|
||||||
|
|
||||||
return downloadConfig;
|
return downloadConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
const fs = require('fs-extra')
|
const fs = require('fs-extra')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const config_api = require('./config');
|
const config_api = require('./config');
|
||||||
|
const CONSTS = require('./consts')
|
||||||
const archiver = require('archiver');
|
const archiver = require('archiver');
|
||||||
|
|
||||||
const is_windows = process.platform === 'win32';
|
const is_windows = process.platform === 'win32';
|
||||||
@@ -315,6 +316,11 @@ function addUIDsToCategory(category, files) {
|
|||||||
return files_that_match;
|
return files_that_match;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getCurrentDownloader() {
|
||||||
|
const details_json = fs.readJSONSync(CONSTS.DETAILS_BIN_PATH);
|
||||||
|
return details_json['downloader'];
|
||||||
|
}
|
||||||
|
|
||||||
async function recFindByExt(base,ext,files,result)
|
async function recFindByExt(base,ext,files,result)
|
||||||
{
|
{
|
||||||
files = files || (await fs.readdir(base))
|
files = files || (await fs.readdir(base))
|
||||||
@@ -390,6 +396,7 @@ module.exports = {
|
|||||||
durationStringToNumber: durationStringToNumber,
|
durationStringToNumber: durationStringToNumber,
|
||||||
getMatchingCategoryFiles: getMatchingCategoryFiles,
|
getMatchingCategoryFiles: getMatchingCategoryFiles,
|
||||||
addUIDsToCategory: addUIDsToCategory,
|
addUIDsToCategory: addUIDsToCategory,
|
||||||
|
getCurrentDownloader: getCurrentDownloader,
|
||||||
recFindByExt: recFindByExt,
|
recFindByExt: recFindByExt,
|
||||||
removeFileExtension: removeFileExtension,
|
removeFileExtension: removeFileExtension,
|
||||||
wait: wait,
|
wait: wait,
|
||||||
|
|||||||
Reference in New Issue
Block a user