This commit is contained in:
medProgAyat 2025-11-01 18:43:33 +00:00 committed by GitHub
commit e3bdb06ece
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 64 additions and 18 deletions

View file

@ -251,6 +251,7 @@ Matbe766 <matildabergstrom01@gmail.com>
Amanda Sternberg <mandis.sternberg@gmail.com>
arold0 <arold0@icloud.com>
nav1s <nav1s@proton.me>
medProgAyat <hosseinmehriyari1383@gmail.com>
Ranjit Odedra <ranjitodedra.dev@gmail.com>
Eltaurus <https://github.com/Eltaurus-Lt>
jariji

View file

@ -160,7 +160,7 @@ importing-cards-added =
[one] { $count } card added.
*[other] { $count } cards added.
}
importing-file-empty = The file you selected is empty.
importing-file-empty = The selected file is empty. Please choose a valid file.
importing-notes-added =
{ $count ->
[one] { $count } new note imported.

View file

@ -2,17 +2,45 @@
Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
-->
<script lang="ts">
import { bridgeCommand } from "@tslib/bridgecommand";
import * as tr from "@generated/ftl";
export let error: Error;
function closePage() {
try {
bridgeCommand("close");
} catch {
history.back();
}
}
</script>
<div class="message">
{error.message}
<div class="error-box">
<p class="error-text">{error.message}</p>
<button class="btn btn-primary" on:click={closePage}>
{tr.actionsClose()}
</button>
</div>
<style lang="scss">
.message {
.error-box {
background-color: var(--window-bg);
border: 1px solid var(--error-fg);
color: var(--fg);
padding: 1rem;
border-radius: 0.5rem;
max-width: 400px;
margin: 1rem auto;
text-align: center;
margin: 50px 0 0;
box-shadow: 0 0 6px rgba(0, 0, 0, 0.15);
}
.error-text {
color: var(--error-fg);
font-weight: 600;
margin-bottom: 0.75rem;
}
</style>

View file

@ -19,7 +19,9 @@ export async function postProto<T>(
return outputType.fromBinary(outputBytes);
} catch (err) {
const { alertOnError = true } = options;
if (alertOnError && !(err instanceof Error && err.message === "500: Interrupted")) {
if (
alertOnError && !(err instanceof Error && err.message === "500: Interrupted")
) {
alert(err);
}
throw err;
@ -41,7 +43,12 @@ async function postProtoInner(url: string, body: Uint8Array): Promise<Uint8Array
} catch {
// ignore
}
throw new Error(`${result.status}: ${msg}`);
// hide HTTP status in production builds
throw new Error(
process.env.NODE_ENV === "production"
? `${msg}`
: `${result.status}: ${msg}`,
);
}
const blob = await result.blob();
const respBuf = await new Response(blob).arrayBuffer();

View file

@ -3,10 +3,15 @@ Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
-->
<script lang="ts">
import ErrorPage from "$lib/components/ErrorPage.svelte";
import ImportCsvPage from "../ImportCsvPage.svelte";
import type { PageData } from "./$types";
export let data: PageData;
</script>
<ImportCsvPage state={data.state} />
{#if data.initialError}
<ErrorPage error={data.initialError} />
{:else}
<ImportCsvPage state={data.state} />
{/if}

View file

@ -6,6 +6,7 @@ import { ImportCsvState } from "../lib";
import type { PageLoad } from "./$types";
export const load = (async ({ params }) => {
try {
const [notetypes, decks, metadata] = await Promise.all([
getNotetypeNames({}),
getDeckNames({
@ -16,4 +17,8 @@ export const load = (async ({ params }) => {
]);
const state = new ImportCsvState(params.path, notetypes, decks, metadata);
return { state };
} catch (error: any) {
const rawMsg = error?.message ?? String(error ?? "");
return { initialError: new Error(rawMsg) };
}
}) satisfies PageLoad;