distant storage
This commit is contained in:
@@ -1,7 +1,18 @@
|
|||||||
import { StatusBar } from 'expo-status-bar';
|
import { StatusBar } from 'expo-status-bar';
|
||||||
import { StyleSheet, Text, View } from 'react-native';
|
import { StyleSheet, Text, View } from 'react-native';
|
||||||
|
import { pickDirectory } from '../services/safDirectory';
|
||||||
|
import { useEffect } from 'react';
|
||||||
|
import { saveDirectory } from '../services/localStorage';
|
||||||
|
|
||||||
export default function Index() {
|
export default function Index() {
|
||||||
|
|
||||||
|
useEffect(()=>{
|
||||||
|
pickDirectory().then((value) => {
|
||||||
|
if ( !value ) return;
|
||||||
|
saveDirectory(value)
|
||||||
|
})
|
||||||
|
},[])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
<Text style={styles.title}>Dot.</Text>
|
<Text style={styles.title}>Dot.</Text>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { createContext, useCallback, useContext, useMemo, useState } from 'react';
|
import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';
|
||||||
import type { ReactNode } from 'react';
|
import type { ReactNode } from 'react';
|
||||||
|
import { useSyncDevice } from '../features/syncDevice';
|
||||||
|
|
||||||
export type User = {
|
export type User = {
|
||||||
};
|
};
|
||||||
@@ -11,6 +12,11 @@ type AuthContextValue = {
|
|||||||
const AuthContext = createContext<AuthContextValue | null>(null);
|
const AuthContext = createContext<AuthContextValue | null>(null);
|
||||||
|
|
||||||
export function AuthProvider({ children }: { children: ReactNode }) {
|
export function AuthProvider({ children }: { children: ReactNode }) {
|
||||||
|
|
||||||
|
useEffect(()=>{
|
||||||
|
const {} = useSyncDevice()
|
||||||
|
},[])
|
||||||
|
|
||||||
const [user, setUser] = useState<User | null>(null);
|
const [user, setUser] = useState<User | null>(null);
|
||||||
|
|
||||||
const value = useMemo(() => ({ user }), [user]);
|
const value = useMemo(() => ({ user }), [user]);
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
import { getUserPreferences } from "../services/localStorage";
|
||||||
|
import type { UserPreferences } from "../services/localStorage"
|
||||||
|
|
||||||
|
let syncStartedAt: null | number = null;
|
||||||
|
|
||||||
|
export async function useSyncDevice() {
|
||||||
|
|
||||||
|
initialize()
|
||||||
|
|
||||||
|
async function initialize() {
|
||||||
|
|
||||||
|
if ( syncStartedAt ) return;
|
||||||
|
|
||||||
|
syncStartedAt = Date.UTC(Date.now());
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
|
||||||
|
await sync()
|
||||||
|
|
||||||
|
await new Promise((resolve)=>{
|
||||||
|
setTimeout(() => {
|
||||||
|
resolve(true)
|
||||||
|
}, 1000);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async function sync() {
|
||||||
|
|
||||||
|
console.info("Sync started")
|
||||||
|
|
||||||
|
const userPreferences = await getUserPreferences()
|
||||||
|
|
||||||
|
console.log(userPreferences)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async function setSyncMode( mode: UserPreferences ) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
import { Folder } from "./safDirectory"
|
||||||
|
|
||||||
|
const folders = new Map<Folder['uri'],FolderContext>();
|
||||||
|
|
||||||
|
type FolderContext = {
|
||||||
|
syncStatus: 'local' | 'cloud' | 'local-cloud'
|
||||||
|
addedAt: number // UTC DATE
|
||||||
|
folder: Folder
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function saveDirectory(folder: Folder): Promise<boolean> {
|
||||||
|
|
||||||
|
const ctx = {
|
||||||
|
syncStatus: 'local',
|
||||||
|
addedAt: Date.UTC(Date.now()),
|
||||||
|
folder: folder,
|
||||||
|
} satisfies FolderContext;
|
||||||
|
|
||||||
|
folders.set(folder.uri,ctx)
|
||||||
|
|
||||||
|
return new Promise(()=> true)
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getFolders(): Promise<FolderContext[]>{
|
||||||
|
|
||||||
|
return new Promise(()=> folders.values())
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export type UserPreferences = {
|
||||||
|
syncMode: 'full' | 'manual' | 'none'
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getUserPreferences(): Promise<UserPreferences> {
|
||||||
|
|
||||||
|
return new Promise(()=>{
|
||||||
|
return {
|
||||||
|
syncMode: 'full'
|
||||||
|
} satisfies UserPreferences
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user