diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-06-01 20:53:12 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-06-01 20:53:12 +0000 |
| commit | e59be245d5e3005b5b5dadf78ad7115cc800c663 (patch) | |
| tree | 67e973a0d2c54cc3c5c64829d811999c219b6fca /packages/api | |
| parent | ea1d0023bfee55358ebb1a96f3d06e783a219c0d (diff) | |
| download | karakeep-e59be245d5e3005b5b5dadf78ad7115cc800c663.tar.zst | |
feat: Allow specifying the overwrite mode for singlefile archives. Fixes #1125
Diffstat (limited to 'packages/api')
| -rw-r--r-- | packages/api/routes/bookmarks.ts | 69 |
1 files changed, 68 insertions, 1 deletions
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 @@ -90,6 +90,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({ url: z.string(), @@ -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); + } }, ) |
