diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index 515abdb6b..dbb0a0998 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -46,6 +46,7 @@ export interface SearchArgs { includeContent?: boolean noFilters?: NoFilter[] rangeFilters?: RangeFilter[] + useFolders?: boolean } export interface SearchResultItem { @@ -106,9 +107,14 @@ const buildWhereClause = ( if (args.inFilter !== InFilter.ALL) { switch (args.inFilter) { - case InFilter.INBOX: + case InFilter.INBOX: { + // if useFolders is true, we only return items in the inbox folder + args.useFolders && + queryBuilder.andWhere("library_item.folder = 'inbox'") + // for old clients, we return items that are not archived queryBuilder.andWhere('library_item.archived_at IS NULL') break + } case InFilter.ARCHIVE: queryBuilder.andWhere('library_item.archived_at IS NOT NULL') break diff --git a/packages/api/src/utils/search.ts b/packages/api/src/utils/search.ts index dde0e019d..bfd0fe1e0 100644 --- a/packages/api/src/utils/search.ts +++ b/packages/api/src/utils/search.ts @@ -42,6 +42,7 @@ export interface SearchFilter { recommendedBy?: string noFilters: NoFilter[] rangeFilters: RangeFilter[] + useFolders?: boolean } export enum LabelFilterType { @@ -444,6 +445,7 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => { 'rss', 'wordsCount', 'readPosition', + 'use', ], tokenize: true, }) @@ -546,6 +548,9 @@ export const parseSearchQuery = (query: string | undefined): SearchFilter => { rangeFilter && result.rangeFilters.push(rangeFilter) break } + case 'use': + result.useFolders = keyword.value === 'folders' + break } } }