1
0
mirror of https://github.com/XFox111/TabsAsideExtension.git synced 2026-04-22 07:58:01 +03:00
Files
TabsAsideExtension/features/collectionStorage/utils/getCollections.ts
T
2025-05-05 19:25:25 +03:00

42 lines
1.4 KiB
TypeScript

import { trackError } from "@/features/analytics";
import { CollectionItem } from "@/models/CollectionModels";
import getLogger from "@/utils/getLogger";
import { collectionStorage } from "./collectionStorage";
import getCollectionsFromCloud from "./getCollectionsFromCloud";
import getCollectionsFromLocal from "./getCollectionsFromLocal";
import saveCollectionsToLocal from "./saveCollectionsToLocal";
const logger = getLogger("getCollections");
export default async function getCollections(): Promise<[CollectionItem[], CloudStorageIssueType | null]>
{
if (await collectionStorage.disableCloud.getValue() === true)
return [await getCollectionsFromLocal(), null];
const lastUpdatedLocal: number = await collectionStorage.localLastUpdated.getValue();
const lastUpdatedSync: number = await collectionStorage.syncLastUpdated.getValue();
if (lastUpdatedLocal === lastUpdatedSync)
return [await getCollectionsFromLocal(), null];
if (lastUpdatedLocal > lastUpdatedSync)
return [await getCollectionsFromLocal(), "merge_conflict"];
try
{
const collections: CollectionItem[] = await getCollectionsFromCloud();
await saveCollectionsToLocal(collections, lastUpdatedSync);
return [collections, null];
}
catch (ex)
{
logger("Failed to get cloud storage");
console.error(ex);
trackError("cloud_get_error", ex as Error);
return [await getCollectionsFromLocal(), "parse_error"];
}
}
export type CloudStorageIssueType = "parse_error" | "merge_conflict";