1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import { Updater } from "../typing";
- import { StoreKey } from "../constant";
- import { createPersistStore } from "../utils/store";
- import {
- AppState,
- getLocalAppState,
- mergeAppState,
- setLocalAppState,
- } from "../utils/sync";
- import { downloadAs, readFromFile } from "../utils";
- import { showToast } from "../components/ui-lib";
- import Locale from "../locales";
- export interface WebDavConfig {
- server: string;
- username: string;
- password: string;
- }
- export const useSyncStore = createPersistStore(
- {
- webDavConfig: {
- server: "",
- username: "",
- password: "",
- },
- lastSyncTime: 0,
- },
- (set, get) => ({
- export() {
- const state = getLocalAppState();
- const fileName = `Backup-${new Date().toLocaleString()}.json`;
- downloadAs(JSON.stringify(state), fileName);
- set({ lastSyncTime: Date.now() });
- },
- async import() {
- const rawContent = await readFromFile();
- try {
- const remoteState = JSON.parse(rawContent) as AppState;
- const localState = getLocalAppState();
- mergeAppState(localState, remoteState);
- setLocalAppState(localState);
- location.reload();
- } catch (e) {
- console.error("[Import]", e);
- showToast(Locale.Settings.Sync.ImportFailed);
- }
- },
- async check() {
- try {
- const res = await fetch(this.path(""), {
- method: "PROFIND",
- headers: this.headers(),
- });
- console.log(res);
- return res.status === 207;
- } catch (e) {
- console.error("[Sync] ", e);
- return false;
- }
- },
- path(path: string) {
- let url = get().webDavConfig.server;
- if (!url.endsWith("/")) {
- url += "/";
- }
- if (path.startsWith("/")) {
- path = path.slice(1);
- }
- return url + path;
- },
- headers() {
- const auth = btoa(
- [get().webDavConfig.username, get().webDavConfig.password].join(":"),
- );
- return {
- Authorization: `Basic ${auth}`,
- };
- },
- }),
- {
- name: StoreKey.Sync,
- version: 1,
- },
- );
|