Skip to content

Commit

Permalink
Web: Added one-click-open button.
Browse files Browse the repository at this point in the history
Super messy - this needs cleanup.
  • Loading branch information
schilkp committed Jul 1, 2024
1 parent 076259a commit f697f15
Showing 1 changed file with 87 additions and 16 deletions.
103 changes: 87 additions & 16 deletions web/website/src/components/DataCard/DataAddForm.vue
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
<script setup lang="ts">
import { computed, ref } from "vue";
import { core_count, trace_data } from "../../state";
import {
converted_trace,
core_count,
trace_data,
trace_mode,
} from "../../state";
import UploadArea from "./UploadArea.vue";
import { ui_error, ui_success } from "../../log";
import { ui_error, ui_info, ui_success } from "../../log";
import { Flash } from "../../flash_ui_element";
import { process_input_trace } from "../../process_input_trace";
import { convert_trace } from "../../convert";
import { open_trace } from "../../open";
const upload_area = ref<null | typeof UploadArea>(null);
Expand All @@ -26,19 +33,47 @@ const validCoreIds = computed(() => {
const add_trace_state = ref<string>("");
const add_trace_flash = new Flash("", add_trace_state);
const one_click_add_state = ref<string>("");
const one_click_add_flash = new Flash("", one_click_add_state);
const one_click_add_content = ref<string>("1-CLICK OPEN");
function add_trace(
content: string | ArrayBuffer,
format: string,
core_id: number,
flash: Flash,
do_convert_open: boolean,
) {
try {
trace_data.pieces.push(process_input_trace(content, format, core_id));
clear();
ui_success("Added trace.");
if (do_convert_open) {
ui_info("Starting Conversion..");
one_click_add_content.value = '<div uk-spinner="ratio: 0.8"></div>';
// Short timeout to allow render of spinner:
setTimeout(() => {
try {
converted_trace.data = convert_trace(
core_count.value,
trace_data.pieces,
trace_mode.value,
);
flash.reset();
ui_success("Done!");
trace_data.pieces = [];
open_trace(converted_trace.data);
} catch (err) {
converted_trace.data = null;
flash.flash("uk-button-danger", 500);
ui_error("Conversion Failed: " + err);
}
one_click_add_content.value = "1-CLICK OPEN";
}, 100);
}
} catch (e) {
ui_error("Failed to add trace (" + e + ").");
add_trace_flash.flash("uk-button-danger", 500);
flash.flash("uk-button-danger", 500);
}
}
Expand All @@ -49,7 +84,15 @@ function clear() {
paste_text.value = "";
}
function one_click_add_btn() {
import_trace(true, one_click_add_flash);
}
function add_trace_btn() {
import_trace(false, add_trace_flash);
}
function import_trace(do_convert_open: boolean, flash: Flash) {
var selected_file = null;
if (upload_area.value !== null) {
selected_file = <File>upload_area.value.selected_file;
Expand All @@ -61,31 +104,51 @@ function add_trace_btn() {
if (selected_file !== null) {
if (selected_format === "binary") {
selected_file.arrayBuffer().then(
(content) => add_trace(content, "binary", selected_core_id),
(content) =>
add_trace(
content,
"binary",
selected_core_id,
flash,
do_convert_open,
),
(err) => {
ui_error("Failed to open file (" + err + ").");
add_trace_flash.flash("uk-button-danger", 500);
flash.flash("uk-button-danger", 500);
},
);
} else {
selected_file.text().then(
(content) => add_trace(content, selected_format, selected_core_id),
(content) =>
add_trace(
content,
selected_format,
selected_core_id,
flash,
do_convert_open,
),
(err) => {
ui_error("Failed to open file (" + err + ").");
add_trace_flash.flash("uk-button-danger", 500);
flash.flash("uk-button-danger", 500);
},
);
}
} else if (paste_text.value !== undefined) {
if (selected_format != "binary") {
add_trace(paste_text.value, selected_format, selected_core_id);
add_trace(
paste_text.value,
selected_format,
selected_core_id,
flash,
do_convert_open,
);
} else {
ui_error("Binary traces can only be added via upload.");
add_trace_flash.flash("uk-button-danger", 500);
flash.flash("uk-button-danger", 500);
}
} else {
ui_error("Invalid trace.");
add_trace_flash.flash("uk-button-danger", 500);
flash.flash("uk-button-danger", 500);
}
}
Expand Down Expand Up @@ -114,27 +177,35 @@ function is_empty(i: string | undefined): boolean {
<UploadArea ref="upload_area" />
</div>

<div class="uk-width-1-2@s">
<label class="uk-form-label">Format</label>
<div class="uk-width-1-4@s">
<select class="uk-select" aria-label="Select" v-model="format">
<option>hex</option>
<option>binary</option>
<option>base64</option>
</select>
</div>

<div class="uk-width-1-2@s">
<label class="uk-form-label">Core</label>
<div class="uk-width-1-4@s">
<select class="uk-select" aria-label="Select" v-model="core_id">
<option v-for="core_id in validCoreIds" :value="core_id">
core #{{ core_id }}
</option>
</select>
</div>

<div class="uk-width-1-1@s">
<div class="uk-width-1-4@s">
<button
class="uk-button uk-button-default uk-align-right uk-width-1-1"
@click="one_click_add_btn"
:class="one_click_add_state"
:disabled="!upload_area?.selected_file && is_empty(paste_text)"
>
1-Click Open
</button>
</div>
<div class="uk-width-1-4@s">
<button
class="uk-button uk-button-default uk-align-right uk-width-small"
class="uk-button uk-button-default uk-align-right uk-width-1-1"
@click="add_trace_btn"
:class="add_trace_state"
:disabled="!upload_area?.selected_file && is_empty(paste_text)"
Expand Down

0 comments on commit f697f15

Please sign in to comment.