diff options
Diffstat (limited to 'src/background/completion/impl/HistoryRepositoryImpl.ts')
-rw-r--r-- | src/background/completion/impl/HistoryRepositoryImpl.ts | 62 |
1 files changed, 10 insertions, 52 deletions
diff --git a/src/background/completion/impl/HistoryRepositoryImpl.ts b/src/background/completion/impl/HistoryRepositoryImpl.ts index 3bf064e..789b393 100644 --- a/src/background/completion/impl/HistoryRepositoryImpl.ts +++ b/src/background/completion/impl/HistoryRepositoryImpl.ts @@ -1,49 +1,10 @@ import * as filters from "./filters"; import HistoryRepository, { HistoryItem } from "../HistoryRepository"; -import PrefetchAndCache from "./PrefetchAndCache"; const COMPLETION_ITEM_LIMIT = 10; -export default class CachedHistoryRepository implements HistoryRepository { - private historyCache: PrefetchAndCache<browser.history.HistoryItem>; - - constructor() { - this.historyCache = new PrefetchAndCache(this.getter, this.filter, 10); - } - +export default class HistoryRepositoryImpl implements HistoryRepository { async queryHistories(keywords: string): Promise<HistoryItem[]> { - const items = await this.historyCache.get(keywords); - - const filterOrKeep = <T>( - source: T[], - filter: (items: T[]) => T[], - min: number - ): T[] => { - const filtered = filter(source); - if (filtered.length < min) { - return source; - } - return filtered; - }; - - return [items] - .map((items) => - filterOrKeep(items, filters.filterByPathname, COMPLETION_ITEM_LIMIT) - ) - .map((items) => - filterOrKeep(items, filters.filterByOrigin, COMPLETION_ITEM_LIMIT) - )[0] - .sort((x, y) => Number(y.visitCount) - Number(x.visitCount)) - .slice(0, COMPLETION_ITEM_LIMIT) - .map((item) => ({ - title: item.title!, - url: item.url!, - })); - } - - private async getter( - keywords: string - ): Promise<browser.history.HistoryItem[]> { const items = await browser.history.search({ text: keywords, startTime: 0, @@ -52,17 +13,14 @@ export default class CachedHistoryRepository implements HistoryRepository { return [items] .map(filters.filterBlankTitle) .map(filters.filterHttp) - .map(filters.filterByTailingSlash)[0]; - } - - private filter(items: browser.history.HistoryItem[], query: string) { - return items.filter((item) => { - return query.split(" ").every((keyword) => { - return ( - item.title!.toLowerCase().includes(keyword.toLowerCase()) || - item.url!.includes(keyword) - ); - }); - }); + .map(filters.filterByTailingSlash) + .map((pages) => filters.filterByPathname(pages, COMPLETION_ITEM_LIMIT)) + .map((pages) => filters.filterByOrigin(pages, COMPLETION_ITEM_LIMIT))[0] + .sort((x, y) => Number(y.visitCount) - Number(x.visitCount)) + .slice(0, COMPLETION_ITEM_LIMIT) + .map((item) => ({ + title: item.title!, + url: item.url!, + })); } } |