mirror of
https://github.com/XFox111/TabsAsideExtension.git
synced 2026-04-22 07:58:01 +03:00
81 lines
1.9 KiB
TypeScript
81 lines
1.9 KiB
TypeScript
import { CollectionItem, GroupItem, TabItem } from "@/models/CollectionModels";
|
|
|
|
export default function parseCollections(data: string): CollectionItem[]
|
|
{
|
|
if (!data)
|
|
return [];
|
|
|
|
const collections: CollectionItem[] = [];
|
|
const lines: string[] = data.split("\n");
|
|
|
|
for (const line of lines)
|
|
{
|
|
if (line.startsWith("c"))
|
|
{
|
|
const collection: CollectionItem = parseCollection(line);
|
|
collections.push(collection);
|
|
}
|
|
else if (line.startsWith("\tg"))
|
|
{
|
|
const group: GroupItem = parseGroup(line);
|
|
collections[collections.length - 1].items.push(group);
|
|
}
|
|
else if (line.startsWith("\t\tt"))
|
|
{
|
|
const tab: TabItem = parseTab(line);
|
|
|
|
const collectionIndex: number = collections.length - 1;
|
|
const groupIndex: number = collections[collectionIndex].items.length - 1;
|
|
|
|
(collections[collectionIndex].items[groupIndex] as GroupItem).items.push(tab);
|
|
}
|
|
else if (line.startsWith("\tt"))
|
|
{
|
|
const tab: TabItem = parseTab(line);
|
|
collections[collections.length - 1].items.push(tab);
|
|
}
|
|
}
|
|
|
|
return collections;
|
|
}
|
|
|
|
function parseCollection(data: string): CollectionItem
|
|
{
|
|
return {
|
|
type: "collection",
|
|
timestamp: parseInt(data.match(/(?<=^c)\d+/)!.toString()),
|
|
color: data.match(/(?<=^c\d+\/)[a-z]+/)?.toString() as chrome.tabGroups.ColorEnum,
|
|
title: data.match(/(?<=^c[\da-z/]*\|).*/)?.toString(),
|
|
items: []
|
|
};
|
|
}
|
|
|
|
function parseGroup(data: string): GroupItem
|
|
{
|
|
const isPinned: boolean = data.match(/^\tg\/p$/) !== null;
|
|
|
|
if (isPinned)
|
|
return {
|
|
type: "group",
|
|
pinned: true,
|
|
items: []
|
|
};
|
|
|
|
return {
|
|
type: "group",
|
|
pinned: false,
|
|
color: data.match(/(?<=^\tg\/)[a-z]+/)?.toString() as chrome.tabGroups.ColorEnum,
|
|
title: data.match(/(?<=^\tg\/[a-z]+\|).*$/)?.toString(),
|
|
items: []
|
|
};
|
|
}
|
|
|
|
function parseTab(data: string): TabItem
|
|
{
|
|
return {
|
|
type: "tab",
|
|
url: data.match(/(?<=^(\t){1,2}t\|).*(?=\|)/)!.toString(),
|
|
title: data.match(/(?<=^(\t){1,2}t\|.*\|).*$/)?.toString()
|
|
};
|
|
}
|