Deleting a file will now delete its downloaded thumbnail as well

Thumbnails will now have their permissions auto updated to align themselves with the other downloaded files
pull/153/head^2
Isaac Grynsztein 5 years ago
parent efdc471ccf
commit 5537852134

@ -884,11 +884,14 @@ async function deleteAudioFile(name, blacklistMode = false) {
var jsonPath = path.join(audioFolderPath,name+'.mp3.info.json'); var jsonPath = path.join(audioFolderPath,name+'.mp3.info.json');
var altJSONPath = path.join(audioFolderPath,name+'.info.json'); var altJSONPath = path.join(audioFolderPath,name+'.info.json');
var audioFilePath = path.join(audioFolderPath,name+'.mp3'); var audioFilePath = path.join(audioFolderPath,name+'.mp3');
var thumbnailPath = path.join(filePath,name+'.webp');
var altThumbnailPath = path.join(filePath,name+'.jpg');
jsonPath = path.join(__dirname, jsonPath); jsonPath = path.join(__dirname, jsonPath);
altJSONPath = path.join(__dirname, altJSONPath); altJSONPath = path.join(__dirname, altJSONPath);
audioFilePath = path.join(__dirname, audioFilePath); audioFilePath = path.join(__dirname, audioFilePath);
let jsonExists = fs.existsSync(jsonPath); let jsonExists = fs.existsSync(jsonPath);
let thumbnailExists = fs.existsSync(thumbnailPath);
if (!jsonExists) { if (!jsonExists) {
if (fs.existsSync(altJSONPath)) { if (fs.existsSync(altJSONPath)) {
@ -897,6 +900,13 @@ async function deleteAudioFile(name, blacklistMode = false) {
} }
} }
if (!thumbnailExists) {
if (fs.existsSync(altThumbnailPath)) {
thumbnailExists = true;
thumbnailPath = altThumbnailPath;
}
}
let audioFileExists = fs.existsSync(audioFilePath); let audioFileExists = fs.existsSync(audioFilePath);
if (config_api.descriptors[name]) { if (config_api.descriptors[name]) {
@ -930,6 +940,7 @@ async function deleteAudioFile(name, blacklistMode = false) {
} }
if (jsonExists) fs.unlinkSync(jsonPath); if (jsonExists) fs.unlinkSync(jsonPath);
if (thumbnailExists) fs.unlinkSync(thumbnailPath);
if (audioFileExists) { if (audioFileExists) {
fs.unlink(audioFilePath, function(err) { fs.unlink(audioFilePath, function(err) {
if (fs.existsSync(jsonPath) || fs.existsSync(audioFilePath)) { if (fs.existsSync(jsonPath) || fs.existsSync(audioFilePath)) {
@ -950,12 +961,30 @@ async function deleteVideoFile(name, customPath = null, blacklistMode = false) {
return new Promise(resolve => { return new Promise(resolve => {
let filePath = customPath ? customPath : videoFolderPath; let filePath = customPath ? customPath : videoFolderPath;
var jsonPath = path.join(filePath,name+'.info.json'); var jsonPath = path.join(filePath,name+'.info.json');
var altJSONPath = path.join(filePath,name+'.mp4.info.json');
var videoFilePath = path.join(filePath,name+'.mp4'); var videoFilePath = path.join(filePath,name+'.mp4');
var thumbnailPath = path.join(filePath,name+'.webp');
var altThumbnailPath = path.join(filePath,name+'.jpg');
jsonPath = path.join(__dirname, jsonPath); jsonPath = path.join(__dirname, jsonPath);
videoFilePath = path.join(__dirname, videoFilePath); videoFilePath = path.join(__dirname, videoFilePath);
jsonExists = fs.existsSync(jsonPath); let jsonExists = fs.existsSync(jsonPath);
videoFileExists = fs.existsSync(videoFilePath); let videoFileExists = fs.existsSync(videoFilePath);
let thumbnailExists = fs.existsSync(thumbnailPath);
if (!jsonExists) {
if (fs.existsSync(altJSONPath)) {
jsonExists = true;
jsonPath = altJSONPath;
}
}
if (!thumbnailExists) {
if (fs.existsSync(altThumbnailPath)) {
thumbnailExists = true;
thumbnailPath = altThumbnailPath;
}
}
if (config_api.descriptors[name]) { if (config_api.descriptors[name]) {
try { try {
@ -988,6 +1017,7 @@ async function deleteVideoFile(name, customPath = null, blacklistMode = false) {
} }
if (jsonExists) fs.unlinkSync(jsonPath); if (jsonExists) fs.unlinkSync(jsonPath);
if (thumbnailExists) fs.unlinkSync(thumbnailPath);
if (videoFileExists) { if (videoFileExists) {
fs.unlink(videoFilePath, function(err) { fs.unlink(videoFilePath, function(err) {
if (fs.existsSync(jsonPath) || fs.existsSync(videoFilePath)) { if (fs.existsSync(jsonPath) || fs.existsSync(videoFilePath)) {

@ -23,6 +23,8 @@ function registerFileDB(file_path, type, multiUserMode = null, sub = null) {
return false; return false;
} }
utils.fixVideoMetadataPerms(file_id, type, multiUserMode && multiUserMode.file_path);
// add additional info // add additional info
file_object['uid'] = uuid(); file_object['uid'] = uuid();
file_object['registered'] = Date.now(); file_object['registered'] = Date.now();

@ -195,10 +195,12 @@ async function deleteSubscriptionFile(sub, file, deleteForever, file_uid = null,
var jsonPath = path.join(__dirname,filePath,name+'.info.json'); var jsonPath = path.join(__dirname,filePath,name+'.info.json');
var videoFilePath = path.join(__dirname,filePath,name+ext); var videoFilePath = path.join(__dirname,filePath,name+ext);
var imageFilePath = path.join(__dirname,filePath,name+'.jpg'); var imageFilePath = path.join(__dirname,filePath,name+'.jpg');
var altImageFilePath = path.join(__dirname,filePath,name+'.jpg');
jsonExists = fs.existsSync(jsonPath); jsonExists = fs.existsSync(jsonPath);
videoFileExists = fs.existsSync(videoFilePath); videoFileExists = fs.existsSync(videoFilePath);
imageFileExists = fs.existsSync(imageFilePath); imageFileExists = fs.existsSync(imageFilePath);
altImageFileExists = fs.existsSync(altImageFilePath);
if (jsonExists) { if (jsonExists) {
retrievedID = JSON.parse(fs.readFileSync(jsonPath, 'utf8'))['id']; retrievedID = JSON.parse(fs.readFileSync(jsonPath, 'utf8'))['id'];
@ -209,6 +211,10 @@ async function deleteSubscriptionFile(sub, file, deleteForever, file_uid = null,
fs.unlinkSync(imageFilePath); fs.unlinkSync(imageFilePath);
} }
if (altImageFileExists) {
fs.unlinkSync(altImageFilePath);
}
if (videoFileExists) { if (videoFileExists) {
fs.unlink(videoFilePath, function(err) { fs.unlink(videoFilePath, function(err) {
if (fs.existsSync(jsonPath) || fs.existsSync(videoFilePath)) { if (fs.existsSync(jsonPath) || fs.existsSync(videoFilePath)) {

@ -27,10 +27,8 @@ function getJSONMp4(name, customPath, openReadPerms = false) {
if (fs.existsSync(jsonPath)) if (fs.existsSync(jsonPath))
{ {
obj = JSON.parse(fs.readFileSync(jsonPath, 'utf8')); obj = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
if (openReadPerms) fs.chmodSync(jsonPath, 0o644);
} else if (fs.existsSync(alternateJsonPath)) { } else if (fs.existsSync(alternateJsonPath)) {
obj = JSON.parse(fs.readFileSync(alternateJsonPath, 'utf8')); obj = JSON.parse(fs.readFileSync(alternateJsonPath, 'utf8'));
if (openReadPerms) fs.chmodSync(alternateJsonPath, 0o644);
} }
else obj = 0; else obj = 0;
return obj; return obj;
@ -43,11 +41,9 @@ function getJSONMp3(name, customPath, openReadPerms = false) {
var alternateJsonPath = path.join(customPath, name + ".mp3.info.json"); var alternateJsonPath = path.join(customPath, name + ".mp3.info.json");
if (fs.existsSync(jsonPath)) { if (fs.existsSync(jsonPath)) {
obj = JSON.parse(fs.readFileSync(jsonPath, 'utf8')); obj = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
if (!is_windows && openReadPerms) fs.chmodSync(jsonPath, 0o755);
} }
else if (fs.existsSync(alternateJsonPath)) { else if (fs.existsSync(alternateJsonPath)) {
obj = JSON.parse(fs.readFileSync(alternateJsonPath, 'utf8')); obj = JSON.parse(fs.readFileSync(alternateJsonPath, 'utf8'));
if (!is_windows && openReadPerms) fs.chmodSync(alternateJsonPath, 0o755);
} }
else else
obj = 0; obj = 0;
@ -55,6 +51,28 @@ function getJSONMp3(name, customPath, openReadPerms = false) {
return obj; return obj;
} }
function fixVideoMetadataPerms(name, type, customPath = null) {
if (is_windows) return;
if (!customPath) customPath = type === 'audio' ? config_api.getConfigItem('ytdl_audio_folder_path')
: config_api.getConfigItem('ytdl_video_folder_path');
const ext = type === 'audio' ? '.mp3' : '.mp4';
const files_to_fix = [
// JSONs
path.join(customPath, name + '.info.json'),
path.join(customPath, name + ext + '.info.json'),
// Thumbnails
path.join(customPath, name + '.webp'),
path.join(customPath, name + '.jpg')
];
for (const file of files_to_fix) {
if (!fs.existsSync(file)) continue;
fs.chmodSync(file, 0o644);
}
}
// objects // objects
function File(id, title, thumbnailURL, isAudio, duration, url, uploader, size, path, upload_date) { function File(id, title, thumbnailURL, isAudio, duration, url, uploader, size, path, upload_date) {
@ -74,5 +92,6 @@ module.exports = {
getJSONMp3: getJSONMp3, getJSONMp3: getJSONMp3,
getJSONMp4: getJSONMp4, getJSONMp4: getJSONMp4,
getTrueFileName: getTrueFileName, getTrueFileName: getTrueFileName,
fixVideoMetadataPerms: fixVideoMetadataPerms,
File: File File: File
} }

Loading…
Cancel
Save