improve process lock logic
This commit is contained in:
parent
a79d14bf3f
commit
ea505e0474
@ -94,7 +94,7 @@ class SpotifyDownloader extends Downloader
|
||||
}
|
||||
|
||||
this.logger.info(`Queueing song for download: ${url}`);
|
||||
return new Promise((resolve, reject) =>
|
||||
const promise = new Promise<DownloaderResult>((resolve, reject) =>
|
||||
{
|
||||
this.#queue.push({
|
||||
resolve, reject, id, url
|
||||
@ -102,6 +102,12 @@ class SpotifyDownloader extends Downloader
|
||||
this.#processQueue();
|
||||
// child.stdout?.on('data', (chunk => this.logger.debug('child stdout:', chunk)));
|
||||
});
|
||||
promise.finally(() =>
|
||||
{
|
||||
this.#processing = false;
|
||||
this.#processQueue();
|
||||
});
|
||||
return promise;
|
||||
}
|
||||
|
||||
async #processQueue ()
|
||||
@ -119,10 +125,7 @@ class SpotifyDownloader extends Downloader
|
||||
childProcess.exec(`"${this.#executable}" --root-path "${this.downloadDir}" ${this.#options.join(' ')} ${url}`, (error, stdout, stderr) =>
|
||||
{
|
||||
if (error)
|
||||
{
|
||||
this.#processing = false;
|
||||
return reject(error);
|
||||
}
|
||||
|
||||
if (stderr && !stderr.includes('###'))
|
||||
this.logger.debug('stderr', stderr);
|
||||
@ -144,10 +147,7 @@ class SpotifyDownloader extends Downloader
|
||||
data = this.#parseFilename(file);
|
||||
}
|
||||
if (!data)
|
||||
{
|
||||
this.#processing = false;
|
||||
return reject(new Error('Failed to find file reference'));
|
||||
}
|
||||
|
||||
const { fileName, artist, song, album, ext } = data;
|
||||
const filePath = path.join(this.downloadDir!, fileName);
|
||||
@ -159,10 +159,6 @@ class SpotifyDownloader extends Downloader
|
||||
album,
|
||||
ext
|
||||
});
|
||||
|
||||
this.#processing = false;
|
||||
if (this.#queue.length)
|
||||
process.nextTick(this.#processQueue.bind(this));
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user