Working on new playlist mode

pull/127/head
Andrew 3 years ago
parent bfbf1a5be1
commit 9bb4523c09

@ -253,7 +253,7 @@ label {
display: none; display: none;
} }
input[type="checkbox"] { .cb {
width: 20px; width: 20px;
height: 20px; height: 20px;
position: relative; position: relative;

@ -33,7 +33,6 @@
<content_rating type="oars-1.1"/> <content_rating type="oars-1.1"/>
<releases> <releases>
<release version="3.12.1" date="2023-3-7"/>
<release version="3.12.0" date="2023-2-26"/> <release version="3.12.0" date="2023-2-26"/>
<release version="3.11.0" date="2023-1-30"/> <release version="3.11.0" date="2023-1-30"/>
<release version="3.10.6" date="2023-1-24"/> <release version="3.10.6" date="2023-1-24"/>

@ -49,6 +49,7 @@
<!-- Menu --> <!-- Menu -->
<div id="menu"> <div id="menu">
<a id="playlistWin" class="menuItem">Download Playlist</a> <a id="playlistWin" class="menuItem">Download Playlist</a>
<a id="newPlaylistWin" class="menuItem">New Playlist</a>
<a id="preferenceWin" class="menuItem">Preferences</a> <a id="preferenceWin" class="menuItem">Preferences</a>
<a id="aboutWin" class="menuItem">About</a> <a id="aboutWin" class="menuItem">About</a>
</div> </div>
@ -117,7 +118,7 @@
<br><br> <br><br>
<h3 id="subHeader">Subtitles</h3> <h3 id="subHeader">Subtitles</h3>
<span id="subTxt">Download subtitles if available</span> <span id="subTxt">Download subtitles if available</span>
<input id="subChecked" type="checkbox"> <input id="subChecked" class="cb" type="checkbox">
</div> </div>
<!-- Extraction options start --> <!-- Extraction options start -->

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Playlist download</title>
<link rel="stylesheet" href="../assets/css/index.css">
<script src="../src/playlist_new.js" defer></script>
<script src="../src/common.js" defer></script>
<!-- Translating -->
<script>window.i18n = new (require('../translations/i18n'));</script>
<style>
.playlistCheck {
position: absolute;
bottom: 8px;
right: 8px;
width: 25px;
height: 25px;
}
</style>
</head>
<body>
<!-- Theme toggle -->
<div id="themeToggle" onclick="toggle()">
<div id="themeToggleInside"></div>
</div>
<!-- Menu icon -->
<img src="../assets/images/menu.png" alt="menu" id="menuIcon">
<!-- Menu -->
<div id="menu">
<a id="homeWin" class="menuItem">Homepage</a>
<a id="preferenceWin" class="menuItem">Preferences</a>
<a id="aboutWin" class="menuItem">About</a>
</div>
<button class="submitBtn" id="pasteLink">Click to paste playlist link from clipboard [Ctrl + V]</button>
<div id="data">
</div>
<div id="goToTop"></div>
</body>
</html>

@ -41,7 +41,7 @@
<div class="prefBox"> <div class="prefBox">
<span id="transparentText">Enable transparent dark mode(only Linux, needs restart)</span><input type="checkbox" <span id="transparentText">Enable transparent dark mode(only Linux, needs restart)</span><input type="checkbox"
id="enableTransparent"> class="cb" id="enableTransparent">
</div> </div>
<br> <br>
@ -124,7 +124,7 @@
<div class="configBox"> <div class="configBox">
<span id="configTxt">Use configuration file</span> <span id="configTxt">Use configuration file</span>
<input type="checkbox" id="configCheck"> <input type="checkbox" class="cb" id="configCheck">
</div> </div>
<div id="configOpts"> <div id="configOpts">
@ -160,12 +160,12 @@
<br> <br>
<div class="prefBox"> <div class="prefBox">
<span id="trayTxt">Close to system tray</span> <span id="trayTxt">Close to system tray</span>
<input type="checkbox" id="closeToTray"> <input type="checkbox" class="cb" id="closeToTray">
</div> </div>
<br> <br>
<div class="prefBox"> <div class="prefBox">
<span id="autoUpdateTxt">Disable auto updates</span> <span id="autoUpdateTxt">Disable auto updates</span>
<input type="checkbox" id="autoUpdateDisabled"> <input type="checkbox" class="cb" id="autoUpdateDisabled">
</div> </div>
</body> </body>

@ -4,7 +4,7 @@
"yt-dlp-wrap-plus": "^2.3.16" "yt-dlp-wrap-plus": "^2.3.16"
}, },
"name": "ytdownloader", "name": "ytdownloader",
"version": "3.12.1", "version": "3.13.0",
"main": "main.js", "main": "main.js",
"scripts": { "scripts": {
"start": "electron .", "start": "electron .",
@ -86,8 +86,7 @@
"category": "Utility" "category": "Utility"
}, },
"snap": { "snap": {
"grade": "stable", "grade": "stable"
"base": "core22"
}, },
"win": { "win": {
"target": "nsis", "target": "nsis",

@ -0,0 +1,579 @@
{
"id": "PLNu0CXJQy5DBk_ca7C7YOZUFC8XzIYuQf",
"title": "\u041f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 Xenus: \u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f (\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c/No death challenge)",
"availability": "public",
"channel_follower_count": null,
"description": "",
"tags": [],
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/30jpTzJiedQ/hqdefault.jpg?sqp=-oaymwEWCKgBEF5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLAmEDg0XPgFJCyUgVIgLZr7kzi6zA",
"height": 94,
"width": 168,
"id": "0",
"resolution": "168x94"
},
{
"url": "https://i.ytimg.com/vi/30jpTzJiedQ/hqdefault.jpg?sqp=-oaymwEWCMQBEG5IWvKriqkDCQgBFQAAiEIYAQ==&rs=AOn4CLDm30N4dSfmxxOGpH1EU_uLS0PcXA",
"height": 110,
"width": 196,
"id": "1",
"resolution": "196x110"
},
{
"url": "https://i.ytimg.com/vi/30jpTzJiedQ/hqdefault.jpg?sqp=-oaymwEXCPYBEIoBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAQwDns2fzKoLKgnHPdSwMXOdPFHA",
"height": 138,
"width": 246,
"id": "2",
"resolution": "246x138"
},
{
"url": "https://i.ytimg.com/vi/30jpTzJiedQ/hqdefault.jpg?sqp=-oaymwEXCNACELwBSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCt8qjLqQUpH5QMKmbxbULN2xAubQ",
"height": 188,
"width": 336,
"id": "3",
"resolution": "336x188"
}
],
"modified_date": "20220718",
"view_count": 411,
"playlist_count": 13,
"uploader": "ProJecT Gamling",
"uploader_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"uploader_url": "https://www.youtube.com/@projectgamling7962",
"channel": "ProJecT Gamling",
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel_url": "https://www.youtube.com/@projectgamling7962",
"_type": "playlist",
"entries": [
{
"_type": "url",
"ie_key": "Youtube",
"id": "30jpTzJiedQ",
"url": "https://www.youtube.com/watch?v=30jpTzJiedQ",
"title": "Xenus: \u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 1: \u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 (No deaths challenge/\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 8994,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/30jpTzJiedQ/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBWrlgSf5eXcA_9H1ySF2aMUEn4zA",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/30jpTzJiedQ/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBHEKM40MpSXA8CgY-ClT5elYeV_w",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/30jpTzJiedQ/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAAvRLpvRsckiDHcBrdU3ZSl69XXw",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/30jpTzJiedQ/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA9kGc48_qsKbGCgSnAtLoN1u0XJw",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 134,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "XIBxYDyq14U",
"url": "https://www.youtube.com/watch?v=XIBxYDyq14U",
"title": "Xenus: \u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 2: \u0414\u043e\u043d \u041f\u0435\u0434\u0440\u043e (No deaths challenge/\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 7542,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/XIBxYDyq14U/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCi2_jYC9s-wE5QcaIqQgvptPFfeg",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/XIBxYDyq14U/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAFpQR6d3OlbjW-AxuPbAGJM3TbUA",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/XIBxYDyq14U/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCHn6BrPpyJH_R3z8RwjX_VOehMqQ",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/XIBxYDyq14U/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBzG2fREpEA2XUzJFiVJVmCq2HMJg",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 85,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "Y5FjUQFYugI",
"url": "https://www.youtube.com/watch?v=Y5FjUQFYugI",
"title": "Xenus: \u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 3: \u042d\u0434\u0433\u0430\u0440\u043e (No deaths challenge/\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 7984,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/Y5FjUQFYugI/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDGKy3hnu9knmngq2hAkUEDnCYEbg",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/Y5FjUQFYugI/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCSVxrhiAWPlVWe-MocX68R0s0xWA",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/Y5FjUQFYugI/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBLd0dK7P27n1VSJAPTj5_iTnLkbA",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/Y5FjUQFYugI/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLD2UAXVVlziN6NFC1f-37SMCx3qUg",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 61,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "cZMJbA5RfJo",
"url": "https://www.youtube.com/watch?v=cZMJbA5RfJo",
"title": "Xenus: \u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 4: \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f (No deaths challenge/\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 6414,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/cZMJbA5RfJo/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLD0jrz0csfO2Y3shzRQv35pXH_FmQ",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/cZMJbA5RfJo/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBES-6yntKp5IicORZJ163jXfj0Kw",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/cZMJbA5RfJo/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLA4J7SpW1shmvaIKACP1aIkZappYA",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/cZMJbA5RfJo/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLApSYw1D443jUXgj0DhIMtKN4LC0g",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 38,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "JdKmXxwF2B4",
"url": "https://www.youtube.com/watch?v=JdKmXxwF2B4",
"title": "[Private video]",
"description": null,
"duration": null,
"channel_id": null,
"channel": null,
"channel_url": null,
"thumbnails": [
{
"url": "https://i.ytimg.com/img/no_thumbnail.jpg",
"height": 90,
"width": 120
},
{
"url": "https://i.ytimg.com/img/no_thumbnail.jpg",
"height": 180,
"width": 320
},
{
"url": "https://i.ytimg.com/img/no_thumbnail.jpg",
"height": 360,
"width": 480
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": null,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "yvEdxPdFhoU",
"url": "https://www.youtube.com/watch?v=yvEdxPdFhoU",
"title": "Xenus:\u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 5 \u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0431\u0435\u0433 \u0438 \u0410\u043b\u044c\u0431\u0435\u0440\u0442\u043e \u0411\u043b\u0430\u043d\u043a\u043e (No deaths challenge/\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 13965,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/yvEdxPdFhoU/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB74rWcv2d74KKCCFMWC2Iv0x7oTg",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/yvEdxPdFhoU/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBp4QwHoVD6lVXleossWACwmRLBAw",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/yvEdxPdFhoU/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCJyb9hQkRmsKPvHMdHg7Hm_P0MlA",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/yvEdxPdFhoU/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDue4dHczq6T-ighZHdhxKQ1QX15Q",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 91,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "P534wDZhc9M",
"url": "https://www.youtube.com/watch?v=P534wDZhc9M",
"title": "Xenus:\u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 6: \u0424\u0430\u0440\u043c\u0438\u043c \u0434\u0435\u043d\u044c\u0433\u0438 \u0432\u0441\u0435\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 (No deaths challenge/\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 8425,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/P534wDZhc9M/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAkhaq0eA0SxpZDQ7ivvzKBwL9A8w",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/P534wDZhc9M/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAR4Mo6Qy1k-vvwr73y61W5yKw_fw",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/P534wDZhc9M/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAgwvqDV6rT3Y7RXT7mvlW1UXul6w",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/P534wDZhc9M/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDXEoQ0kwSJDrcOTgDLpUP9FEgSIA",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 37,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "DR0FKTr1Jio",
"url": "https://www.youtube.com/watch?v=DR0FKTr1Jio",
"title": "Xenus:\u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 7: \u0424\u0438\u0434\u0435\u043b\u044c \u0438 \u043a\u0432\u0435\u0441\u0442\u044b \u0437\u0430 \u043f\u0430\u0440\u0442\u0438\u0437\u0430\u043d (No deaths challenge/\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 7279,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/DR0FKTr1Jio/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAV09aPUf9nSDYh4iPY7uyMFJI-ew",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/DR0FKTr1Jio/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCFVW0FV35l2EvU5iwCJ7a_8UUYLA",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/DR0FKTr1Jio/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC_LiauAAXVVHd6mbIKbOz0gMYFrA",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/DR0FKTr1Jio/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDGpVlX-vXY6u5QS5l8SO_DIMKIXQ",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 31,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "GyOWRUys0RA",
"url": "https://www.youtube.com/watch?v=GyOWRUys0RA",
"title": "Xenus:\u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 8: \u0410\u0446\u0442\u0435\u043a (No deaths challenge/\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 7160,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/GyOWRUys0RA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCRsXEXRIY_PihywJJxgFXug1JVWw",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/GyOWRUys0RA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBILToN1LcT7_HQVIGXqkyHlOcQww",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/GyOWRUys0RA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAcAqnqO-EOFqC686cQDk7BgoW5sA",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/GyOWRUys0RA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBlAc8bYpeeTceqegQXM1bLIjWiVw",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 39,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "CNUiW9NGQCA",
"url": "https://www.youtube.com/watch?v=CNUiW9NGQCA",
"title": "Xenus:\u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 9: \u041c\u0438\u0441\u0441\u0438\u0438 \u0437\u0430 \u041f\u0430\u0440\u0442\u0438\u0437\u0430\u043d \u0432 \u0441\u0442\u0440\u0430\u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439 (\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 10756,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/CNUiW9NGQCA/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC07-N2JcwqQfV3E3cleCN-oehjgQ",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/CNUiW9NGQCA/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLDIMR2o_DRmQOyE-pGXvsstO9lpeg",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/CNUiW9NGQCA/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCdpBoNAdJBjaJ2ikbAAR2j54GeTA",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/CNUiW9NGQCA/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDSrvgtnSzdpw1VHBkdZGNp04YPig",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 40,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "JkNCGTt8diM",
"url": "https://www.youtube.com/watch?v=JkNCGTt8diM",
"title": "Xenus:\u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 10: \u041c\u0438\u0433\u0435\u043b\u044c \u0420\u043e\u0434\u0440\u0438\u0433\u0435\u0441 (\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 8818,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/JkNCGTt8diM/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLAOd4scVHcQKL6ttQg0BuwJP5J0_g",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/JkNCGTt8diM/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLCql2OaC3FL-IvfMTx3Fhhoy5oBtQ",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/JkNCGTt8diM/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLBHENzTyGuaSATYDgZTRmVqFCK_DQ",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/JkNCGTt8diM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDwU9gciLrbt9sAn2oKx4hhsIR2wQ",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 53,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "ra5msV_RVZM",
"url": "https://www.youtube.com/watch?v=ra5msV_RVZM",
"title": "Xenus: \u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 11: \u0410\u043d\u0442\u043e\u043d\u0438\u043e \u0438 \u0414\u043e\u043d \"\u0414\u0438\u0435\u0433\u043e\" (\u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 8760,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/ra5msV_RVZM/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB5DwHtTjVAezr-X3-Jfk2DC3gE6g",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/ra5msV_RVZM/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLC0DFJFluruAhWpzSX1QvcSVZxXRg",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/ra5msV_RVZM/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAvXOOmuGaJvHV5P_7CORwrw1d9sw",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/ra5msV_RVZM/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLAxc8YawtWWIXLwC3jGNX2GgQ9q4w",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 43,
"live_status": null,
"__x_forwarded_for_ip": null
},
{
"_type": "url",
"ie_key": "Youtube",
"id": "STvJ9UgLpxo",
"url": "https://www.youtube.com/watch?v=STvJ9UgLpxo",
"title": "Xenus: \u0422\u043e\u0447\u043a\u0430 \u041a\u0438\u043f\u0435\u043d\u0438\u044f \u042d\u043f\u0438\u0437\u043e\u0434 12: \u0427\u0435\u0440\u043d\u0430\u044f \u0411\u0430\u0448\u043d\u044f\" (\u0424\u0438\u043d\u0430\u043b, \u0412\u044b\u0441\u043e\u043a\u0430\u044f \u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c)",
"description": null,
"duration": 9779,
"channel_id": "UCbr4uFpFqPBzr7rlK-5F5YA",
"channel": "ProJecT Gamling",
"channel_url": "https://www.youtube.com/channel/UCbr4uFpFqPBzr7rlK-5F5YA",
"thumbnails": [
{
"url": "https://i.ytimg.com/vi/STvJ9UgLpxo/hqdefault.jpg?sqp=-oaymwEbCKgBEF5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLB7CpfFtEvIbh_KN6sQd7BiUIYK7w",
"height": 94,
"width": 168
},
{
"url": "https://i.ytimg.com/vi/STvJ9UgLpxo/hqdefault.jpg?sqp=-oaymwEbCMQBEG5IVPKriqkDDggBFQAAiEIYAXABwAEG&rs=AOn4CLBsyKFqH4Pi3DYffpxvsf92GLgLlg",
"height": 110,
"width": 196
},
{
"url": "https://i.ytimg.com/vi/STvJ9UgLpxo/hqdefault.jpg?sqp=-oaymwEcCPYBEIoBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLC0esk0uMSEiE6l5kdvDDdn9WG5Kg",
"height": 138,
"width": 246
},
{
"url": "https://i.ytimg.com/vi/STvJ9UgLpxo/hqdefault.jpg?sqp=-oaymwEcCNACELwBSFTyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLCyRnPncOYDIQWQ-sIWTdHDGoTssQ",
"height": 188,
"width": 336
}
],
"timestamp": null,
"release_timestamp": null,
"availability": null,
"view_count": 52,
"live_status": null,
"__x_forwarded_for_ip": null
}
],
"extractor_key": "YoutubeTab",
"extractor": "youtube:tab",
"webpage_url": "https://www.youtube.com/playlist?list=PLNu0CXJQy5DBk_ca7C7YOZUFC8XzIYuQf",
"original_url": "https://www.youtube.com/playlist?list=PLNu0CXJQy5DBk_ca7C7YOZUFC8XzIYuQf",
"webpage_url_basename": "playlist",
"webpage_url_domain": "youtube.com",
"__files_to_move": {},
"epoch": 1678375177,
"_version": {
"version": "2023.03.04",
"current_git_head": null,
"release_git_head": "392389b7df7b818f794b231f14dc396d4875fbad",
"repository": "yt-dlp/yt-dlp"
}
}

@ -117,7 +117,7 @@ function download(type) {
format = "" format = ""
} }
else { else {
format = `-f "${formatId}+m4a/mp4[height<=${quality}]+m4a/bv*[height<=${quality}]+ba/best"`; format = `-f "${formatId}+m4a/mp4[height=${quality}]+m4a/bv*[height<=${quality}]+ba/best"`;
} }
} else { } else {
format = getId("audioSelect").value; format = getId("audioSelect").value;

@ -0,0 +1,149 @@
const { clipboard, shell, ipcRenderer } = require("electron");
const { default: YTDlpWrap } = require("yt-dlp-wrap-plus");
const path = require("path");
const os = require("os");
const fs = require("fs");
const { execSync } = require("child_process");
let url;
const ytDlp = localStorage.getItem("ytdlp");
const ytdlp = new YTDlpWrap(ytDlp);
const downloadDir = localStorage.getItem("downloadPath");
const i18n = new (require("../translations/i18n"))();
let cookieArg = "";
let browser = "";
const formats = {
144: 160,
240: 133,
360: 134,
480: 135,
720: 136,
1080: 137,
1440: 400,
2160: 401,
4320: 571,
};
let originalCount = 0;
let ffmpeg;
let ffmpegPath;
if (os.platform() === "win32") {
ffmpeg = `"${__dirname}\\..\\ffmpeg.exe"`;
ffmpegPath = `${__dirname}\\..\\ffmpeg.exe`;
} else {
ffmpeg = `"${__dirname}/../ffmpeg"`;
ffmpegPath = `${__dirname}/../ffmpeg`;
}
if (!fs.existsSync(ffmpegPath)) {
try {
ffmpeg = execSync("which ffmpeg", { encoding: "utf8" });
ffmpeg = `"${ffmpeg.trimEnd()}"`;
} catch (error) {
console.log(error);
}
}
console.log("ffmpeg:", ffmpeg);
let foldernameFormat = "%(playlist_title)s";
let filenameFormat = "%(playlist_index)s.%(title)s.%(ext)s";
let playlistIndex = 1;
let playlistEnd = "";
function getId(id) {
return document.getElementById(id);
}
function pasteLink() {
const clipboardText = clipboard.readText();
const data = execSync(
`yt-dlp --yes-playlist --no-warnings -J --flat-playlist "${clipboardText}"`,
{
encoding: "utf8",
}
);
const parsed = JSON.parse(data);
console.log(parsed);
let items = "";
parsed.entries.forEach((entry) => {
const randId = Math.random().toFixed(10).toString().slice(2);
if (entry.channel) {
items += `
<div class="item" id="${randId}">
<img src="${
entry.thumbnails[3].url
}" alt="No thumbnail" class="itemIcon" crossorigin="anonymous">
<div class="itemBody">
<div class="itemTitle">${entry.title}</div>
<div>${formatTime(entry.duration)}</div>
<input type="checkbox" class="playlistCheck" id="c${randId}">
</div>
</div>
`;
}
});
getId("data").innerHTML = items;
}
getId("pasteLink").addEventListener("click", (e) => {
try {
pasteLink();
} catch (error) {
console.log(error);
}
});
document.addEventListener("keydown", (event) => {
if (event.ctrlKey && event.key == "v") {
pasteLink();
}
});
function formatTime(seconds) {
let hours = Math.floor(seconds / 3600);
let minutes = Math.floor((seconds - hours * 3600) / 60);
seconds = seconds - hours * 3600 - minutes * 60;
let formattedTime = "";
if (hours > 0) {
formattedTime += hours + ":";
}
if (minutes < 10 && hours > 0) {
formattedTime += "0";
}
formattedTime += minutes + ":";
if (seconds < 10) {
formattedTime += "0";
}
formattedTime += seconds;
return formattedTime;
}
function closeMenu() {
getId("menuIcon").style.transform = "rotate(0deg)";
menuIsOpen = false;
let count = 0;
let opacity = 1;
const fade = setInterval(() => {
if (count >= 10) {
clearInterval(fade);
} else {
opacity -= 0.1;
getId("menu").style.opacity = opacity;
count++;
}
}, 50);
}
getId("preferenceWin").addEventListener("click", () => {
closeMenu();
ipcRenderer.send("load-page", __dirname + "/preferences.html");
});
getId("aboutWin").addEventListener("click", () => {
closeMenu();
ipcRenderer.send("load-page", __dirname + "/about.html");
});
getId("homeWin").addEventListener("click", () => {
closeMenu();
ipcRenderer.send("load-win", __dirname + "/index.html");
});

@ -1151,6 +1151,10 @@ getId("playlistWin").addEventListener("click", () => {
closeMenu(); closeMenu();
ipcRenderer.send("load-win", __dirname + "/playlist.html"); ipcRenderer.send("load-win", __dirname + "/playlist.html");
}); });
getId("newPlaylistWin").addEventListener("click", () => {
closeMenu();
ipcRenderer.send("load-win", __dirname + "/playlist_new.html");
});
ipcRenderer.on("link", (event, text) => { ipcRenderer.on("link", (event, text) => {
pasteFromTray(text); pasteFromTray(text);

Loading…
Cancel
Save