Share a feed, an item or a file (#48)
A share button in the feed's header, beside an item's "Open the original", and on each file. It uses the Web Share API where the browser has it, which is the share sheet on a phone, and copies the link where it does not. A file is shared by the publisher's address, not /media/, which only someone signed in here can open. Paid feeds carry the subscriber's access in their address, Patreon's in a token, so sharing one gives the subscription away. An address that looks like that asks first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1361,3 +1361,16 @@ test('words in Settings hide the items that mention them', async ({ page }) => {
|
||||
|
||||
await page.evaluate(() => api('/api/me', { method: 'PATCH', body: JSON.stringify({ blocked: [] }) }));
|
||||
});
|
||||
|
||||
test('Share hands the feed, the item and the file to the share sheet', async ({ page }) => {
|
||||
await page.evaluate(() => { window.shared = []; navigator.share = async d => { window.shared.push(d); }; });
|
||||
await page.locator('.feed', { hasText: 'Test Show' }).click();
|
||||
await page.locator('.tabs button', { hasText: 'All' }).first().click();
|
||||
await page.locator('#content .acts [data-a="share"]').click();
|
||||
await page.locator('.ep', { hasText: 'Second Episode' }).click();
|
||||
await page.locator('.encbox [data-a="share"]').first().click();
|
||||
await expect.poll(() => page.evaluate(() => window.shared)).toEqual([
|
||||
{ title: 'Test Show', url: expect.stringContaining('/show.xml') },
|
||||
{ title: 'Second Episode', url: expect.stringContaining('/ep1.mp3?2') },
|
||||
]);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user