From e59be245d5e3005b5b5dadf78ad7115cc800c663 Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Sun, 1 Jun 2025 20:53:12 +0000 Subject: feat: Allow specifying the overwrite mode for singlefile archives. Fixes #1125 --- packages/api/routes/bookmarks.ts | 69 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) (limited to 'packages/api') diff --git a/packages/api/routes/bookmarks.ts b/packages/api/routes/bookmarks.ts index fbc46d2f..abf0daae 100644 --- a/packages/api/routes/bookmarks.ts +++ b/packages/api/routes/bookmarks.ts @@ -89,6 +89,21 @@ const app = new Hono() ) .post( "/singlefile", + zValidator( + "query", + z.object({ + ifexists: z + .enum([ + "skip", + "overwrite", + "overwrite-recrawl", + "append", + "append-recrawl", + ]) + .optional() + .default("skip"), + }), + ), zValidator( "form", z.object({ @@ -107,7 +122,59 @@ const app = new Hono() url: form.url, precrawledArchiveId: up.assetId, }); - return c.json(bookmark, 201); + if (bookmark.alreadyExists) { + const ifexists = c.req.valid("query").ifexists; + switch (ifexists) { + case "skip": + break; + case "overwrite-recrawl": + case "overwrite": { + const existingPrecrawledArchiveId = bookmark.assets + .filter((a) => a.assetType == "precrawledArchive") + .at(-1)?.id; + if (existingPrecrawledArchiveId) { + await c.var.api.assets.replaceAsset({ + bookmarkId: bookmark.id, + oldAssetId: existingPrecrawledArchiveId, + newAssetId: up.assetId, + }); + } else { + await c.var.api.assets.attachAsset({ + bookmarkId: bookmark.id, + asset: { + id: up.assetId, + assetType: "precrawledArchive", + }, + }); + } + if (ifexists == "overwrite-recrawl") { + await c.var.api.bookmarks.recrawlBookmark({ + bookmarkId: bookmark.id, + }); + } + break; + } + case "append-recrawl": + case "append": { + await c.var.api.assets.attachAsset({ + bookmarkId: bookmark.id, + asset: { + id: up.assetId, + assetType: "precrawledArchive", + }, + }); + if (ifexists == "append-recrawl") { + await c.var.api.bookmarks.recrawlBookmark({ + bookmarkId: bookmark.id, + }); + } + break; + } + } + return c.json(bookmark, 200); + } else { + return c.json(bookmark, 201); + } }, ) -- cgit v1.2.3-70-g09d2