This repository has been archived on 2024-08-06. You can view files and clone it, but cannot push or open issues or pull requests.
comicinfo-editor-v2/src/lib/MetadataInput.svelte

236 lines
6.5 KiB
Svelte
Raw Normal View History

2023-10-11 17:43:28 +02:00
<script lang="ts">
2023-10-11 21:17:03 +02:00
import IntegerInput from "./IntegerInput.svelte";
2023-10-11 23:04:07 +02:00
import TextInput from "./TextInput.svelte";
2023-10-24 11:37:27 +02:00
import NewListTextInput from "./ListTextInput/NewListTextInput.svelte";
import ListTextInputElement from "./ListTextInput/ListTextInputElement.svelte";
2023-11-01 20:21:59 +01:00
import {invoke} from "@tauri-apps/api/tauri";
import {AgeRating, LanguageISO, type Metadata} from "./metadata";
2023-11-01 21:55:39 +01:00
import Dropdown from "./Dropdown/Dropdown.svelte";
import PathInput from "./PathInput.svelte";
import {tempdir} from "@tauri-apps/api/os";
import {downloadDir} from "@tauri-apps/api/path";
let tauriInitDone = false;
let downloadDirPath: string;
let tempDirPath: string;
2023-11-01 20:21:59 +01:00
let returnMessage = "";
2023-10-11 21:17:03 +02:00
2023-11-01 21:55:39 +01:00
let metadata: Metadata = {
series_title: "",
title: "",
2023-10-24 11:37:27 +02:00
2023-11-01 21:55:39 +01:00
chapter_number: 0,
2023-10-24 11:37:27 +02:00
2023-11-01 21:55:39 +01:00
total_chapter_count: -1,
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
volume_number: -1,
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
summary: "",
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
release_date: {
year: new Date().getFullYear(),
2023-11-01 20:21:59 +01:00
month: -1,
day: -1,
2023-11-01 21:55:39 +01:00
},
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
writer: "",
translator: "",
letterer: "",
editor: "",
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
publisher: "",
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
genre: "",
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
tags: [],
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
page_count: 1,
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
language: LanguageISO.EN,
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
characters: [],
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
age_rating: AgeRating.Unknown
};
let saveDirectory = "";
let bundleDirectory = "";
let doBundle = false;
2023-11-01 21:55:39 +01:00
$: {
if (metadata.release_date.year < 0) {
metadata.release_date.month = -1;
2023-11-01 20:21:59 +01:00
}
2023-11-01 21:55:39 +01:00
if (metadata.release_date.month < 0) {
metadata.release_date.day = -1;
}
}
$: {
if (tauriInitDone) {
if (saveDirectory == "") {
saveDirectory = downloadDirPath;
}
if (bundleDirectory == "") {
bundleDirectory = downloadDirPath;
}
}
}
async function init() {
downloadDirPath = await downloadDir();
tempDirPath = await tempdir();
tauriInitDone = true;
}
2023-11-01 21:55:39 +01:00
function deleteTag(event: any) {
metadata.tags.splice(event.detail.tagId, 1);
metadata.tags = metadata.tags;
}
async function saveMetadata() {
while (!tauriInitDone) {
await new Promise( resolve => setTimeout(resolve, 100) );
}
2023-11-01 21:55:39 +01:00
console.log(metadata);
if (bundleDirectory != "") {
let savePath = saveDirectory;
if (saveDirectory.endsWith("/")) {
savePath += "test.cbz";
}
else {
savePath += "/test.cbz";
}
let comicInfoPath = await invoke("save", { metadata: metadata, path: tempDirPath});
let bundlePath = await invoke("save_bundle", { bundleDir: bundleDirectory, metadataFilePath: comicInfoPath, savePath: savePath })
returnMessage = "Saved '" + metadata.title + "' bundled to '" + bundlePath + "'";
}
else {
let comicInfoPath = await invoke("save", { message: metadata, path: saveDirectory })
returnMessage = "Saved '" + metadata.title + "' to '" + comicInfoPath + "'";
}
2023-11-01 20:21:59 +01:00
}
init();
2023-10-11 17:43:28 +02:00
</script>
2023-11-01 21:55:39 +01:00
<div class="metadataInputContainer">
2023-10-11 17:43:28 +02:00
<h1>Metadata</h1>
2023-11-01 21:55:39 +01:00
<form class="metadataInput" on:submit|preventDefault={saveMetadata}>
2023-10-11 17:43:28 +02:00
2023-11-01 21:55:39 +01:00
<label for="series">Series:</label>
<TextInput id="series" bind:value={metadata.series_title} placeholder="Series Title" /><br>
2023-10-11 17:43:28 +02:00
2023-11-01 21:55:39 +01:00
<label for="title">Title:</label>
<TextInput id="title" bind:value={metadata.title} placeholder="Volume Title" /><br>
2023-10-11 17:43:28 +02:00
2023-11-01 21:55:39 +01:00
<label for="volume">Volume:</label>
<IntegerInput id="volume" bind:value={metadata.volume_number} defaultValue={-1}/>
<label for="chapter">Chapter:</label>
<IntegerInput id="chapter" bind:value={metadata.chapter_number} /> /
2023-10-11 17:43:28 +02:00
2023-11-01 21:55:39 +01:00
<IntegerInput id="chapter_count" bind:value={metadata.total_chapter_count} negative={true}/><br>
2023-10-11 17:43:28 +02:00
2023-11-01 21:55:39 +01:00
<label for="page_count">Page Count</label>
<IntegerInput id="page_count" bind:value={metadata.page_count} /><br>
<label for="summary">Summary:</label><br>
<label for="summary"></label><textarea rows="3" cols="60" id="series" name="text" placeholder="Summary..." bind:value={metadata.summary}></textarea><br>
<label for="release_date">Release Date:</label>
<IntegerInput id="release_year" bind:value={metadata.release_date.year} />
{#if metadata.release_date.year > 0}
<IntegerInput id="release_month" bind:value={metadata.release_date.month} />
{#if metadata.release_date.month > 0}
<IntegerInput id="release_day" bind:value={metadata.release_date.day} />
{/if}
2023-10-24 11:37:27 +02:00
{/if}
2023-11-01 21:55:39 +01:00
<br>
<!--TODO: if date element is 0 do not display finer element, also set finer element to -1-->
<label for="author">Author:</label>
<TextInput id="author" bind:value={metadata.writer} placeholder="Author" /><br>
<label for="translator">Translator:</label>
<TextInput id="translator" bind:value={metadata.translator} placeholder="Translator" /><br>
2023-10-11 17:43:28 +02:00
2023-11-01 21:55:39 +01:00
<label for="typesetter">Letterer:</label>
<TextInput id="typesetter" bind:value={metadata.letterer} placeholder="Letterer" /><br>
2023-10-11 17:43:28 +02:00
2023-11-01 21:55:39 +01:00
<label for="editor">Editor:</label>
<TextInput id="editor" bind:value={metadata.editor} placeholder="Editor" /><br>
2023-11-01 20:21:59 +01:00
2023-11-01 21:55:39 +01:00
<label for="publisher">Publisher:</label>
<TextInput id="publisher" bind:value={metadata.publisher} placeholder="Publisher" /><br>
2023-10-11 17:43:28 +02:00
2023-11-01 21:55:39 +01:00
<label for="new-tag">Tags:</label>
<!-- List of Tags, New Button -->
{#each metadata.tags as tag, id}
<ListTextInputElement {id} bind:value={tag} on:deleted={deleteTag}/>
{/each}
<NewListTextInput id="new-tag" bind:value={metadata.tags[metadata.tags.length]}/><br>
2023-10-11 17:43:28 +02:00
2023-11-01 21:55:39 +01:00
<div class="row-left">
<label for="genre">Genre:</label>
<TextInput id="genre" bind:value={metadata.genre} placeholder="Genre" />
2023-10-11 17:43:28 +02:00
2023-11-01 21:55:39 +01:00
<label for="language-select">Language:</label>
<Dropdown id="language-select" bind:activeElement={metadata.language} list={Object.values(LanguageISO)} />
2023-11-01 21:55:39 +01:00
</div>
2023-10-11 17:43:28 +02:00
2023-11-01 21:55:39 +01:00
<div class="row-left">
<label for="age-rating">Age Rating:</label>
<Dropdown id="" bind:activeElement={metadata.age_rating} list={Object.values(AgeRating)} />
2023-11-01 21:55:39 +01:00
</div>
2023-10-11 17:43:28 +02:00
<hr>
<PathInput bind:path={saveDirectory}/>
<div class="row-left">
<label for="bundle-check">Bundle:</label>
<input id="bundle-check" type="checkbox" bind:checked={doBundle}>
</div>
{#if doBundle}
<PathInput bind:path={bundleDirectory}/>
{/if}
2023-11-01 21:55:39 +01:00
<input type="submit" value="Save"/>
<p>{returnMessage}</p>
</form>
</div>
2023-10-11 17:43:28 +02:00
<style>
2023-11-01 21:55:39 +01:00
.metadataInputContainer {
2023-10-11 17:43:28 +02:00
height: 100%;
2023-11-01 21:55:39 +01:00
max-height: 100%;
2023-10-11 17:43:28 +02:00
overflow: auto;
}
2023-11-01 21:55:39 +01:00
.metadataInput {
2023-10-11 17:43:28 +02:00
margin-left: 4rem;
}
2023-11-01 21:55:39 +01:00
.metadataInput label, input[type="submit"] {
}
2023-10-11 17:43:28 +02:00
.metadataInput h1 {
position: sticky;
top: 0;
margin: 0;
border-bottom: 2px solid black;
background-color: var(--color-bg);
padding: 1.3rem;
}
</style>