From ffd7259523c67911b884029bdc1dae9b09530e29 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 23 Nov 2022 16:28:38 +0800 Subject: [PATCH] Add read filter --- packages/rule-handler/src/index.ts | 1 + packages/rule-handler/src/rule.ts | 6 +++++- .../src/search_filter/content_filter.ts | 4 +--- packages/rule-handler/src/search_filter/index.ts | 4 ++-- .../src/search_filter/read_filter.ts | 16 ++++++++++++++++ .../src/search_filter/subscription_filter.ts | 6 ++---- 6 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 packages/rule-handler/src/search_filter/read_filter.ts diff --git a/packages/rule-handler/src/index.ts b/packages/rule-handler/src/index.ts index f2274cccf..316861c24 100644 --- a/packages/rule-handler/src/index.ts +++ b/packages/rule-handler/src/index.ts @@ -25,6 +25,7 @@ export interface PubSubData { subscription: string image: string content: string + readingProgressPercent: number } enum EntityType { diff --git a/packages/rule-handler/src/rule.ts b/packages/rule-handler/src/rule.ts index df89c9039..f38e99a5c 100644 --- a/packages/rule-handler/src/rule.ts +++ b/packages/rule-handler/src/rule.ts @@ -7,6 +7,7 @@ import { archivePage, markPageAsRead } from './page' import { SearchFilter } from './search_filter' import { SubscriptionFilter } from './search_filter/subscription_filter' import { ContentFilter } from './search_filter/content_filter' +import { ReadFilter } from './search_filter/read_filter' export enum RuleActionType { AddLabel = 'ADD_LABEL', @@ -41,7 +42,7 @@ const parseSearchFilter = (filter: string): SearchFilter[] => { } const parsed = parse(searchFilter, { - keywords: ['subscription', 'content'], + keywords: ['subscription', 'content', 'is'], tokenize: true, }) if (parsed.offsets) { @@ -57,6 +58,9 @@ const parseSearchFilter = (filter: string): SearchFilter[] => { case 'content': keyword.value && result.push(new ContentFilter(keyword.value)) break + case 'is': + keyword.value && result.push(new ReadFilter(keyword.value)) + break } } } diff --git a/packages/rule-handler/src/search_filter/content_filter.ts b/packages/rule-handler/src/search_filter/content_filter.ts index 822c27b0d..0207c79a2 100644 --- a/packages/rule-handler/src/search_filter/content_filter.ts +++ b/packages/rule-handler/src/search_filter/content_filter.ts @@ -3,13 +3,11 @@ import { PubSubData } from '../index' export class ContentFilter extends SearchFilter { public isValid(data: PubSubData): boolean { - console.debug('ContentFilter.isValid', this.filter, data.content) - if (!data.content) { return false } // TODO: implement content filter with semantic search - return this.filter === '*' || data.content.includes(this.filter) + return this.query === '*' || data.content.includes(this.query) } } diff --git a/packages/rule-handler/src/search_filter/index.ts b/packages/rule-handler/src/search_filter/index.ts index 37461efbc..adb2230c9 100644 --- a/packages/rule-handler/src/search_filter/index.ts +++ b/packages/rule-handler/src/search_filter/index.ts @@ -1,8 +1,8 @@ import { PubSubData } from '../index' export abstract class SearchFilter { - constructor(protected filter: string) { - this.filter = filter + constructor(protected query: string) { + this.query = query } public abstract isValid(data: PubSubData): boolean diff --git a/packages/rule-handler/src/search_filter/read_filter.ts b/packages/rule-handler/src/search_filter/read_filter.ts new file mode 100644 index 000000000..7d4904b2a --- /dev/null +++ b/packages/rule-handler/src/search_filter/read_filter.ts @@ -0,0 +1,16 @@ +import { PubSubData } from '../index' +import { SearchFilter } from './index' + +export class ReadFilter extends SearchFilter { + public isValid(data: PubSubData): boolean { + if (!data.readingProgressPercent) { + return false + } + + if (this.query === 'read') { + return data.readingProgressPercent >= 98 + } + + return data.readingProgressPercent < 98 + } +} diff --git a/packages/rule-handler/src/search_filter/subscription_filter.ts b/packages/rule-handler/src/search_filter/subscription_filter.ts index 43893c318..ac2f4ee73 100644 --- a/packages/rule-handler/src/search_filter/subscription_filter.ts +++ b/packages/rule-handler/src/search_filter/subscription_filter.ts @@ -3,16 +3,14 @@ import { PubSubData } from '../index' export class SubscriptionFilter extends SearchFilter { public isValid(data: PubSubData): boolean { - console.debug('SubscriptionFilter.isValid', this.filter, data.subscription) - if (!data.subscription) { return false } // compare subscription name case insensitive return ( - this.filter === '*' || - data.subscription.toLowerCase() === this.filter.toLowerCase() + this.query === '*' || + data.subscription.toLowerCase() === this.query.toLowerCase() ) } }