Work on Editor and HomeScreen
This commit is contained in:
+31
-11
@@ -3,6 +3,7 @@ import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
import * as FileSystem from 'expo-file-system';
|
||||
import { DATA_DIRECTORY_URI_KEY } from '@/constants/Settings';
|
||||
import { StorageAccessFramework } from 'expo-file-system';
|
||||
import { format } from 'date-fns';
|
||||
|
||||
interface FileEntry {
|
||||
name: string;
|
||||
@@ -21,16 +22,20 @@ interface FileInfoWithSize {
|
||||
size: number;
|
||||
}
|
||||
|
||||
function datetimeFromFilename(filename: string): Date {
|
||||
const match = filename.match(/(\d+)\.md$/);
|
||||
function datetimeFromFilename(filename: string): string {
|
||||
const match = filename.match(/(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)\.md$/);
|
||||
if (match) {
|
||||
const datePart = parseInt(match[1]) * 1000; // Convert seconds to milliseconds
|
||||
const date = new Date(datePart);
|
||||
if (!isNaN(date.getTime())) {
|
||||
return date;
|
||||
}
|
||||
const [_, year, month, day, hour, minute, second] = match;
|
||||
return new Date(
|
||||
parseInt(year),
|
||||
parseInt(month) - 1,
|
||||
parseInt(day),
|
||||
parseInt(hour),
|
||||
parseInt(minute),
|
||||
parseInt(second)
|
||||
).toISOString();
|
||||
}
|
||||
return new Date();
|
||||
return new Date().toISOString();
|
||||
}
|
||||
|
||||
export function prettyName(uri: string | null, options: PrettyNameOptions = {}) {
|
||||
@@ -123,10 +128,19 @@ export function useFileSystem() {
|
||||
loadFiles();
|
||||
}, [loadFiles]);
|
||||
|
||||
const writeFile = useCallback(async (filename: string, content: string) => {
|
||||
const writeFile = useCallback(async (fileUriOrDatetime: string, content: string) => {
|
||||
if (!dataDirectoryUri) throw new Error('No directory selected');
|
||||
|
||||
const fileUri = `${dataDirectoryUri}/${filename}`;
|
||||
const fileUriDatetime = new Date(parseInt(fileUriOrDatetime) * 1000);
|
||||
let fileUri = fileUriOrDatetime;
|
||||
if (parseInt(fileUriOrDatetime)) { // If it's a datetime in seconds
|
||||
const filename = format(fileUriDatetime, 'yyyy-MM-dd-HH-mm-ss');
|
||||
fileUri = await StorageAccessFramework.createFileAsync(
|
||||
dataDirectoryUri,
|
||||
`${filename}.md`,
|
||||
'text/markdown'
|
||||
);
|
||||
}
|
||||
// const fileUri = `${dataDirectoryUri}/${filename}`;
|
||||
await FileSystem.writeAsStringAsync(fileUri, content);
|
||||
await loadFiles(); // Refresh file list
|
||||
}, [dataDirectoryUri, loadFiles]);
|
||||
@@ -138,6 +152,11 @@ export function useFileSystem() {
|
||||
return await FileSystem.readAsStringAsync(fileUri);
|
||||
}, [dataDirectoryUri]);
|
||||
|
||||
const deleteFile = useCallback(async (filename: string): Promise<void> => {
|
||||
return await FileSystem.deleteAsync(filename, { idempotent: true });
|
||||
}
|
||||
, []);
|
||||
|
||||
const saveDataDirectoryUri = useCallback(async (uri: string | null) => {
|
||||
try {
|
||||
if (uri) {
|
||||
@@ -164,6 +183,7 @@ export function useFileSystem() {
|
||||
files,
|
||||
writeFile,
|
||||
readFile,
|
||||
deleteFile,
|
||||
loadFiles,
|
||||
hasDirectory: !!dataDirectoryUri,
|
||||
directorySize,
|
||||
|
||||
Reference in New Issue
Block a user