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";
2023-11-15 23:59:09 +01:00
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
};
2023-11-15 23:59:09 +01:00
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;
}
}
2023-11-15 23:59:09 +01:00
$: {
if (tauriInitDone) {
if (saveDirectory == "") {
saveDirectory = downloadDirPath;
}
2023-11-16 20:51:15 +01:00
if (bundleDirectory == "" && doBundle) {
2023-11-15 23:59:09 +01:00
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() {
2023-11-15 23:59:09 +01:00
while (!tauriInitDone) {
await new Promise( resolve => setTimeout(resolve, 100) );
}
2023-11-01 21:55:39 +01:00
console.log(metadata);
2023-11-15 23:59:09 +01:00
if (bundleDirectory != "") {
2023-11-15 23:59:50 +01:00
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 + "'";
2023-11-15 23:59:09 +01:00
}
else {
let comicInfoPath = await invoke("save", { message : metadata , path : saveDirectory } )
returnMessage = "Saved '" + metadata.title + "' to '" + comicInfoPath + "'";
}
2023-11-01 20:21:59 +01:00
}
2023-11-15 23:59:09 +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 >
2023-11-15 23:59:09 +01:00
< 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 >
2023-11-15 23:59:09 +01:00
< 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
2023-11-15 23:59:09 +01: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 >