aboutsummaryrefslogtreecommitdiffstats
path: root/apps/workers
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-11-02 20:48:17 +0000
committerGitHub <noreply@github.com>2025-11-02 20:48:17 +0000
commit5358682a8cfbd12d93a4e9962f7a9f0440c42c19 (patch)
tree0b642ca49fa047177cd1280845cf86a0a7fe32b3 /apps/workers
parent633686b58c13fc9be9fa1354ae53cab222d37546 (diff)
downloadkarakeep-5358682a8cfbd12d93a4e9962f7a9f0440c42c19.tar.zst
feat(rss): Add import tags from RSS feed categories (#2031)
* feat(feeds): Add import tags from RSS feed categories - Add importTags boolean field to rssFeedsTable schema (default: false) - Create database migration 0063_add_import_tags_to_feeds.sql - Update zod schemas (zFeedSchema, zNewFeedSchema, zUpdateFeedSchema) to include importTags - Update Feed model to handle importTags in create and update methods - Update feedWorker to: - Read title and categories from RSS parser - Attach categories as tags to bookmarks when importTags is enabled - Log warnings if tag attachment fails Resolves #1996 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Mohamed Bassem <MohamedBassem@users.noreply.github.com> * feat(web): Add importTags option to feed settings UI - Add importTags toggle to FeedsEditorDialog (create feed) - Add importTags toggle to EditFeedDialog (edit feed) - Display as a bordered switch control with descriptive text - Defaults to false for new feeds Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com> * fix migration * remove extra migration --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com>
Diffstat (limited to 'apps/workers')
-rw-r--r--apps/workers/workers/feedWorker.ts29
1 files changed, 29 insertions, 0 deletions
diff --git a/apps/workers/workers/feedWorker.ts b/apps/workers/workers/feedWorker.ts
index f86e7424..0dfc5399 100644
--- a/apps/workers/workers/feedWorker.ts
+++ b/apps/workers/workers/feedWorker.ts
@@ -154,6 +154,8 @@ async function run(req: DequeuedJob<ZFeedRequestSchema>) {
id: z.coerce.string(),
link: z.string().optional(),
guid: z.string().optional(),
+ title: z.string().optional(),
+ categories: z.array(z.string()).optional(),
});
const feedItems = unparseFeedData.items
@@ -209,11 +211,38 @@ async function run(req: DequeuedJob<ZFeedRequestSchema>) {
trpcClient.bookmarks.createBookmark({
type: BookmarkTypes.LINK,
url: item.link!,
+ title: item.title,
source: "rss",
}),
),
);
+ // If importTags is enabled, attach categories as tags to the created bookmarks
+ if (feed.importTags) {
+ await Promise.allSettled(
+ newEntries.map(async (item, idx) => {
+ const bookmark = createdBookmarks[idx];
+ if (
+ bookmark.status === "fulfilled" &&
+ item.categories &&
+ item.categories.length > 0
+ ) {
+ try {
+ await trpcClient.bookmarks.updateTags({
+ bookmarkId: bookmark.value.id,
+ attach: item.categories.map((tagName) => ({ tagName })),
+ detach: [],
+ });
+ } catch (error) {
+ logger.warn(
+ `[feed][${jobId}] Failed to attach tags to bookmark ${bookmark.value.id}: ${error}`,
+ );
+ }
+ }
+ }),
+ );
+ }
+
// It's ok if this is not transactional as the bookmarks will get linked in the next iteration.
await db
.insert(rssFeedImportsTable)