mirror of https://github.com/hykilpikonna/AquaDX
fix: ✨ fixes / extra documentation texts
parent
82a0473287
commit
42a4a11c49
|
@ -8,7 +8,7 @@
|
||||||
} from "../../libs/generalTypes";
|
} from "../../libs/generalTypes";
|
||||||
import { DATA, USER, USERBOX } from "../../libs/sdk";
|
import { DATA, USER, USERBOX } from "../../libs/sdk";
|
||||||
import { t, ts } from "../../libs/i18n";
|
import { t, ts } from "../../libs/i18n";
|
||||||
import { DATA_HOST, FADE_IN, FADE_OUT, HAS_USERBOX_ASSETS } from "../../libs/config";
|
import { DATA_HOST, FADE_IN, FADE_OUT, USERBOX_DEFAULT_URL } from "../../libs/config";
|
||||||
import { fade, slide } from "svelte/transition";
|
import { fade, slide } from "svelte/transition";
|
||||||
import StatusOverlays from "../StatusOverlays.svelte";
|
import StatusOverlays from "../StatusOverlays.svelte";
|
||||||
import Icon from "@iconify/svelte";
|
import Icon from "@iconify/svelte";
|
||||||
|
@ -118,27 +118,35 @@
|
||||||
}) ?? "";
|
}) ?? "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let USERBOX_URL_STATE = useLocalStorage("userboxURL", USERBOX_DEFAULT_URL);
|
||||||
function userboxHandleInput(e: KeyboardEvent) {
|
function userboxHandleInput(e: KeyboardEvent) {
|
||||||
if (e.key != "Enter")
|
if (e.key != "Enter")
|
||||||
return;
|
return;
|
||||||
let baseURL = (e.target as HTMLInputElement).value;
|
let baseURL = (e.target as HTMLInputElement).value;
|
||||||
try {
|
if (baseURL != "")
|
||||||
// validate url
|
try {
|
||||||
new URL(baseURL);
|
// validate url
|
||||||
} catch(err) {
|
new URL(baseURL);
|
||||||
return error = t("userbox.new.error.invalidUrl")
|
} catch(err) {
|
||||||
}
|
return error = t("userbox.new.error.invalidUrl")
|
||||||
useLocalStorage("userboxURL", "").value = baseURL;
|
}
|
||||||
|
USERBOX_URL_STATE.value = baseURL;
|
||||||
|
USERBOX_ENABLED.value = true;
|
||||||
|
USERBOX_PROFILE_ENABLED.value = true;
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (USERBOX_DEFAULT_URL)
|
||||||
|
USERBOX_URL_STATE.value = USERBOX_DEFAULT_URL;
|
||||||
|
|
||||||
indexedDB.databases().then(async (dbi) => {
|
indexedDB.databases().then(async (dbi) => {
|
||||||
let databaseExists = dbi.some(db => db.name == "userboxChusanDDS");
|
let databaseExists = dbi.some(db => db.name == "userboxChusanDDS");
|
||||||
if (databaseExists) {
|
if (databaseExists) {
|
||||||
await initializeDb();
|
await initializeDb();
|
||||||
DDSreader = new DDS(ddsDB);
|
DDSreader = new DDS(ddsDB);
|
||||||
USERBOX_INSTALLED = databaseExists;
|
USERBOX_INSTALLED = databaseExists;
|
||||||
}
|
} else if (USERBOX_URL_STATE.value)
|
||||||
|
USERBOX_INSTALLED = true;
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -225,45 +233,43 @@
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{#if HAS_USERBOX_ASSETS}
|
{#if USERBOX_INSTALLED}
|
||||||
{#if USERBOX_INSTALLED}
|
<!-- god this is a mess but idgaf atp -->
|
||||||
<!-- god this is a mess but idgaf atp -->
|
<div class="field boolean" style:margin-top="1em">
|
||||||
<div class="field boolean" style:margin-top="1em">
|
<input type="checkbox" bind:checked={USERBOX_ENABLED.value} id="newUserbox">
|
||||||
<input type="checkbox" bind:checked={USERBOX_ENABLED.value} id="newUserbox">
|
<label for="newUserbox">
|
||||||
<label for="newUserbox">
|
<span class="name">{t("userbox.new.activate")}</span>
|
||||||
<span class="name">{t("userbox.new.activate")}</span>
|
<span class="desc">{t(`userbox.new.activate_desc`)}</span>
|
||||||
<span class="desc">{t(`userbox.new.activate_desc`)}</span>
|
</label>
|
||||||
</label>
|
</div>
|
||||||
</div>
|
<div class="field boolean" style:margin-top="1em">
|
||||||
<div class="field boolean" style:margin-top="1em">
|
<input type="checkbox" bind:checked={USERBOX_PROFILE_ENABLED.value} id="newUserboxProfile">
|
||||||
<input type="checkbox" bind:checked={USERBOX_PROFILE_ENABLED.value} id="newUserboxProfile">
|
<label for="newUserboxProfile">
|
||||||
<label for="newUserboxProfile">
|
<span class="name">{t("userbox.new.activate_profile")}</span>
|
||||||
<span class="name">{t("userbox.new.activate_profile")}</span>
|
<span class="desc">{t(`userbox.new.activate_profile_desc`)}</span>
|
||||||
<span class="desc">{t(`userbox.new.activate_profile_desc`)}</span>
|
</label>
|
||||||
</label>
|
</div>
|
||||||
|
{/if}
|
||||||
|
{#if USERBOX_SUPPORT}
|
||||||
|
<p>
|
||||||
|
<button on:click={() => USERBOX_SETUP_RUN = !USERBOX_SETUP_RUN}>{t(!USERBOX_INSTALLED ? `userbox.new.activate_first` : `userbox.new.activate_update`)}</button>
|
||||||
|
</p>
|
||||||
|
{/if}
|
||||||
|
<!--{#if !USERBOX_SUPPORT || !USERBOX_INSTALLED || !USERBOX_ENABLED.value}
|
||||||
|
<h2>{t("userbox.header.preview")}</h2>
|
||||||
|
<p class="notice">{t("userbox.preview.notice")}</p>
|
||||||
|
<input bind:value={preview} placeholder={t("userbox.preview.url")}/>
|
||||||
|
{#if preview}
|
||||||
|
<div class="preview">
|
||||||
|
{#each userItems.filter(v => v.iKey != 'trophy' && v.iKey != 'systemVoice') as { iKey, ubKey, items }, i}
|
||||||
|
<div>
|
||||||
|
<span>{ts(`userbox.${ubKey}`)}</span>
|
||||||
|
<img src={`${preview}/${iKey}/${userbox[ubKey].toString().padStart(8, '0')}.png`} alt="" on:error={coverNotFound} />
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{#if USERBOX_SUPPORT}
|
{/if}-->
|
||||||
<p>
|
|
||||||
<button on:click={() => USERBOX_SETUP_RUN = !USERBOX_SETUP_RUN}>{t(!USERBOX_INSTALLED ? `userbox.new.activate_first` : `userbox.new.activate_update`)}</button>
|
|
||||||
</p>
|
|
||||||
{/if}
|
|
||||||
<!--{#if !USERBOX_SUPPORT || !USERBOX_INSTALLED || !USERBOX_ENABLED.value}
|
|
||||||
<h2>{t("userbox.header.preview")}</h2>
|
|
||||||
<p class="notice">{t("userbox.preview.notice")}</p>
|
|
||||||
<input bind:value={preview} placeholder={t("userbox.preview.url")}/>
|
|
||||||
{#if preview}
|
|
||||||
<div class="preview">
|
|
||||||
{#each userItems.filter(v => v.iKey != 'trophy' && v.iKey != 'systemVoice') as { iKey, ubKey, items }, i}
|
|
||||||
<div>
|
|
||||||
<span>{ts(`userbox.${ubKey}`)}</span>
|
|
||||||
<img src={`${preview}/${iKey}/${userbox[ubKey].toString().padStart(8, '0')}.png`} alt="" on:error={coverNotFound} />
|
|
||||||
</div>
|
|
||||||
{/each}
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
{/if}-->
|
|
||||||
{/if}
|
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
@ -271,11 +277,14 @@
|
||||||
<div class="overlay" transition:fade>
|
<div class="overlay" transition:fade>
|
||||||
<div>
|
<div>
|
||||||
<h2>{t('userbox.new.name')}</h2>
|
<h2>{t('userbox.new.name')}</h2>
|
||||||
<span>{USERBOX_SETUP_MODE ? t('userbox.preview.notice') + " " + t('userbox.new.url_warning') : USERBOX_SETUP_TEXT}</span>
|
<span>{USERBOX_SETUP_MODE ? t('userbox.new.url_warning') : USERBOX_SETUP_TEXT}</span>
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
{#if USERBOX_SETUP_MODE}
|
{#if USERBOX_SETUP_MODE}
|
||||||
<input type="text" on:keyup={userboxHandleInput} class="base-url-text" placeholder="Base URL">
|
<input type="text" on:keyup={userboxHandleInput} class="add-margin" placeholder="Base URL">
|
||||||
{:else}
|
{:else}
|
||||||
|
<p class="notice add-margin">
|
||||||
|
{t('userbox.new.setup.notice')}
|
||||||
|
</p>
|
||||||
{#if USERBOX_PROGRESS != 0}
|
{#if USERBOX_PROGRESS != 0}
|
||||||
<div class="progress">
|
<div class="progress">
|
||||||
<div class="progress-bar" style="width: {USERBOX_PROGRESS}%"></div>
|
<div class="progress-bar" style="width: {USERBOX_PROGRESS}%"></div>
|
||||||
|
@ -326,7 +335,7 @@ p.notice
|
||||||
border-radius: 25px
|
border-radius: 25px
|
||||||
|
|
||||||
|
|
||||||
.base-url-text, .drop-btn
|
.add-margin, .drop-btn
|
||||||
margin-bottom: 1em
|
margin-bottom: 1em
|
||||||
|
|
||||||
.drop-btn
|
.drop-btn
|
||||||
|
|
|
@ -16,4 +16,5 @@ export const FADE_IN = { delay: 400 }
|
||||||
export const DEFAULT_PFP = '/assets/imgs/no_profile.png'
|
export const DEFAULT_PFP = '/assets/imgs/no_profile.png'
|
||||||
|
|
||||||
// USERBOX_ASSETS
|
// USERBOX_ASSETS
|
||||||
export const HAS_USERBOX_ASSETS = true
|
// Please note that if this is set, it must be manually unset by users in Chuni Settings -> Update Userbox -> Switch to URL mode -> (empty value) -> Enter key
|
||||||
|
export const USERBOX_DEFAULT_URL = ""
|
|
@ -176,7 +176,6 @@ export const EN_REF_USERBOX = {
|
||||||
'userbox.avatarItem': 'Avatar Item',
|
'userbox.avatarItem': 'Avatar Item',
|
||||||
'userbox.avatarFront': 'Avatar Front',
|
'userbox.avatarFront': 'Avatar Front',
|
||||||
'userbox.avatarBack': 'Avatar Back',
|
'userbox.avatarBack': 'Avatar Back',
|
||||||
'userbox.preview.notice': 'To honor the copyright, we cannot host the images of the userbox items. However, if someone else is willing to provide the images, you can enter their URL here and it will be displayed.',
|
|
||||||
'userbox.preview.url': 'Image URL',
|
'userbox.preview.url': 'Image URL',
|
||||||
'userbox.error.nodata': 'Chuni data not found',
|
'userbox.error.nodata': 'Chuni data not found',
|
||||||
|
|
||||||
|
@ -190,12 +189,13 @@ export const EN_REF_USERBOX = {
|
||||||
|
|
||||||
'userbox.new.name': 'AquaBox',
|
'userbox.new.name': 'AquaBox',
|
||||||
'userbox.new.setup': 'Drag and drop your Chuni game folder (Lumi or newer) into the box below to display UserBoxes with their nameplate & avatar. All files are handled in-browser.',
|
'userbox.new.setup': 'Drag and drop your Chuni game folder (Lumi or newer) into the box below to display UserBoxes with their nameplate & avatar. All files are handled in-browser.',
|
||||||
|
'userbox.new.setup.notice': 'This tool assumes your files to be in "bin/option" and "data/A000".',
|
||||||
'userbox.new.setup.processing_file': 'Processing',
|
'userbox.new.setup.processing_file': 'Processing',
|
||||||
'userbox.new.setup.finalizing': 'Saving to internal storage',
|
'userbox.new.setup.finalizing': 'Saving to internal storage',
|
||||||
'userbox.new.drop': 'Drop game folder here',
|
'userbox.new.drop': 'Drop game folder here',
|
||||||
'userbox.new.switch.to_url': 'Switch to URL mode',
|
'userbox.new.switch.to_url': 'Switch to URL mode',
|
||||||
'userbox.new.switch.to_drop': 'Switch to drop mode',
|
'userbox.new.switch.to_drop': 'Switch to drop mode',
|
||||||
'userbox.new.url_warning': 'You are responsible for the results in this state. Please read the documentation.',
|
'userbox.new.url_warning': 'Enter in the path to access Userbox assets. You are responsible for any results in this state. Please read the documentation. Don\'t expect support for this mode.',
|
||||||
'userbox.new.activate_first': 'Enable AquaBox (game files required)',
|
'userbox.new.activate_first': 'Enable AquaBox (game files required)',
|
||||||
'userbox.new.activate_update': 'Update AquaBox (game files required)',
|
'userbox.new.activate_update': 'Update AquaBox (game files required)',
|
||||||
'userbox.new.activate': 'Use AquaBox',
|
'userbox.new.activate': 'Use AquaBox',
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import useLocalStorage from "../hooks/useLocalStorage.svelte";
|
import useLocalStorage from "../hooks/useLocalStorage.svelte";
|
||||||
|
import { USERBOX_DEFAULT_URL } from "../config";
|
||||||
|
|
||||||
export default class DDSCache {
|
export default class DDSCache {
|
||||||
constructor(db: IDBDatabase | undefined) {
|
constructor(db: IDBDatabase | undefined) {
|
||||||
|
@ -69,5 +70,5 @@ export default class DDSCache {
|
||||||
|
|
||||||
private urlCache: {scale: number, path: string, url: string}[] = [];
|
private urlCache: {scale: number, path: string, url: string}[] = [];
|
||||||
private db: IDBDatabase | undefined;
|
private db: IDBDatabase | undefined;
|
||||||
private userboxURL = useLocalStorage("userboxURL", "");
|
userboxURL = useLocalStorage("userboxURL", USERBOX_DEFAULT_URL);
|
||||||
}
|
}
|
Loading…
Reference in New Issue