This repository has been archived on 2025-08-08. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
lucida-queue/src/lucida.ts

58 lines
2.2 KiB
TypeScript

import {firefox, Page, BrowserContext, Download} from 'playwright';
async function lucida(album: URL, timeout: number, context: BrowserContext): Promise<void> {
const page: Page = await context.newPage();
await page.goto('/');
// Fill in the album URL
await page.fill('input[id="download"]', album.href);
// Wait for the XHR request to complete
await Promise.all([
page.waitForResponse(res => res.url().includes('/api/load') && res.status() == 200),
page.click('input[id="go"]'),
page.waitForLoadState('domcontentloaded')
]);
// Check 'Hide my download from recently downloaded' checkbox
await page.check('input[id="hide-from-ticker"]');
// Parse info
const albumName: string = (await page.locator('h1[class="svelte-6pt9ji"]').last().innerText()).trim();
const trackCount: string = (await page.locator('h3[class="svelte-6pt9ji"]').first().innerText()).trim();
// Start download
await page.getByText('download full album').click();
console.log(`Downloading ${albumName} (${trackCount}) from ${album.href}...`);
page.on('download', download => download.path().then(console.log));
const downloadPromise: Promise<Download> = page.waitForEvent('download', { timeout: timeout });
const download: Download = await downloadPromise;
// Save the download to the Downloads folder
// TODO Set path (configurable)
await download.saveAs('/home/tdpeuter/Downloads/' + download.suggestedFilename());
await page.close();
}
(async () => {
// Launch a new Firefox browser instance
// TODO Allow to pass headless option as argument
const browser = await firefox.launch({ headless: true }); // Set headless: true to run without UI
const context = await browser.newContext({
acceptDownloads: true, // Enable download handling
baseURL: 'https://lucida.to'
});
const album: URL = new URL('https://www.qobuz.com/us-en/album/you-me-disclosure-eliza-doolittle/q5q4tg0cupgwa');
// const album: URL = new URL('https://www.qobuz.com/us-en/album/led-zeppelin-iv-hd-remastered-edition-led-zeppelin/0603497898503');
const timeout: number = 240000;
await lucida(album, timeout, context);
// Close the browser
await browser.close();
})();