From 2defc2475fc36635c45a449a44669048871864f6 Mon Sep 17 00:00:00 2001 From: Mohamed Bassem Date: Sun, 12 Oct 2025 22:41:56 +0100 Subject: feat: Add source field to track bookmark creation sources (#2037) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Add source field to track bookmark creation sources Add a new 'source' field to the bookmarks table to track where bookmarks were created from. Possible values: api, web, cli, mobile, singlefile, rss. Changes: - Add source field to bookmarks table schema - Update Zod schemas to include source field - Update tRPC createBookmark procedure to store source - Update all callsites to pass appropriate source value: - api: Default to "api" if not provided - singlefile: Set to "singlefile" - rss: Set to "rss" in feedWorker - cli: Set to "cli" - mobile: Set to "mobile" in all mobile app bookmark creation - browser-extension: Set to "web" - web: Set to "web" in all web app bookmark creation - Create migration file for database schema change Fixes #2036 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Mohamed Bassem * feat: Add extension source type for browser extension - Add 'extension' to bookmark source enum - Update browser extension to use 'extension' instead of 'web' Co-authored-by: Mohamed Bassem * fix CI * fix CI * fix the migration file * add import source * make source nullish --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Mohamed Bassem --- apps/mobile/app/dashboard/bookmarks/new.tsx | 8 ++++++-- apps/mobile/app/sharing.tsx | 18 +++++++++++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) (limited to 'apps/mobile/app') diff --git a/apps/mobile/app/dashboard/bookmarks/new.tsx b/apps/mobile/app/dashboard/bookmarks/new.tsx index 51db6d97..25882d7f 100644 --- a/apps/mobile/app/dashboard/bookmarks/new.tsx +++ b/apps/mobile/app/dashboard/bookmarks/new.tsx @@ -48,9 +48,13 @@ const NoteEditorPage = () => { if (url.protocol != "http:" && url.protocol != "https:") { throw new Error(`Unsupported URL protocol: ${url.protocol}`); } - createBookmark({ type: BookmarkTypes.LINK, url: data }); + createBookmark({ type: BookmarkTypes.LINK, url: data, source: "mobile" }); } catch { - createBookmark({ type: BookmarkTypes.TEXT, text: data }); + createBookmark({ + type: BookmarkTypes.TEXT, + text: data, + source: "mobile", + }); } }; diff --git a/apps/mobile/app/sharing.tsx b/apps/mobile/app/sharing.tsx index 1e5df4b8..3e2b6bfb 100644 --- a/apps/mobile/app/sharing.tsx +++ b/apps/mobile/app/sharing.tsx @@ -44,14 +44,26 @@ function SaveBookmark({ setMode }: { setMode: (mode: Mode) => void }) { return; } if (!isPending && shareIntent.webUrl) { - mutate({ type: BookmarkTypes.LINK, url: shareIntent.webUrl }); + mutate({ + type: BookmarkTypes.LINK, + url: shareIntent.webUrl, + source: "mobile", + }); } else if (!isPending && shareIntent?.text) { const val = z.string().url(); if (val.safeParse(shareIntent.text).success) { // This is a URL, else treated as text - mutate({ type: BookmarkTypes.LINK, url: shareIntent.text }); + mutate({ + type: BookmarkTypes.LINK, + url: shareIntent.text, + source: "mobile", + }); } else { - mutate({ type: BookmarkTypes.TEXT, text: shareIntent.text }); + mutate({ + type: BookmarkTypes.TEXT, + text: shareIntent.text, + source: "mobile", + }); } } else if (!isPending && shareIntent?.files) { uploadAsset({ -- cgit v1.2.3-70-g09d2