diff --git a/src/kernel.ts b/src/kernel.ts index 89b8f4e..36ed759 100644 --- a/src/kernel.ts +++ b/src/kernel.ts @@ -1,10 +1,9 @@ import './assets/style.less' import { version } from '../package.json' import { v4 as uuid } from 'uuid' -import { Permission } from './system/lib/VirtualFS' import ProcessLib from './structures/ProcessLib' import ProcLib from './structures/ProcLib' -import { Executable, Process, Package, ProcessInfo, KernelConfig } from './types' +import { Executable, Process, Package, ProcessInfo, KernelConfig, Permission } from './types' import semver from 'semver' declare global { diff --git a/src/structures/ProcessLib.ts b/src/structures/ProcessLib.ts index 47e96c0..71155e9 100644 --- a/src/structures/ProcessLib.ts +++ b/src/structures/ProcessLib.ts @@ -1,7 +1,6 @@ import semver from 'semver' import Kernel from '../kernel' -import { Permission } from '../system/lib/VirtualFS' -import { Process, Executable, LibraryData, Package, Library } from '../types' +import { Process, Executable, LibraryData, Package, Library, Permission } from '../types' import FlowWindow from './FlowWindow' import LibraryLib from './LibraryLib' import ProcLib from './ProcLib' diff --git a/src/system/BootLoader.ts b/src/system/BootLoader.ts index 365cb02..d98306a 100644 --- a/src/system/BootLoader.ts +++ b/src/system/BootLoader.ts @@ -1,5 +1,5 @@ import HTML from '../HTML' -import { AppClosedEvent, AppOpenedEvent, Process } from '../types' +import { AppClosedEvent, AppOpenedEvent, Directory, FileSystemObject, Process } from '../types' import { getTime } from '../utils' import { db, defaultFS, initializeDatabase, read, setFileSystem, write } from './lib/VirtualFS' import nullIcon from '../assets/icons/application-default-icon.svg' @@ -32,10 +32,19 @@ const BootLoader: Process = { } else { console.warn('Persistent storage is not supported.') } - const fileSystem = await read() + const fileSystem = await read() as FileSystemObject if (fileSystem === undefined) { await write(defaultFS) } else { + const appsDirectory = ((fileSystem.root.children.home as Directory).children.Applications as Directory).children + const defaultAppsDirectory = ((defaultFS.root.children.home as Directory).children.Applications as Directory).children + for (const file in defaultAppsDirectory) { + if (appsDirectory[file] === undefined && defaultAppsDirectory[file] !== undefined) { + console.log(file) + appsDirectory[file] = defaultAppsDirectory[file] + } + } + await write(fileSystem) await setFileSystem(fileSystem) } diff --git a/src/system/lib/VirtualFS.ts b/src/system/lib/VirtualFS.ts index 02fc73e..42d63e4 100644 --- a/src/system/lib/VirtualFS.ts +++ b/src/system/lib/VirtualFS.ts @@ -1,42 +1,11 @@ import Kernel from '../../kernel' import ProcessLib from '../../structures/ProcessLib' -import { Library } from '../../types' +import { Directory, Errors, File, Library, Permission } from '../../types' console.debug = (...args: any[]) => { console.log('[VirtualFS]', ...args) } -export enum Errors { - ENOENT = 'ENOENT', - EISDIR = 'EISDIR', - EEXIST = 'EEXIST', - EPERM = 'EPERM', - ENOTDIR = 'ENOTDIR', - EACCES = 'EACCES' -} - -export enum Permission { - USER, - ELEVATED, - SYSTEM -} - -export interface Directory { - type: 'directory' - permission: Permission - deleteable: boolean - children: { - [key: string]: Directory | File - } -} - -export interface File { - type: 'file' - permission: Permission - deleteable: boolean - content: Buffer -} - export const defaultFS: { root: Directory } = { root: { type: 'directory', diff --git a/src/types.ts b/src/types.ts index dd951e7..2e53174 100644 --- a/src/types.ts +++ b/src/types.ts @@ -9,6 +9,41 @@ export interface AppClosedEvent extends CustomEvent { } } +export enum Errors { + ENOENT = 'ENOENT', + EISDIR = 'EISDIR', + EEXIST = 'EEXIST', + EPERM = 'EPERM', + ENOTDIR = 'ENOTDIR', + EACCES = 'EACCES' +} + +export enum Permission { + USER, + ELEVATED, + SYSTEM +} + +export interface Directory { + type: 'directory' + permission: Permission + deleteable: boolean + children: { + [key: string]: Directory | File + } +} + +export interface File { + type: 'file' + permission: Permission + deleteable: boolean + content: Buffer +} + +export interface FileSystemObject { + root: Directory +} + export interface AppOpenedEvent extends CustomEvent { detail: { proc: Process