mirror of
https://github.com/XFox111/TabsAsideExtension.git
synced 2026-04-22 07:58:01 +03:00
e21022d985
* Some features are now optional (#148) * fix(dev): yarn.lock tree fix * feat: bookmarks moved to optional permissions * fix: analytics not working in firefox * feat!: ability to turn off analytics (uses permissions on firefox) * feat: analytics tracker for bookmark export * feat: add privacy policy link in about section * docs: privacy policy update * feat: ability to chain multiple dialogs * fix(loc): analytics option translation * feat: settings review dialog * fix: background script fails to load because of frontend code * chore: use analytics permission as storage value * fix: inverted analytics value * feat!: option to disable thumbnail capture * fix(ci): sed typo * fix: minor fixes * fix(firefox): web-ext lint error fix * chore(ci): switch web-ext action * chore(lint): fix eslint warnings * chore(deps): monthly dependency bump (September 2025) (#149) * chore: 3.1.0 version bump * chore: minor cleanup * fix: allow analytics checkbox stays inactive after denying permission on firefox * fix(deps): yarn.lock rebuild * fix: type assertion for userId * fix: settings review dialog not showing if welcome dialog is not required * fix: analytics and thumbnail capture toggles react incorrectly if permission is denied
62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
import { CollectionItem, TabItem } from "@/models/CollectionModels";
|
|
import sendNotification from "@/utils/sendNotification";
|
|
import { Bookmarks, Permissions } from "wxt/browser";
|
|
import { getCollectionTitle } from "./getCollectionTitle";
|
|
import { track } from "@/features/analytics";
|
|
|
|
export default async function exportCollectionToBookmarks(collection: CollectionItem)
|
|
{
|
|
const permissions: Permissions.AnyPermissions = await browser.permissions.getAll();
|
|
|
|
if (!permissions.permissions?.includes("bookmarks"))
|
|
{
|
|
const granted: boolean = await browser.permissions.request({ permissions: ["bookmarks"] });
|
|
|
|
if (!granted)
|
|
return;
|
|
}
|
|
|
|
const rootFolder: Bookmarks.BookmarkTreeNode = await browser.bookmarks.create({
|
|
title: getCollectionTitle(collection)
|
|
});
|
|
|
|
for (let i = 0; i < collection.items.length; i++)
|
|
{
|
|
const item = collection.items[i];
|
|
|
|
if (item.type === "tab")
|
|
{
|
|
await createTabBookmark(item, rootFolder.id);
|
|
}
|
|
else
|
|
{
|
|
const groupFolder = await browser.bookmarks.create({
|
|
parentId: rootFolder.id,
|
|
title: item.pinned
|
|
? `📌 ${i18n.t("groups.pinned")}` :
|
|
(item.title?.trim() || `${i18n.t("groups.title")} ${i}`)
|
|
});
|
|
|
|
for (const tab of item.items)
|
|
await createTabBookmark(tab, groupFolder.id);
|
|
}
|
|
}
|
|
|
|
track("bookmarks_saved");
|
|
|
|
await sendNotification({
|
|
title: i18n.t("notifications.bookmark_saved.title"),
|
|
message: i18n.t("notifications.bookmark_saved.message"),
|
|
icon: "/notification_icons/bookmark_add.png"
|
|
});
|
|
}
|
|
|
|
async function createTabBookmark(tab: TabItem, parentId: string): Promise<void>
|
|
{
|
|
await browser.bookmarks.create({
|
|
parentId,
|
|
title: tab.title?.trim() || tab.url,
|
|
url: tab.url
|
|
});
|
|
};
|