mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-16 08:27:07 +00:00
add aden's requested changes
This commit is contained in:
@@ -1,12 +1,19 @@
|
||||
import browser from "webextension-polyfill";
|
||||
import {
|
||||
ensureSyncableStorageDefaults,
|
||||
getSyncableStorageDefaults,
|
||||
} from "@/seqta/utils/ensureSyncableStorageDefaults";
|
||||
import {
|
||||
applyDownloadedEnvelope,
|
||||
buildUploadPayload,
|
||||
BSPLUS_CLOUD_KNOWN_REMOTE_UPDATED_AT_KEY,
|
||||
BSPLUS_PENDING_THEME_ENSURE_AFTER_CLOUD_KEY,
|
||||
buildUploadPatch,
|
||||
CLOUD_SETTINGS_SYNC_SCHEMA_VERSION,
|
||||
isKeyIncludedInCloudUploadPayload,
|
||||
normalizeStorageForSync,
|
||||
resolveThemeIdForPostSyncDownload,
|
||||
saveLastUploadedSnapshot,
|
||||
getLastUploadedSnapshot,
|
||||
setKnownRemoteUpdatedAt,
|
||||
} from "@/seqta/utils/cloudSettingsSync";
|
||||
|
||||
@@ -138,13 +145,38 @@ async function fetchCloudSummaryWithAuthRetry(
|
||||
}
|
||||
|
||||
type PutResult =
|
||||
| { ok: true; updated_at?: string }
|
||||
| { ok: true; updated_at?: string; skipped?: boolean }
|
||||
| { ok: false; unauthorized: boolean; error?: string };
|
||||
|
||||
async function resolveUploadBaseline(
|
||||
normalized: Record<string, unknown>,
|
||||
watermark: string | undefined,
|
||||
): Promise<Record<string, unknown>> {
|
||||
const lastSnapshot = await getLastUploadedSnapshot();
|
||||
if (lastSnapshot) return lastSnapshot;
|
||||
|
||||
if (watermark) {
|
||||
await saveLastUploadedSnapshot(normalized);
|
||||
return normalized;
|
||||
}
|
||||
|
||||
return getSyncableStorageDefaults();
|
||||
}
|
||||
|
||||
async function putSettingsOnce(token: string): Promise<PutResult> {
|
||||
try {
|
||||
const all = await browser.storage.local.get();
|
||||
const payload = buildUploadPayload(all as Record<string, unknown>);
|
||||
await ensureSyncableStorageDefaults();
|
||||
|
||||
const all = (await browser.storage.local.get()) as Record<string, unknown>;
|
||||
const normalized = normalizeStorageForSync(all);
|
||||
const watermark = all[BSPLUS_CLOUD_KNOWN_REMOTE_UPDATED_AT_KEY] as string | undefined;
|
||||
const baseline = await resolveUploadBaseline(normalized, watermark);
|
||||
const payload = buildUploadPatch(all, baseline);
|
||||
|
||||
if (!payload) {
|
||||
return { ok: true, skipped: true };
|
||||
}
|
||||
|
||||
const r = await fetch(CLOUD_SETTINGS_SYNC_URL, {
|
||||
method: "PUT",
|
||||
headers: {
|
||||
@@ -163,6 +195,7 @@ async function putSettingsOnce(token: string): Promise<PutResult> {
|
||||
};
|
||||
}
|
||||
const updated_at = data?.updated_at as string | undefined;
|
||||
await saveLastUploadedSnapshot(normalized);
|
||||
await setKnownRemoteUpdatedAt(updated_at);
|
||||
return { ok: true, updated_at };
|
||||
} catch (e) {
|
||||
@@ -176,11 +209,13 @@ async function putSettingsOnce(token: string): Promise<PutResult> {
|
||||
|
||||
export async function performCloudSettingsUploadWithRetry(
|
||||
token: string,
|
||||
): Promise<{ success: boolean; error?: string; updated_at?: string }> {
|
||||
): Promise<{ success: boolean; error?: string; updated_at?: string; skipped?: boolean }> {
|
||||
let t = token;
|
||||
for (let attempt = 0; attempt < 2; attempt++) {
|
||||
const res = await putSettingsOnce(t);
|
||||
if (res.ok) return { success: true, updated_at: res.updated_at };
|
||||
if (res.ok) {
|
||||
return { success: true, updated_at: res.updated_at, skipped: res.skipped };
|
||||
}
|
||||
if (res.unauthorized && attempt === 0) {
|
||||
const refreshed = await tryRefreshTokens();
|
||||
if (!refreshed) return { success: false, error: "Not authenticated" };
|
||||
@@ -234,6 +269,9 @@ async function getSettingsAndApplyOnce(token: string): Promise<GetResult> {
|
||||
reloadSeqtaPagesFn?.();
|
||||
const updated_at = data?.updated_at as string | undefined;
|
||||
await setKnownRemoteUpdatedAt(updated_at);
|
||||
await saveLastUploadedSnapshot(
|
||||
normalizeStorageForSync((await browser.storage.local.get()) as Record<string, unknown>),
|
||||
);
|
||||
return { ok: true, updated_at };
|
||||
} catch (e) {
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user