aboutsummaryrefslogtreecommitdiff
path: root/src/background/completion/impl
diff options
context:
space:
mode:
Diffstat (limited to 'src/background/completion/impl')
-rw-r--r--src/background/completion/impl/TabRepositoryImpl.ts27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/background/completion/impl/TabRepositoryImpl.ts b/src/background/completion/impl/TabRepositoryImpl.ts
new file mode 100644
index 0000000..6692b27
--- /dev/null
+++ b/src/background/completion/impl/TabRepositoryImpl.ts
@@ -0,0 +1,27 @@
+import TabRepository, { Tab } from "../TabRepository";
+
+const COMPLETION_ITEM_LIMIT = 10;
+
+export default class TabRepositoryImpl implements TabRepository {
+ async queryTabs(query: string, excludePinned: boolean): Promise<Tab[]> {
+ const tabs = await browser.tabs.query({ currentWindow: true });
+ return tabs
+ .filter((t) => {
+ return t.url && t.url.toLowerCase().includes(query.toLowerCase()) ||
+ t.title && t.title.toLowerCase().includes(query.toLowerCase());
+ })
+ .filter((t) => {
+ return !(excludePinned && t.pinned);
+ })
+ .filter(item => item.id && item.title && item.url)
+ .slice(0, COMPLETION_ITEM_LIMIT)
+ .map(item => ({
+ id: item.id!!,
+ url: item.url!!,
+ active: item.active,
+ title: item.title!!,
+ faviconUrl: item.favIconUrl,
+ index: item.index,
+ }))
+ }
+} \ No newline at end of file