Work on Editor and HomeScreen

This commit is contained in:
2025-06-24 13:05:25 -07:00
parent a3ec5477e5
commit af3eae56c8
8 changed files with 624 additions and 330 deletions
+31 -11
View File
@@ -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,