mirror of
https://github.com/jely2002/youtube-dl-gui.git
synced 2021-11-01 22:46:21 +03:00
83 lines
3.5 KiB
JavaScript
83 lines
3.5 KiB
JavaScript
const DownloadQuery = require('./DownloadQuery');
|
|
const ProgressBar = require("../types/ProgressBar");
|
|
const Utils = require("../Utils");
|
|
|
|
class DownloadQueryList {
|
|
constructor(videos, playlistMetadata, environment, manager, progressBar) {
|
|
this.videos = videos;
|
|
this.playlistMetadata = playlistMetadata;
|
|
this.environment = environment;
|
|
this.progressBar = progressBar;
|
|
this.manager = manager;
|
|
this.length = this.videos.length;
|
|
this.done = 0;
|
|
this.cancelled = 0;
|
|
this.parentProgress = [];
|
|
}
|
|
|
|
cancel() {
|
|
for(const video of this.videos) {
|
|
if(!video.downloaded) {
|
|
video.query.cancel();
|
|
}
|
|
}
|
|
}
|
|
|
|
async start() {
|
|
return await new Promise(((resolve) => {
|
|
for(let video of this.videos) {
|
|
let progressBar = new ProgressBar(this.manager, video);
|
|
let task = new DownloadQuery(video.webpage_url, video, this.environment, progressBar, Utils.getVideoInPlaylistMetadata(video.url, null, this.playlistMetadata));
|
|
if(video.parentID != null && !this.parentProgress.some(e => e.id === video.parentID)) {
|
|
const bar = new ProgressBar(this.manager, video.parentID);
|
|
this.parentProgress.push({
|
|
id: video.parentID,
|
|
done: 0,
|
|
cancelled: 0,
|
|
length: video.parentSize,
|
|
bar: bar
|
|
});
|
|
bar.updatePlaylist(0, video.parentSize);
|
|
}
|
|
video.setQuery(task);
|
|
video.query.connect().then((returnValue) => {
|
|
if(video.parentID != null) {
|
|
const progress = this.parentProgress.find(e => e.id === video.parentID);
|
|
if(returnValue === "killed" || returnValue !== "done") progress.cancelled++;
|
|
progress.done++;
|
|
if (returnValue === "killed") this.cancelled++;
|
|
if (returnValue !== "done") {
|
|
video.error = true;
|
|
this.environment.errorHandler.checkError(returnValue, video.identifier);
|
|
}
|
|
this.done++;
|
|
progress.bar.updatePlaylist(progress.done - progress.cancelled, progress.length - progress.cancelled);
|
|
if(progress.done === progress.length) {
|
|
progress.bar.done(video.audioOnly);
|
|
}
|
|
} else {
|
|
if (returnValue === "killed") this.cancelled++;
|
|
if (returnValue !== "done") {
|
|
video.error = true;
|
|
this.environment.errorHandler.checkError(returnValue, video.identifier);
|
|
}
|
|
this.done++;
|
|
}
|
|
this.progressBar.updatePlaylist(this.done - this.cancelled, this.length - this.cancelled);
|
|
if(!video.error) {
|
|
video.downloaded = true;
|
|
video.query.progressBar.done(video.audioOnly);
|
|
}
|
|
if(this.done === this.length) {
|
|
resolve();
|
|
}
|
|
});
|
|
this.progressBar.updatePlaylist(this.done - this.cancelled, this.length - this.cancelled);
|
|
}
|
|
}))
|
|
|
|
}
|
|
}
|
|
|
|
module.exports = DownloadQueryList;
|