From 71da03c794eccf3bb8feb0837278e5c0927a8018 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 23 Aug 2024 10:23:00 +0800 Subject: [PATCH 1/4] fix: failed to search items by rss feed url which has query parameters * encode uri component of the rss feed url * use descriminated unions to differetiate rss and newsletter subscription --- .../queries/useGetSubscriptionsQuery.tsx | 12 +++++++++- packages/web/pages/settings/feeds/index.tsx | 15 ++++++++++--- packages/web/pages/settings/shortcuts.tsx | 22 +++++++++---------- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/packages/web/lib/networking/queries/useGetSubscriptionsQuery.tsx b/packages/web/lib/networking/queries/useGetSubscriptionsQuery.tsx index d4afc71aa..d24275dd6 100644 --- a/packages/web/lib/networking/queries/useGetSubscriptionsQuery.tsx +++ b/packages/web/lib/networking/queries/useGetSubscriptionsQuery.tsx @@ -33,7 +33,17 @@ export type Subscription = { failedAt?: string fetchContentType?: FetchContentType -} +} & ( + | { + type: SubscriptionType.NEWSLETTER + unsubscribeMailTo?: string + unsubscribeHttpUrl?: string + } + | { + type: SubscriptionType.RSS + url: string + } +) type SubscriptionsQueryResponse = { error: any diff --git a/packages/web/pages/settings/feeds/index.tsx b/packages/web/pages/settings/feeds/index.tsx index ebdcb860f..6f95e21cf 100644 --- a/packages/web/pages/settings/feeds/index.tsx +++ b/packages/web/pages/settings/feeds/index.tsx @@ -1,5 +1,5 @@ -import { useRouter } from 'next/router' import { FloppyDisk, Pencil, XCircle } from '@phosphor-icons/react' +import { useRouter } from 'next/router' import { useMemo, useState } from 'react' import { FormInput } from '../../../components/elements/FormElements' import { @@ -22,6 +22,7 @@ import { } from '../../../lib/networking/mutations/updateSubscriptionMutation' import { FetchContentType, + Subscription, SubscriptionStatus, SubscriptionType, useGetSubscriptionsQuery, @@ -32,9 +33,13 @@ import { formatMessage } from '../../../locales/en/messages' export default function Rss(): JSX.Element { const router = useRouter() - const { subscriptions, revalidate, isValidating } = useGetSubscriptionsQuery( + const subscriptionsResponse = useGetSubscriptionsQuery( SubscriptionType.RSS ) + const subscriptions = subscriptionsResponse.subscriptions as Array< + Subscription & { type: SubscriptionType.RSS } + > + const { isValidating, revalidate } = subscriptionsResponse const [onDeleteId, setOnDeleteId] = useState('') const [onEditId, setOnEditId] = useState('') const [onEditName, setOnEditName] = useState('') @@ -266,7 +271,11 @@ export default function Rss(): JSX.Element { } onClick={() => { - router.push(`/home?q=in:inbox rss:"${subscription.url}"`) + router.push( + `/home?q=in:inbox rss:"${encodeURIComponent( + subscription.url + )}"` + ) }} // extraElement={ // { ? `subscription:\"${escapeQuotes( subscription.name )}\"` - : `rss:\"${subscription.url}\"`, + : `rss:\"${encodeURIComponent(subscription.url)}\"`, } if (checked) { props.dispatchList({ From 322ca921b031046e740c56bb20ad30adf5f12c8b Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 23 Aug 2024 10:51:27 +0800 Subject: [PATCH 2/4] improve search --- packages/api/src/services/library_item.ts | 7 +++---- packages/api/src/utils/search.ts | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index ca538ec3e..9a945a3a4 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -324,17 +324,16 @@ export const buildQueryString = ( // return only deleted pages within 14 days return "(library_item.state = 'DELETED' AND library_item.deleted_at >= NOW() - INTERVAL '14 days')" default: { - let sql = 'library_item.archived_at IS NULL' if (useFolders) { const param = `folder_${parameters.length}` const folderSql = escapeQueryWithParameters( `library_item.folder = :${param}`, { [param]: value } ) - sql = `(${sql} AND ${folderSql})` + return `(library_item.archived_at IS NULL AND ${folderSql})` } - return sql + return '(library_item.archived_at IS NULL AND library_item.folder IS NOT NULL)' } } } @@ -656,7 +655,7 @@ export const createSearchQueryBuilder = ( const orders: Sort[] = [] let queryString: string | null = null - if (args.query) { + if (args.query !== null && args.query !== undefined) { const searchQuery = parseSearchQuery(args.query) // build query string and save parameters diff --git a/packages/api/src/utils/search.ts b/packages/api/src/utils/search.ts index 871c1d984..1fcbf7f11 100644 --- a/packages/api/src/utils/search.ts +++ b/packages/api/src/utils/search.ts @@ -17,7 +17,7 @@ export const parseSearchQuery = (query: string): LiqeQuery => { // by default we want to search in the inbox if no in: is specified if (!searchQuery.includes('in:')) { - searchQuery = `(${searchQuery}) in:inbox` + searchQuery = `in:inbox (${searchQuery})` } return parse(searchQuery) From bb9967a209659ae4b3c625473eb10fc91ab22fcd Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 26 Aug 2024 14:14:30 +0800 Subject: [PATCH 3/4] Revert "improve search" This reverts commit b2cf7d25d9a1da46a2f20c874a211158306b0e1c. --- packages/api/src/services/library_item.ts | 7 ++++--- packages/api/src/utils/search.ts | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index 9a945a3a4..ca538ec3e 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -324,16 +324,17 @@ export const buildQueryString = ( // return only deleted pages within 14 days return "(library_item.state = 'DELETED' AND library_item.deleted_at >= NOW() - INTERVAL '14 days')" default: { + let sql = 'library_item.archived_at IS NULL' if (useFolders) { const param = `folder_${parameters.length}` const folderSql = escapeQueryWithParameters( `library_item.folder = :${param}`, { [param]: value } ) - return `(library_item.archived_at IS NULL AND ${folderSql})` + sql = `(${sql} AND ${folderSql})` } - return '(library_item.archived_at IS NULL AND library_item.folder IS NOT NULL)' + return sql } } } @@ -655,7 +656,7 @@ export const createSearchQueryBuilder = ( const orders: Sort[] = [] let queryString: string | null = null - if (args.query !== null && args.query !== undefined) { + if (args.query) { const searchQuery = parseSearchQuery(args.query) // build query string and save parameters diff --git a/packages/api/src/utils/search.ts b/packages/api/src/utils/search.ts index 1fcbf7f11..871c1d984 100644 --- a/packages/api/src/utils/search.ts +++ b/packages/api/src/utils/search.ts @@ -17,7 +17,7 @@ export const parseSearchQuery = (query: string): LiqeQuery => { // by default we want to search in the inbox if no in: is specified if (!searchQuery.includes('in:')) { - searchQuery = `in:inbox (${searchQuery})` + searchQuery = `(${searchQuery}) in:inbox` } return parse(searchQuery) From c7406da834623599ea6882f52b84a38600508fc7 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 27 Aug 2024 09:22:34 +0800 Subject: [PATCH 4/4] stop using home for queries --- packages/web/pages/settings/feeds/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/pages/settings/feeds/index.tsx b/packages/web/pages/settings/feeds/index.tsx index 6f95e21cf..e8b4bd58c 100644 --- a/packages/web/pages/settings/feeds/index.tsx +++ b/packages/web/pages/settings/feeds/index.tsx @@ -272,7 +272,7 @@ export default function Rss(): JSX.Element { } onClick={() => { router.push( - `/home?q=in:inbox rss:"${encodeURIComponent( + `/search?q=in:inbox rss:"${encodeURIComponent( subscription.url )}"` )