diff --git a/src/lib/components/xp/RecycleBin.svelte b/src/lib/components/xp/RecycleBin.svelte index 418b72d..9b3f60c 100644 --- a/src/lib/components/xp/RecycleBin.svelte +++ b/src/lib/components/xp/RecycleBin.svelte @@ -4,7 +4,7 @@ export let style; export let classes; - $: icon = $hardDrive[recycle_bin_id]?.files.length > 0 || $hardDrive[recycle_bin_id]?.folders.length > 0 ? + $: icon = $hardDrive[recycle_bin_id]?.children.length > 0 || $hardDrive[recycle_bin_id]?.children.length > 0 ? 'url(/images/xp/icons/RecycleBinfull.png)' : 'url(/images/xp/icons/RecycleBinempty.png)'; function on_dbclick(){ diff --git a/src/lib/components/xp/Viewer2.svelte b/src/lib/components/xp/Viewer2.svelte index f66257d..bd719f7 100644 --- a/src/lib/components/xp/Viewer2.svelte +++ b/src/lib/components/xp/Viewer2.svelte @@ -20,10 +20,11 @@ $: url = finder.to_url(history[page_index]) || 'My Computer'; export let id; - $: folders = $hardDrive[id] == null ? [] : $hardDrive[id].folders.map(id => $hardDrive[id]); - $: files = $hardDrive[id] == null ? [] : $hardDrive[id].files.map(id => $hardDrive[id]); - - $: items = [...files, ...folders] + $: items = $hardDrive[id] == null ? + [] : + $hardDrive[id] + .children + .map(id => $hardDrive[id]) .filter(el => el != null) .filter(el => !hidden_items.includes(el.id)); diff --git a/src/lib/components/xp/Viewer3.svelte b/src/lib/components/xp/Viewer3.svelte index 0dafbdf..9a06aa0 100644 --- a/src/lib/components/xp/Viewer3.svelte +++ b/src/lib/components/xp/Viewer3.svelte @@ -21,11 +21,11 @@ let page_index = 0; $: url = finder.to_url(history[page_index]) || 'My Computer'; - - $: folders = $hardDrive[id] == null ? [] : $hardDrive[id].folders.map(id => $hardDrive[id]); - $: files = $hardDrive[id] == null ? [] : $hardDrive[id].files.map(id => $hardDrive[id]); - - $: items = [...files, ...folders] + $: items = $hardDrive[id] == null ? + [] : + $hardDrive[id] + .children + .map(id => $hardDrive[id]) .filter(el => el != null) .filter(el => !hidden_items.includes(el.id)); diff --git a/src/lib/components/xp/context_menu/RecycleBin.js b/src/lib/components/xp/context_menu/RecycleBin.js index 807a9ce..31c91e2 100644 --- a/src/lib/components/xp/context_menu/RecycleBin.js +++ b/src/lib/components/xp/context_menu/RecycleBin.js @@ -29,9 +29,8 @@ export let make = ({type, originator}) => { name: 'Empty Recycle Bin', action: () => { let yes_action = () => { - let files = get(hardDrive)[recycle_bin_id].files; - let folders = get(hardDrive)[recycle_bin_id].folders; - for(let id of [...files, ...folders]){ + let children = get(hardDrive)[recycle_bin_id].children; + for(let id of [...children]){ fs.del_fs(id); } } diff --git a/src/lib/finder.js b/src/lib/finder.js index fcf88a0..ed7730c 100644 --- a/src/lib/finder.js +++ b/src/lib/finder.js @@ -45,8 +45,7 @@ export function to_id_nocase(url){ console.log(i); console.log(path_components[i]); current_location = [ - ...current_location.files.map(id => get(hardDrive)[id]), - ...current_location.folders.map(id => get(hardDrive)[id]) + ...current_location.children.map(id => get(hardDrive)[id]) ] .find(item => item?.name?.toLowerCase() == path_components[i].toLowerCase()); console.log(current_location); @@ -76,8 +75,7 @@ export function to_id(url){ console.log(i); console.log(path_components[i]); current_location = [ - ...current_location.files.map(id => get(hardDrive)[id]), - ...current_location.folders.map(id => get(hardDrive)[id]) + ...current_location.children.map(id => get(hardDrive)[id]) ] .find(item => item?.name == path_components[i]); console.log(current_location); diff --git a/src/lib/fs.js b/src/lib/fs.js index f1533f0..2b4d94e 100644 --- a/src/lib/fs.js +++ b/src/lib/fs.js @@ -54,15 +54,13 @@ export function del_fs(id){ let obj = get(hardDrive)[id]; let child_ids = [ - ...obj.files, - ...obj.folders + ...obj.children ] if(get(hardDrive)[obj.parent] != null){ console.log('delete from parent', obj.parent) hardDrive.update(data => { - data[obj.parent].files = data[obj.parent].files.filter(el => el != obj.id); - data[obj.parent].folders = data[obj.parent].folders.filter(el => el != obj.id); + data[obj.parent].children = data[obj.parent].children.filter(el => el != obj.id); return data; }) } @@ -89,8 +87,7 @@ export function clone_fs(obj_current_id, parent_id, new_id=null){ obj.parent = parent_id; let parent_items_names = [ - ...get(hardDrive)[parent_id].files.map(el => get(hardDrive)[el].name), - ...get(hardDrive)[parent_id].folders.map(el => get(hardDrive)[el].name), + ...get(hardDrive)[parent_id].children.map(el => get(hardDrive)[el].name), ] let appendix = 2; let basename = obj.basename; @@ -101,12 +98,10 @@ export function clone_fs(obj_current_id, parent_id, new_id=null){ obj.basename = basename; obj.name = basename + obj.ext; - //backup files & folders + //backup children console.log(obj) - let files = [...obj.files]; - let folders = [...obj.folders]; - obj.files = []; - obj.folders = []; + let children = [...obj.children]; + obj.children = []; //save to hard drive hardDrive.update(data => { @@ -115,21 +110,13 @@ export function clone_fs(obj_current_id, parent_id, new_id=null){ }) console.log('cloning', obj.id) - if(obj.type == 'file'){ - - hardDrive.update(data => { - data[parent_id].files.push(obj.id); - return data; - }) - } else if(obj.type == 'folder'){ - hardDrive.update(data => { - data[parent_id].folders.push(obj.id); - return data; - }) - } + hardDrive.update(data => { + data[parent_id].children.push(obj.id); + return data; + }) //recursively clone child items - for(let child of [...files, ...folders]){ + for(let child of [...children]){ clone_fs(child, obj.id); } } @@ -151,17 +138,14 @@ export async function new_fs_item(type, ext, seedname, parent_id, file=null){ "level": 0, "parent": parent_id, "size": 1, - "files": [], - "folders": [], + "children": [], "basename": "" } - let files = get(hardDrive)[parent_id].files.map(el => get(hardDrive)[el]); - let folders = get(hardDrive)[parent_id].folders.map(el => get(hardDrive)[el]); + let children = get(hardDrive)[parent_id].children.map(el => get(hardDrive)[el]); let parent_items_names = [ - ...files.map(el => el.name), - ...folders.map(el => el.name) + ...children.map(el => el.name) ] let appendix = 2; @@ -193,17 +177,10 @@ export async function new_fs_item(type, ext, seedname, parent_id, file=null){ data[item.id] = item; return data; }) - if(type == 'file'){ - hardDrive.update(data => { - data[parent_id].files.push(item.id); - return data; - }) - } else if (type == 'folder'){ - hardDrive.update(data => { - data[parent_id].folders.push(item.id); - return data; - }) - } + hardDrive.update(data => { + data[parent_id].children.push(item.id); + return data; + }) return item.id; } @@ -227,19 +204,14 @@ export async function new_fs_item_raw(item, parent_id){ if(item.icon == null){ item.icon = '/images/xp/icons/ApplicationWindow.png' } - if(item.files == null){ - item.files = []; - } - if(item.folders == null){ - item.folders = []; + if(item.children == null){ + item.children = []; } - let files = get(hardDrive)[parent_id].files.map(el => get(hardDrive)[el]); - let folders = get(hardDrive)[parent_id].folders.map(el => get(hardDrive)[el]); + let children = get(hardDrive)[parent_id].children.map(el => get(hardDrive)[el]); let parent_items_names = [ - ...files.map(el => el.name), - ...folders.map(el => el.name) + ...children.map(el => el.name) ] let appendix = 2; @@ -266,17 +238,10 @@ export async function new_fs_item_raw(item, parent_id){ data[item.id] = item; return data; }) - if(item.type == 'file'){ - hardDrive.update(data => { - data[parent_id].files.push(item.id); - return data; - }) - } else if (item.type == 'folder'){ - hardDrive.update(data => { - data[parent_id].folders.push(item.id); - return data; - }) - } + hardDrive.update(data => { + data[parent_id].children.push(item.id); + return data; + }) return item.id; } @@ -323,14 +288,12 @@ export async function save_file_as(basename, ext, file, parent_id, new_id=null){ "level": 0, "parent": parent_id, "size": Math.round(file.size/1024), - "files": [], - "folders": [], + "children": [], "basename": basename } let parent_items_names = [ - ...get(hardDrive)[parent_id].files.map(el => get(hardDrive)[el].name), - ...get(hardDrive)[parent_id].folders.map(el => get(hardDrive)[el].name), + ...get(hardDrive)[parent_id].children.map(el => get(hardDrive)[el].name) ] let appendix = 2; basename = obj.basename; @@ -344,7 +307,7 @@ export async function save_file_as(basename, ext, file, parent_id, new_id=null){ hardDrive.update(data => { data[obj.id] = obj; - data[parent_id].files.push(obj.id); + data[parent_id].children.push(obj.id); return data; }) } diff --git a/src/routes/xp/desktop_folder.svelte b/src/routes/xp/desktop_folder.svelte index 4347534..6a07674 100644 --- a/src/routes/xp/desktop_folder.svelte +++ b/src/routes/xp/desktop_folder.svelte @@ -15,10 +15,14 @@ let id = desktop_folder; - $: folders = $hardDrive[id] == null ? [] : $hardDrive[id].folders.map(id => $hardDrive[id]); - $: files = $hardDrive[id] == null ? [] : $hardDrive[id].files.map(id => $hardDrive[id]); - $: items = [...files, ...folders].filter(el => el != null); + $: items = $hardDrive[id] == null ? + [] : + $hardDrive[id] + .children + .map(id => $hardDrive[id]) + .filter(el => el != null); + let is_focus = true; let node_ref; let cell_size = 80; @@ -152,8 +156,7 @@ } let parent_items_names = [ - ...$hardDrive[item.parent].files.filter(el => el != item.id).map(el => $hardDrive[el].name), - ...$hardDrive[item.parent].folders.filter(el => el != item.id).map(el => $hardDrive[el].name), + ...$hardDrive[item.parent].children.filter(el => el != item.id).map(el => $hardDrive[el].name), ] let appendix = 2; while(parent_items_names.includes(basename + item.ext)){ diff --git a/src/routes/xp/programs/disk_properties.svelte b/src/routes/xp/programs/disk_properties.svelte index d9ba983..0feccc0 100644 --- a/src/routes/xp/programs/disk_properties.svelte +++ b/src/routes/xp/programs/disk_properties.svelte @@ -7,7 +7,7 @@ import { runningPrograms, hardDrive } from '../../../lib/store'; import {icons} from '../../../lib/system'; import * as utils from '../../../lib/utils'; - import _, { isEqual } from 'lodash'; + import _, { isEqual, map } from 'lodash'; import * as finder from '../../../lib/finder'; export let id; @@ -56,8 +56,18 @@ }; function size_cal(id){ - let total_size = _.sum($hardDrive[id].files.map(el => $hardDrive[el].size)); - let folders = $hardDrive[id].folders; + let total_size = _.sum( + $hardDrive[id] + .children + .map(el => $hardDrive[el]) + .filter(el => el.type == 'file') + .map(el => el.size) + ); + + let folders = $hardDrive[id] + .children + .filter(el => $hardDrive[el].type == 'folder'); + for(let folder of folders){ total_size += size_cal(folder); } diff --git a/src/routes/xp/programs/display_properties.svelte b/src/routes/xp/programs/display_properties.svelte index 80519e5..ffdaf95 100644 --- a/src/routes/xp/programs/display_properties.svelte +++ b/src/routes/xp/programs/display_properties.svelte @@ -14,7 +14,9 @@ export let exec_path; let preview = $wallpaper; - let wallpapers = $hardDrive[wallpapers_folder].files; + let wallpapers = $hardDrive[wallpapers_folder] + .children + .filter(el => $hardDrive[el].type == 'file'); onMount(() => { }) diff --git a/src/routes/xp/programs/image_viewer.svelte b/src/routes/xp/programs/image_viewer.svelte index 96a2e9c..909b869 100644 --- a/src/routes/xp/programs/image_viewer.svelte +++ b/src/routes/xp/programs/image_viewer.svelte @@ -101,7 +101,7 @@ function next_image(curr_item){ console.log($hardDrive[curr_item.parent]) let siblings = $hardDrive[curr_item.parent] - .files + .children .filter(id => supported_exts.includes($hardDrive[id].ext)); let curr_index = siblings.indexOf(curr_item.id); @@ -114,7 +114,7 @@ function previous_image(curr_item){ let siblings = $hardDrive[curr_item.parent] - .files + .children .filter(id => supported_exts.includes($hardDrive[id].ext)); let curr_index = siblings.indexOf(curr_item.id); diff --git a/src/routes/xp/programs/media_player_classic.svelte b/src/routes/xp/programs/media_player_classic.svelte index 6115467..f7f775c 100644 --- a/src/routes/xp/programs/media_player_classic.svelte +++ b/src/routes/xp/programs/media_player_classic.svelte @@ -206,12 +206,12 @@ async function find_subtitle(item){ try { let vtt = $hardDrive[item.parent] - .files + .children .map(id => $hardDrive[id]) .find(el => el.basename == item.basename && el.ext == '.vtt'); let srt = $hardDrive[item.parent] - .files + .children .map(id => $hardDrive[id]) .find(el => el.basename == item.basename && el.ext == '.srt'); diff --git a/src/routes/xp/programs/my_computer/viewer.svelte b/src/routes/xp/programs/my_computer/viewer.svelte index d2903a4..6d98427 100644 --- a/src/routes/xp/programs/my_computer/viewer.svelte +++ b/src/routes/xp/programs/my_computer/viewer.svelte @@ -18,10 +18,12 @@ export let self; export let my_computer_instance; export let id = null; - $: folders = $hardDrive[id] == null ? [] : $hardDrive[id].folders.map(id => $hardDrive[id]); - $: files = $hardDrive[id] == null ? [] : $hardDrive[id].files.map(id => $hardDrive[id]); - - $: items = [...files, ...folders] + + $: items = $hardDrive[id] == null ? + [] : + $hardDrive[id] + .children + .map(id => $hardDrive[id]) .filter(el => el != null) .filter(el => !hidden_items.includes(el.id)); @@ -155,8 +157,7 @@ } let parent_items_names = [ - ...$hardDrive[item.parent].files.filter(el => el != item.id).map(el => $hardDrive[el].name), - ...$hardDrive[item.parent].folders.filter(el => el != item.id).map(el => $hardDrive[el].name), + ...$hardDrive[item.parent].children.filter(el => el != item.id).map(el => $hardDrive[el].name), ] let appendix = 2; while(parent_items_names.includes(basename + item.ext)){ diff --git a/src/routes/xp/programs/properties.svelte b/src/routes/xp/programs/properties.svelte index 4845dfe..b74964d 100644 --- a/src/routes/xp/programs/properties.svelte +++ b/src/routes/xp/programs/properties.svelte @@ -34,7 +34,7 @@ ...fs_item?.type == 'file' ? [] : [ - ['Contains', `${fs_item.files.length} Files, ${fs_item.folders.length} Folders`] + ['Contains', `${fs_item.children.filter(el => $hardDrive[el].type == 'file').length} Files, ${fs_item.children.filter(el => $hardDrive[el].type == 'folder').length} Folders`] ] ] @@ -64,8 +64,18 @@ }; function size_cal(id){ - let total_size = _.sum($hardDrive[id].files.map(el => $hardDrive[el].size)); - let folders = $hardDrive[id].folders; + console.log(id); + let total_size = _.sum( + $hardDrive[id] + .children + .map(el => $hardDrive[el]) + .filter(el => el.type == 'file') + .map(el => el.size) + ); + + let folders = $hardDrive[id] + .children + .filter(el => $hardDrive[el].type == 'folder'); for(let folder of folders){ total_size += size_cal(folder); } diff --git a/src/routes/xp/programs/zip.svelte b/src/routes/xp/programs/zip.svelte index 76a71c3..0cda138 100644 --- a/src/routes/xp/programs/zip.svelte +++ b/src/routes/xp/programs/zip.svelte @@ -61,7 +61,7 @@ if(cancelled) return; if(item.type == 'folder'){ let folder = parent.folder(item.name); - for(let child_item of [...item.folders, ...item.files]){ + for(let child_item of [...item.children]){ child_item = $hardDrive[child_item]; await add_to_archive(folder, child_item); } diff --git a/src/routes/xp/starting.svelte b/src/routes/xp/starting.svelte index 3b9fc41..b0ef7c2 100644 --- a/src/routes/xp/starting.svelte +++ b/src/routes/xp/starting.svelte @@ -53,7 +53,6 @@ async function load_hard_drive(){ let hard_drive = await get('hard_drive'); - console.log(hard_drive); if(hard_drive == null){ hard_drive = (await axios({ method: 'get', @@ -61,9 +60,22 @@ })).data; await set('hard_drive', hard_drive); } + migrate_files_format(hard_drive); + console.log(hard_drive); hardDrive.set(hard_drive); } + function migrate_files_format(drive){ + for(let key of Object.keys(drive)){ + let obj = drive[key]; + if(obj.children == null){ + obj.children = [...obj.files, ...obj.folders]; + delete obj.files; + delete obj.folders; + } + } + } + async function load_wallpaper(){ $wallpaper = await get('wallpaper'); if($wallpaper == null){