diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index d64a5e33e..3cdb45b33 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -43,7 +43,12 @@ import ProjectManagerView from "./project/ProjectManagerView.svelte"; import { printConsoleArt } from "./console-art.js"; - import { selected, selectedResource, settings } from "./stores.js"; + import { + selected, + selectedResource, + settings, + dataLength, + } from "./stores.js"; import { keyEventToString, shortcuts } from "./keyboard.js"; import { writable } from "svelte/store"; @@ -57,13 +62,8 @@ useAssemblyView = false, useTextView = false, rootResourceLoadPromise = new Promise((resolve) => {}), - resourceNodeDataMap = {}, resources = {}; - let carouselSelection, - currentResource, - rootResource, - modifierView, - bottomLeftPane; + let currentResource, rootResource, modifierView, bottomLeftPane; // TODO: Move to settings let riddleAnswered = JSON.parse(window.localStorage.getItem("riddleSolved")); @@ -71,6 +71,10 @@ riddleAnswered = false; } + $: dataLenPromise.then((r) => { + $dataLength = r; + }); + $: if ($selected !== undefined) { currentResource = resources[$selected]; if (currentResource === undefined) { @@ -177,13 +181,11 @@ Answer by running riddle.answer('your answer here') from the console.`); this="{modifierView}" dataLenPromise="{dataLenPromise}" bind:modifierView="{modifierView}" - bind:resourceNodeDataMap="{resourceNodeDataMap}" /> {:else} {/if} -
-
-
- {#await chunkDataPromise} - - {:then chunks} + {#if $dataLength > 0} + +
+
+
+
+ {#each chunks as _, chunkIndex}
- {#each chunks as _, chunkIndex} -
- {(chunkIndex * alignment + start) - .toString(16) - .padStart(8, "0") + ": "} -
- {/each} + {(chunkIndex * alignment + start) + .toString(16) + .padStart(8, "0") + ": "}
+ {/each} +
- + - {#await childRangesPromise} + {#await childRangesPromise} +
+ {#each chunks as hexes}
- {#each chunks as hexes} -
- {#each hexes as byte} - {byte} - {/each} -
+ {#each hexes as byte} + {byte} {/each}
- {:then childRangesResult} + {/each} +
+ {:then childRangesResult} +
+ {#each chunks as hexes, chunkIndex}
- {#each chunks as hexes, chunkIndex} -
- {#each hexes as byte, byteIndex} - {@const rangeInfo = getRangeInfo( - chunkIndex * alignment + byteIndex + start, - childRangesResult, - byte - )} - - {byte} - {/each} -
+ {#each hexes as byte, byteIndex} + {@const rangeInfo = getRangeInfo( + chunkIndex * alignment + byteIndex + start, + childRangesResult, + byte + )} + + {byte} {/each}
- {/await} + {/each} +
+ {/await} - + -
- {#each chunks as hexes} -
- {hexes.map(hexToChar).join("") + " "} -
- {/each} +
+ {#each chunks as hexes} +
+ {hexes.map(hexToChar).join("") + " "}
- {/await} + {/each}
- {:else} - Resource has no data! - {/if} - {/await} +
+ {:else} + Resource has no data! + {/if}
{#if resourceData != undefined}
- +
{/if}
diff --git a/frontend/src/hex/MagnitudeView.svelte b/frontend/src/hex/MagnitudeView.svelte index 73119056a..ccf322e61 100644 --- a/frontend/src/hex/MagnitudeView.svelte +++ b/frontend/src/hex/MagnitudeView.svelte @@ -28,11 +28,11 @@ import LoadingTextVertical from "../utils/LoadingTextVertical.svelte"; import { screenHeight } from "./stores.js"; import { hexToByteArray } from "../helpers.js"; - import { selectedResource, settings } from "../stores.js"; + import { selectedResource, settings, dataLength } from "../stores.js"; import { onMount } from "svelte"; - export let dataLength, currentPosition; + export let currentPosition; let data = undefined; @@ -112,9 +112,9 @@ // Offset Y by 0.5 because of: https://stackoverflow.com/a/48970774 context.strokeRect( 0, - Math.ceil((currentPosition / dataLength) * canvas.height) - 0.5, + Math.ceil((currentPosition / $dataLength) * canvas.height) - 0.5, alignment, - Math.ceil(($screenHeight / dataLength) * canvas.height) + Math.ceil(($screenHeight / $dataLength) * canvas.height) ); } @@ -131,7 +131,8 @@ on:mousedown="{(e) => { currentPosition = Math.floor( - Math.floor(dataLength * (e.offsetY / canvas.offsetHeight)) / alignment + Math.floor($dataLength * (e.offsetY / canvas.offsetHeight)) / + alignment ) * alignment; clicking = true; }}" @@ -145,7 +146,7 @@ if (clicking) { currentPosition = Math.floor( - Math.floor(dataLength * (e.offsetY / canvas.offsetHeight)) / + Math.floor($dataLength * (e.offsetY / canvas.offsetHeight)) / alignment ) * alignment; clicking = true; diff --git a/frontend/src/hex/MinimapView.svelte b/frontend/src/hex/MinimapView.svelte index 6db16e5b3..c6d3c9d76 100644 --- a/frontend/src/hex/MinimapView.svelte +++ b/frontend/src/hex/MinimapView.svelte @@ -16,27 +16,18 @@ import ByteclassView from "./ByteclassView.svelte"; import MagnitudeView from "./MagnitudeView.svelte"; import CarouselSelector from "../utils/CarouselSelector.svelte"; - export let dataLength, currentPosition; + export let currentPosition; let carouselSelection;
{#if carouselSelection === "Entropy"} - + {:else if carouselSelection === "Byteclass"} - + {:else if carouselSelection === "Magnitude"} - + {/if} diff --git a/frontend/src/resource/ResourceTreeToolbar.svelte b/frontend/src/resource/ResourceTreeToolbar.svelte index 4b4439fb0..16aef12f5 100644 --- a/frontend/src/resource/ResourceTreeToolbar.svelte +++ b/frontend/src/resource/ResourceTreeToolbar.svelte @@ -15,13 +15,10 @@ selected, settings, selectedProject, + resourceNodeDataMap, } from "../stores.js"; - export let resourceNodeDataMap, - modifierView, - bottomLeftPane, - showProjectManager, - showRootResource; + export let modifierView, bottomLeftPane, showProjectManager, showRootResource; $: rootResource = $selectedResource; function refreshResource() { @@ -80,12 +77,12 @@ shortcut: "i", onclick: async (e) => { await rootResource.identify(); - if (!resourceNodeDataMap[$selected]) { - resourceNodeDataMap[$selected] = {}; + if (!$resourceNodeDataMap[$selected]) { + $resourceNodeDataMap[$selected] = {}; } - resourceNodeDataMap[$selected].collapsed = - !!resourceNodeDataMap[$selected]?.collapsed; - resourceNodeDataMap[$selected].childrenPromise = + $resourceNodeDataMap[$selected].collapsed = + !!$resourceNodeDataMap[$selected]?.collapsed; + $resourceNodeDataMap[$selected].childrenPromise = rootResource.get_children(); refreshResource(); }, @@ -97,11 +94,11 @@ shortcut: "u", onclick: async (e) => { await rootResource.unpack(); - if (!resourceNodeDataMap[$selected]) { - resourceNodeDataMap[$selected] = {}; + if (!$resourceNodeDataMap[$selected]) { + $resourceNodeDataMap[$selected] = {}; } - resourceNodeDataMap[$selected].collapsed = false; - resourceNodeDataMap[$selected].childrenPromise = + $resourceNodeDataMap[$selected].collapsed = false; + $resourceNodeDataMap[$selected].childrenPromise = rootResource.get_children(); refreshResource(); }, @@ -121,12 +118,12 @@ shortcut: "a", onclick: async (e) => { await rootResource.analyze(); - if (!resourceNodeDataMap[$selected]) { - resourceNodeDataMap[$selected] = {}; + if (!$resourceNodeDataMap[$selected]) { + $resourceNodeDataMap[$selected] = {}; } - resourceNodeDataMap[$selected].collapsed = - !!resourceNodeDataMap[$selected]?.collapsed; - resourceNodeDataMap[$selected].childrenPromise = + $resourceNodeDataMap[$selected].collapsed = + !!$resourceNodeDataMap[$selected]?.collapsed; + $resourceNodeDataMap[$selected].childrenPromise = rootResource.get_children(); refreshResource(); }, @@ -148,11 +145,11 @@ const descendants = await $selectedResource.get_descendants(); clearModified(descendants); await rootResource.pack(); - if (!resourceNodeDataMap[$selected]) { - resourceNodeDataMap[$selected] = {}; + if (!$resourceNodeDataMap[$selected]) { + $resourceNodeDataMap[$selected] = {}; } - resourceNodeDataMap[$selected].collapsed = false; - resourceNodeDataMap[$selected].childrenPromise = + $resourceNodeDataMap[$selected].collapsed = false; + $resourceNodeDataMap[$selected].childrenPromise = rootResource.get_children(); refreshResource(); }, @@ -244,11 +241,11 @@ shortcut: "u+Shift", onclick: async (e) => { await rootResource.unpack_recursively(); - if (!resourceNodeDataMap[$selected]) { - resourceNodeDataMap[$selected] = {}; + if (!$resourceNodeDataMap[$selected]) { + $resourceNodeDataMap[$selected] = {}; } - resourceNodeDataMap[$selected].collapsed = false; - resourceNodeDataMap[$selected].childrenPromise = + $resourceNodeDataMap[$selected].collapsed = false; + $resourceNodeDataMap[$selected].childrenPromise = rootResource.get_children(); refreshResource(); }, @@ -262,11 +259,11 @@ const descendants = await $selectedResource.get_descendants(); clearModified(descendants); await rootResource.pack_recursively(); - if (!resourceNodeDataMap[$selected]) { - resourceNodeDataMap[$selected] = {}; + if (!$resourceNodeDataMap[$selected]) { + $resourceNodeDataMap[$selected] = {}; } - resourceNodeDataMap[$selected].collapsed = false; - resourceNodeDataMap[$selected].childrenPromise = + $resourceNodeDataMap[$selected].collapsed = false; + $resourceNodeDataMap[$selected].childrenPromise = rootResource.get_children(); refreshResource(); }, @@ -316,11 +313,11 @@ function clearModified(descendants) { for (const descendant of descendants) { - if (!resourceNodeDataMap[descendant["resource_id"]]) { - resourceNodeDataMap[descendant["resource_id"]] = {}; + if (!$resourceNodeDataMap[descendant["resource_id"]]) { + $resourceNodeDataMap[descendant["resource_id"]] = {}; } - resourceNodeDataMap[descendant["resource_id"]].lastModified = undefined; - resourceNodeDataMap[descendant["resource_id"]].allModified = undefined; + $resourceNodeDataMap[descendant["resource_id"]].lastModified = undefined; + $resourceNodeDataMap[descendant["resource_id"]].allModified = undefined; } } diff --git a/frontend/src/resource/ResourceTreeView.svelte b/frontend/src/resource/ResourceTreeView.svelte index def1d0b99..8c3416777 100644 --- a/frontend/src/resource/ResourceTreeView.svelte +++ b/frontend/src/resource/ResourceTreeView.svelte @@ -58,7 +58,6 @@ export let rootResource, modifierView, bottomLeftPane, - resourceNodeDataMap = {}, showProjectManager, showRootResource; @@ -81,7 +80,6 @@
diff --git a/frontend/src/stores.js b/frontend/src/stores.js index 0af6397d0..0cd75bc04 100644 --- a/frontend/src/stores.js +++ b/frontend/src/stores.js @@ -51,3 +51,5 @@ export function loadSettings(forceReset) { export let settings = writable(loadSettings()); export let resourceNodeDataMap = writable({}); + +export let dataLength = writable(undefined); diff --git a/frontend/src/views/AddTagView.svelte b/frontend/src/views/AddTagView.svelte index 9ec564cbd..51461472a 100644 --- a/frontend/src/views/AddTagView.svelte +++ b/frontend/src/views/AddTagView.svelte @@ -68,21 +68,26 @@