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> Amanda Sternberg <mandis.sternberg@gmail.com>
arold0 <arold0@icloud.com> arold0 <arold0@icloud.com>
nav1s <nav1s@proton.me> nav1s <nav1s@proton.me>
medProgAyat <hosseinmehriyari1383@gmail.com>
Ranjit Odedra <ranjitodedra.dev@gmail.com> Ranjit Odedra <ranjitodedra.dev@gmail.com>
Eltaurus <https://github.com/Eltaurus-Lt> Eltaurus <https://github.com/Eltaurus-Lt>
jariji jariji

View file

@ -160,7 +160,7 @@ importing-cards-added =
[one] { $count } card added. [one] { $count } card added.
*[other] { $count } cards 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 = importing-notes-added =
{ $count -> { $count ->
[one] { $count } new note imported. [one] { $count } new note imported.

View file

@ -2,17 +2,45 @@
Copyright: Ankitects Pty Ltd and contributors Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
--> -->
<script lang="ts"> <script lang="ts">
import { bridgeCommand } from "@tslib/bridgecommand";
import * as tr from "@generated/ftl";
export let error: Error; export let error: Error;
function closePage() {
try {
bridgeCommand("close");
} catch {
history.back();
}
}
</script> </script>
<div class="message"> <div class="error-box">
{error.message} <p class="error-text">{error.message}</p>
<button class="btn btn-primary" on:click={closePage}>
{tr.actionsClose()}
</button>
</div> </div>
<style lang="scss"> <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; 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> </style>

View file

@ -19,7 +19,9 @@ export async function postProto<T>(
return outputType.fromBinary(outputBytes); return outputType.fromBinary(outputBytes);
} catch (err) { } catch (err) {
const { alertOnError = true } = options; const { alertOnError = true } = options;
if (alertOnError && !(err instanceof Error && err.message === "500: Interrupted")) { if (
alertOnError && !(err instanceof Error && err.message === "500: Interrupted")
) {
alert(err); alert(err);
} }
throw err; throw err;
@ -41,7 +43,12 @@ async function postProtoInner(url: string, body: Uint8Array): Promise<Uint8Array
} catch { } catch {
// ignore // 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 blob = await result.blob();
const respBuf = await new Response(blob).arrayBuffer(); 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 License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
--> -->
<script lang="ts"> <script lang="ts">
import ErrorPage from "$lib/components/ErrorPage.svelte";
import ImportCsvPage from "../ImportCsvPage.svelte"; import ImportCsvPage from "../ImportCsvPage.svelte";
import type { PageData } from "./$types"; import type { PageData } from "./$types";
export let data: PageData; export let data: PageData;
</script> </script>
<ImportCsvPage state={data.state} /> {#if data.initialError}
<ErrorPage error={data.initialError} />
{:else}
<ImportCsvPage state={data.state} />
{/if}

View file

@ -6,14 +6,19 @@ import { ImportCsvState } from "../lib";
import type { PageLoad } from "./$types"; import type { PageLoad } from "./$types";
export const load = (async ({ params }) => { export const load = (async ({ params }) => {
const [notetypes, decks, metadata] = await Promise.all([ try {
getNotetypeNames({}), const [notetypes, decks, metadata] = await Promise.all([
getDeckNames({ getNotetypeNames({}),
skipEmptyDefault: false, getDeckNames({
includeFiltered: false, skipEmptyDefault: false,
}), includeFiltered: false,
getCsvMetadata({ path: params.path }, { alertOnError: false }), }),
]); getCsvMetadata({ path: params.path }, { alertOnError: false }),
const state = new ImportCsvState(params.path, notetypes, decks, metadata); ]);
return { state }; 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; }) satisfies PageLoad;