Added playlist audio download support

pull/68/head
aandrew-me 3 years ago
parent d39e2e6b38
commit b24e60e7d3

@ -46,7 +46,7 @@
<span id="link"></span> <span id="link"></span>
<br><br> <br><br>
<label id="videoFormat">Select Format </label> <label id="videoFormat">Select Video Format </label>
<select id="select"> <select id="select">
<option value="144">144p</option> <option value="144">144p</option>
<option value="240">240p</option> <option value="240">240p</option>
@ -60,6 +60,20 @@
<button class="submitBtn" id="download">Download</button> <button class="submitBtn" id="download">Download</button>
<br>
<label id="audioFormat">Select Audio format </label>
<select id="audioSelect">
<option value="mp3">Mp3</option>
<option value="aac">Aac</option>
<option value="m4a">M4a</option>
<option value="opus">Opus</option>
<option value="wav">Wav</option>
<option value="alac">Alac</option>
<option value="flac">Flac</option>
<option value="vorbis">Vorbis (ogg)</option>
</select>
<button class="submitBtn" id="audioDownload">Download</button>
<p id="incorrectMsg"></p> <p id="incorrectMsg"></p>
</div> </div>

@ -1,10 +1,10 @@
{ {
"dependencies": { "dependencies": {
"electron-updater": "^5.2.1", "electron-updater": "^5.3.0",
"yt-dlp-wrap-extended": "^2.3.15" "yt-dlp-wrap-extended": "^2.3.15"
}, },
"name": "ytdownloader", "name": "ytdownloader",
"version": "3.6.3", "version": "3.7.0",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {
"start": "electron .", "start": "electron .",

@ -35,7 +35,7 @@ document.addEventListener("keydown", (event) => {
const playlistTxt = "Downloading playlist: "; const playlistTxt = "Downloading playlist: ";
const videoIndex = "Downloading video "; const videoIndex = "Downloading video ";
getId("download").addEventListener("click", () => { function download(type) {
// Whether to use browser cookies or not // Whether to use browser cookies or not
if (localStorage.getItem("browser")) { if (localStorage.getItem("browser")) {
browser = localStorage.getItem("browser"); browser = localStorage.getItem("browser");
@ -50,7 +50,8 @@ getId("download").addEventListener("click", () => {
const date = new Date(); const date = new Date();
const today = const today =
date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(); date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate();
let playlistDirName = "Playlist_" + today; let playlistDirName =
"Playlist" + Math.random().toFixed(5).toString().slice(2) + "_" + today;
// Opening folder // Opening folder
let folderLocation = path.join(downloadDir, playlistDirName); let folderLocation = path.join(downloadDir, playlistDirName);
@ -60,11 +61,19 @@ getId("download").addEventListener("click", () => {
getId("options").style.display = "none"; getId("options").style.display = "none";
getId("pasteLink").style.display = "none"; getId("pasteLink").style.display = "none";
getId("playlistName").textContent = i18n.__("Processing") + "..."; getId("playlistName").textContent = i18n.__("Processing") + "...";
const quality = getId("select").value;
const format = `"mp4[height<=${quality}]+m4a/mp4[height<=${quality}]/bv[height<=${quality}]+ba/best[height<=${quality}]/best"`; let quality, format, downloadProcess;
if (type === "video") {
quality = getId("select").value;
format = `"mp4[height<=${quality}]+m4a/mp4[height<=${quality}]/bv[height<=${quality}]+ba/best[height<=${quality}]/best"`;
} else {
format = getId("audioSelect").value;
}
const controller = new AbortController(); const controller = new AbortController();
const downloadProcess = ytdlp.exec( if (type === "video") {
downloadProcess = ytdlp.exec(
[ [
"-f", "-f",
format, format,
@ -83,9 +92,31 @@ getId("download").addEventListener("click", () => {
{ shell: true, detached: false }, { shell: true, detached: false },
controller.signal controller.signal
); );
} else {
downloadProcess = ytdlp.exec(
[
"--yes-playlist",
"-x",
"--audio-format",
format,
"-o",
`"${path.join(
downloadDir,
playlistDirName,
"%(playlist_index)s.%(title)s.%(ext)s"
)}"`,
cookieArg,
browser,
`"${url}"`,
],
{ shell: true, detached: false },
controller.signal
);
}
downloadProcess.on("ytDlpEvent", (eventType, eventData) => { downloadProcess.on("ytDlpEvent", (eventType, eventData) => {
console.log(eventData); // console.log(eventData);
if (eventData.includes(playlistTxt)) { if (eventData.includes(playlistTxt)) {
playlistName = eventData.split(":")[1].slice(1); playlistName = eventData.split(":")[1].slice(1);
@ -96,7 +127,12 @@ getId("download").addEventListener("click", () => {
if (eventData.includes(videoIndex)) { if (eventData.includes(videoIndex)) {
count += 1; count += 1;
const itemTitle = i18n.__("Video") + " " + eventData.split(" ")[3]; let itemTitle;
if (type === "video") {
itemTitle = i18n.__("Video") + " " + eventData.split(" ")[3];
} else {
itemTitle = i18n.__("Audio") + " " + eventData.split(" ")[3];
}
if (count > 1) { if (count > 1) {
getId(`p${count - 1}`).textContent = i18n.__( getId(`p${count - 1}`).textContent = i18n.__(
@ -145,6 +181,16 @@ getId("download").addEventListener("click", () => {
openFolder(folderLocation); openFolder(folderLocation);
}; };
}); });
}
// Downloading video
getId("download").addEventListener("click", () => {
download("video");
});
// Downloading audio
getId("audioDownload").addEventListener("click", () => {
download("audio");
}); });
function openFolder(location) { function openFolder(location) {
@ -189,5 +235,7 @@ getId("preferenceWin").textContent = i18n.__("Preferences");
getId("aboutWin").textContent = i18n.__("About"); getId("aboutWin").textContent = i18n.__("About");
getId("homeWin").textContent = i18n.__("Homepage"); getId("homeWin").textContent = i18n.__("Homepage");
getId("linkTitle").textContent = i18n.__("Link:"); getId("linkTitle").textContent = i18n.__("Link:");
getId("videoFormat").textContent = i18n.__("Select Format "); getId("videoFormat").textContent = i18n.__("Select Video Format ");
getId("audioFormat").textContent = i18n.__("Select Audio Format ");
getId("download").textContent = i18n.__("Download"); getId("download").textContent = i18n.__("Download");

@ -64,6 +64,8 @@
"Install and restart now?":"Install and restart now?", "Install and restart now?":"Install and restart now?",
"Restart":"Restart", "Restart":"Restart",
"Later":"Later", "Later":"Later",
"Extract Audio":"Extract Audio" "Extract Audio":"Extract Audio",
"Select Video Format ":"Select Video Format ",
"Select Audio Format ":"Select Audio Format "
} }

Loading…
Cancel
Save