feat(booklet): Download booklet if available #2
This commit is contained in:
parent
4f2d61ffe6
commit
0e01c21995
1 changed files with 32 additions and 42 deletions
|
@ -25,27 +25,30 @@ export async function lucida(album: URL, baseTimeout: number, context: BrowserCo
|
|||
console.log(`Downloading ${albumName} (${trackCount} tracks) from ${album.href}...`);
|
||||
console.log(`Setting timeout to ${baseTimeout * trackCount} ms...`);
|
||||
|
||||
// Start download
|
||||
await page.getByText('download full album').click();
|
||||
|
||||
try {
|
||||
// Save the download to the Downloads folder
|
||||
const download: Download = await page.waitForEvent('download', { timeout: baseTimeout * trackCount });
|
||||
// Start download
|
||||
await page.getByText('download full album').click();
|
||||
// Save the download to the Downloads folder
|
||||
// TODO Set path (configurable)
|
||||
await download.saveAs('/home/tdpeuter/Downloads/lucida/' + download.suggestedFilename());
|
||||
|
||||
// Check if the album has a booklet
|
||||
const bookPath: File | null = await booklet(album, context);
|
||||
if (bookPath !== null) {
|
||||
console.log(`Downloaded booklet ${bookPath.name}`);
|
||||
// TODO Add booklet to ZIP
|
||||
}
|
||||
|
||||
await page.close();
|
||||
return true;
|
||||
} catch {
|
||||
await page.close();
|
||||
return 'Download timed out';
|
||||
}
|
||||
|
||||
// TODO Check if booklet is available.
|
||||
|
||||
await page.close();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async function booklet(album: URL, context: BrowserContext): Promise<void> {
|
||||
async function booklet(album: URL, context: BrowserContext): Promise<File | null> {
|
||||
const page: Page = await context.newPage();
|
||||
|
||||
const bookletURL: URL = new URL('http://audiofil.hostronavt.ru/booklet.php?name=' + encodeURIComponent(album.href));
|
||||
|
@ -58,38 +61,25 @@ async function booklet(album: URL, context: BrowserContext): Promise<void> {
|
|||
console.log(await link.innerHTML());
|
||||
} else {
|
||||
console.log('No goodies link found');
|
||||
return null;
|
||||
}
|
||||
|
||||
// TODO Download the booklet.
|
||||
try {
|
||||
// Go to the goodies link
|
||||
await link.dispatchEvent('click');
|
||||
|
||||
await page.close();
|
||||
// Download the booklet
|
||||
const download: Download = await page.waitForEvent('download');
|
||||
const filename: string = download.suggestedFilename();
|
||||
await download.saveAs('/home/tdpeuter/Downloads/lucida/' + filename);
|
||||
|
||||
console.log(`Downloaded booklet ${filename}`);
|
||||
|
||||
await page.close();
|
||||
return new File([await download.path()], filename);
|
||||
} catch (e) {
|
||||
console.log('Could not download booklet:', e);
|
||||
await page.close();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
(async () => {
|
||||
const timeout: number = 240000;
|
||||
const albums: string[] = [
|
||||
'https://www.qobuz.com/us-en/album/you-me-disclosure-eliza-doolittle/q5q4tg0cupgwa',
|
||||
'https://www.qobuz.com/us-en/album/shes-gone-dance-on-disclosure/xrylx7j5794ab',
|
||||
'https://www.qobuz.com/us-en/album/tondo-disclosure-eko-roosevelt/tlb5v175fbyxb'
|
||||
];
|
||||
const withBooklet: string[] = [
|
||||
'https://www.qobuz.com/us-en/album/moon-safari-air/0724384497859'
|
||||
];
|
||||
|
||||
// Launch a new Firefox browser instance
|
||||
// TODO Allow to pass headless option as argument
|
||||
const browser: Browser = await firefox.launch({ headless: false }); // Set headless: true to run without UI
|
||||
const context: BrowserContext = await browser.newContext({
|
||||
acceptDownloads: true, // Enable download handling
|
||||
baseURL: 'https://lucida.to'
|
||||
});
|
||||
|
||||
// for (const album of testAlbums) {
|
||||
// await lucida(new URL(album), timeout, context);
|
||||
// }
|
||||
|
||||
await booklet(new URL(withBooklet[0]), context);
|
||||
|
||||
// Close the browser
|
||||
await browser.close();
|
||||
})();
|
||||
|
|
Reference in a new issue