Write metadata in front + pass it along (useful if the song is changed)

This commit is contained in:
TC
2021-04-03 12:04:49 +02:00
parent d5a2c1cad6
commit 1e59301c0e
3 changed files with 26 additions and 41 deletions

View File

@ -1,8 +1,6 @@
const { writeFileSync } = require("fs");
const { join } = require("path"); const { join } = require("path");
const ID3Writer = require("browser-id3-writer"); const { dialog } = require("electron");
const { dialog, ipcMain } = require("electron");
const getSongInfo = require("../../providers/song-info"); const getSongInfo = require("../../providers/song-info");
const { injectCSS, listenAction } = require("../utils"); const { injectCSS, listenAction } = require("../utils");
@ -40,35 +38,6 @@ function handle(win) {
console.log("Unknown action: " + action); console.log("Unknown action: " + action);
} }
}); });
ipcMain.on("add-metadata", (event, filePath, songBuffer) => {
let fileBuffer = songBuffer;
try {
const writer = new ID3Writer(songBuffer);
if (metadata.image) {
const coverBuffer = metadata.image.toPNG();
// Create the metadata tags
writer
.setFrame("TIT2", metadata.title)
.setFrame("TPE1", [metadata.artist])
.setFrame("APIC", {
type: 3,
data: coverBuffer,
description: "",
});
writer.addTag();
}
fileBuffer = Buffer.from(writer.arrayBuffer);
} catch (error) {
sendError(win, error);
}
writeFileSync(filePath, fileBuffer);
// Notify the youtube-dl file
event.reply("add-metadata-done");
});
} }
module.exports = handle; module.exports = handle;

View File

@ -60,7 +60,8 @@ global.download = () => {
reinit(); reinit();
}, },
reinit, reinit,
pluginOptions pluginOptions,
global.songInfo
); );
}; };
// }); // });

View File

@ -3,6 +3,7 @@ const { writeFileSync } = require("fs");
const { join } = require("path"); const { join } = require("path");
const Mutex = require("async-mutex").Mutex; const Mutex = require("async-mutex").Mutex;
const ID3Writer = require("browser-id3-writer");
const { ipcRenderer } = require("electron"); const { ipcRenderer } = require("electron");
const is = require("electron-is"); const is = require("electron-is");
const filenamify = require("filenamify"); const filenamify = require("filenamify");
@ -130,15 +131,29 @@ const toMP3 = async (
const filePath = join(folder, subfolder, filename); const filePath = join(folder, subfolder, filename);
const fileBuffer = ffmpeg.FS("readFile", safeVideoName + "." + extension); const fileBuffer = ffmpeg.FS("readFile", safeVideoName + "." + extension);
if (existingMetadata) { // Add the metadata
writeFileSync(filePath, fileBuffer); try {
const writer = new ID3Writer(fileBuffer);
if (metadata.image) {
const coverBuffer = metadata.image.toPNG();
// Create the metadata tags
writer
.setFrame("TIT2", metadata.title)
.setFrame("TPE1", [metadata.artist])
.setFrame("APIC", {
type: 3,
data: coverBuffer,
description: "",
});
writer.addTag();
}
writeFileSync(filePath, Buffer.from(writer.arrayBuffer));
} catch (error) {
sendError(error);
} finally {
reinit(); reinit();
} else {
// Add the metadata
sendFeedback("Adding metadata…");
ipcRenderer.send("add-metadata", filePath, fileBuffer);
ipcRenderer.once("add-metadata-done", reinit);
sendFeedback("Finished converting", metadata);
} }
} catch (e) { } catch (e) {
sendError(e); sendError(e);