From eef40e39d1f132bc6b734f55d3cf54d26f446062 Mon Sep 17 00:00:00 2001 From: alix Date: Sat, 1 Mar 2025 01:35:49 -0500 Subject: [PATCH] implement memorial photo viewer (#119) * commit current progress\ will prob work on my mac ltr * more transferring to different device * grammar * [F] Fix warning inconsistency * [O] Split status overlays * [S] Better styling * [+] i18n * [+] Display photos tab conditionally --------- Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com> --- AquaNet/bun.lockb | Bin 226131 -> 226539 bytes AquaNet/src/App.svelte | 24 ++- AquaNet/src/components/StatusOverlays.svelte | 141 +++++++----------- .../settings/GeneralGameSettings.svelte | 14 +- AquaNet/src/components/ui/Error.svelte | 30 ++++ AquaNet/src/components/ui/Loading.svelte | 30 ++++ AquaNet/src/libs/i18n/en_ref.ts | 10 +- AquaNet/src/libs/i18n/zh.ts | 8 +- AquaNet/src/libs/sdk.ts | 2 + AquaNet/src/pages/MaiPhoto.svelte | 57 +++++++ 10 files changed, 210 insertions(+), 106 deletions(-) create mode 100644 AquaNet/src/components/ui/Error.svelte create mode 100644 AquaNet/src/components/ui/Loading.svelte create mode 100644 AquaNet/src/pages/MaiPhoto.svelte diff --git a/AquaNet/bun.lockb b/AquaNet/bun.lockb index 5211cc1537b71c18b44e5e959e5e622c7442d1c3..79a22916a470fce7f492010d64a5ac8a50cca218 100644 GIT binary patch delta 39061 zcmeIbdwkFJ|NsAbKJCR`Sk7!_jya4rhS}C;uaKCT^O|91wy|Lwo6|5G5^@MnJPZ>> z$RU!PqI7sirP9%qN+nb(9YiI+>;3tBzBcdoTYb*oKYo{97q{2_e!o5LkMr^Q-1Fu6 z&X+!4U-DTR9JuJ-i_P!#8Nc_f_#t0@@<>2whi$ztYHwfYn^&R7r@swId2QJ&?) zw=AJi>@K%%8V*Owgh?qu+36EIXb#664o6Ym$8 zBb)zf*|B2UZV{VF;f^^j|@MZSbB;mstT z5umm4``O#!@PYXdDcPrW2%4Cgm7ZH-q-ga53t**iuxYs|qa7EpC4bw?flSHGP04@N z*r?SDIYDSmD>N@PWnB7vY!~+Pw%mu5)V3p~^vjG(THBE1YL;~lDJ8fcDY0^G@6A+D zyuU`)KxP;*ddprT$VkflJ++oJYu2)2Ig!GrrR0yvBkULaq{QcuQnr4ztrpvgTmDhk;Rt{~ zXUmt74Y0S_aVnpm~|)RwQ?@_;Qj*>b5ZXV@~smhng$xUi_Jr4+TbWdmDQ zMoKeZqp?JOY0GzQ`GPGcW#>q(9M@Z0oxY=u)w#ZRS@BK>TD%LJ@lZ5*5>tiGkRYkR zSVz$z6d4WSwoC}NA_ic~csPpfgG|q!m^m>sJ#UX~ztz@CIHaA`v2~Hs?lE>ct&j|~ zq8%Yt#%m4D+0t)+dut3jD2|NHv`OQ~rB6-IU2k-8HY%(ZYNa_8DRI;DMo!8cm*)6? z)Jp@3{-m4!`@Lj@RBTyjbhM_WRJH0el_gDcC@p-CZvy=B!j3w6_b@_ z1%pmjmSm$#rFs#~?z5^}$Cd|?GQuh&WkhA>1&tn;Gtx1?hZQR~JtZwIGk1Klv8+

YQoU`- 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 diff --git a/AquaNet/src/App.svelte b/AquaNet/src/App.svelte index 36abe15a..0d51d2d2 100644 --- a/AquaNet/src/App.svelte +++ b/AquaNet/src/App.svelte @@ -4,9 +4,10 @@ import UserHome from "./pages/UserHome.svelte"; import Home from "./pages/Home.svelte"; import Ranking from "./pages/Ranking.svelte"; - import { USER } from "./libs/sdk"; + import { CARD, USER } from "./libs/sdk"; import type { AquaNetUser } from "./libs/generalTypes"; import Settings from "./pages/User/Settings.svelte"; + import MaiPhoto from "./pages/MaiPhoto.svelte"; import { pfp, tooltip } from "./libs/ui" import { ANNOUNCEMENT } from "./libs/config"; import { t } from "./libs/i18n"; @@ -25,9 +26,18 @@ export let url = ""; let me: AquaNetUser + let playedMai = false - if (USER.isLoggedIn()) USER.me().then(m => me = m).catch(e => console.error(e)) + if (USER.isLoggedIn()) + { + USER.me().then(m => { + me = m + CARD.userGames(me.username).then(game => { + playedMai = !!game.mai2 + }) + }).catch(e => console.error(e)) + } let path = window.location.pathname; @@ -44,11 +54,14 @@ {/if} {t('navigation.home').toLowerCase()} -

alert("Coming soon™")} on:keydown={e => e.key === "Enter" && alert("Coming soon™")} - role="button" tabindex="0">{t('navigation.maps').toLowerCase()}
+ {t('navigation.rankings').toLowerCase()} + {#if playedMai} + photo + {/if} {#if me} - + profile {/if} @@ -62,6 +75,7 @@ + + + + + +{#if confirm} +
+
+

{confirm.title}

+ {confirm.message} + +
+ {#if confirm.cancel} + + + {/if} + +
+
+
+{/if} + +{#if error} + +{/if} + +{#if loading && !error} + +{/if} + + diff --git a/AquaNet/src/components/settings/GeneralGameSettings.svelte b/AquaNet/src/components/settings/GeneralGameSettings.svelte index 6fbbb64a..07146fd1 100644 --- a/AquaNet/src/components/settings/GeneralGameSettings.svelte +++ b/AquaNet/src/components/settings/GeneralGameSettings.svelte @@ -9,9 +9,9 @@
-

+

{ts("settings.gameNotice")} -

+
@@ -59,14 +59,4 @@ > input flex: 1 - - .warning - background: #aa555510 - padding: 10px - border-left: solid 2px vars.$c-error - - &::before - color: vars.$c-error - font-weight: bold - content: "!" diff --git a/AquaNet/src/components/ui/Error.svelte b/AquaNet/src/components/ui/Error.svelte new file mode 100644 index 00000000..a3caf0d6 --- /dev/null +++ b/AquaNet/src/components/ui/Error.svelte @@ -0,0 +1,30 @@ + + +
+
+

{t('status.error')}

+ {t('status.error.hint')}{t('status.error.hint.link')} + {t('status.detail', { detail: error })} + +
+ +
+
+
+ + diff --git a/AquaNet/src/components/ui/Loading.svelte b/AquaNet/src/components/ui/Loading.svelte new file mode 100644 index 00000000..32d9328a --- /dev/null +++ b/AquaNet/src/components/ui/Loading.svelte @@ -0,0 +1,30 @@ + + +
+ + LOADING +
+ + diff --git a/AquaNet/src/libs/i18n/en_ref.ts b/AquaNet/src/libs/i18n/en_ref.ts index 1e3de49c..3c0cc05e 100644 --- a/AquaNet/src/libs/i18n/en_ref.ts +++ b/AquaNet/src/libs/i18n/en_ref.ts @@ -229,7 +229,15 @@ export const EN_REF_USERBOX = { 'userbox.new.error.invalidUrl': 'The URL you inputted is invalid.' } +export const EN_REF_MAI_PHOTO = { + 'maiphoto.title': 'Mai Memorial Photo Gallery', + 'maiphoto.url_warning': 'Note: If you want to share a photo with your friend, please save the photo. Do not copy image URL because the URL contains sensitive information.', + 'maiphoto.none': 'No photo found. You can upload photo by clicking upload at the end of each game session.', +} + export const EN_REF = { ...EN_REF_USER, ...EN_REF_Welcome, ...EN_REF_GENERAL, - ...EN_REF_LEADERBOARD, ...EN_REF_HOME, ...EN_REF_SETTINGS, ...EN_REF_USERBOX } + ...EN_REF_LEADERBOARD, ...EN_REF_HOME, ...EN_REF_SETTINGS, ...EN_REF_USERBOX, + ...EN_REF_MAI_PHOTO +} export type LocalizedMessages = typeof EN_REF diff --git a/AquaNet/src/libs/i18n/zh.ts b/AquaNet/src/libs/i18n/zh.ts index 591f6b35..08bcd4b1 100644 --- a/AquaNet/src/libs/i18n/zh.ts +++ b/AquaNet/src/libs/i18n/zh.ts @@ -2,6 +2,7 @@ import { EN_REF_GENERAL, EN_REF_HOME, EN_REF_LEADERBOARD, + EN_REF_MAI_PHOTO, EN_REF_SETTINGS, EN_REF_USER, EN_REF_USERBOX, @@ -234,6 +235,11 @@ export const zhUserbox: typeof EN_REF_USERBOX = { 'userbox.new.error.invalidUrl': '输入的 URL 无效。' }; +export const zhMaiPhoto: typeof EN_REF_MAI_PHOTO = { + 'maiphoto.title': 'Mai 纪念照片库', + 'maiphoto.url_warning': '注意:如果想与朋友分享图片的话,请先保存照片再发出去。不要复制图片 URL,因为 URL 中包含 AquaDX 账号信息。', + 'maiphoto.none': '还没有图片哦~ 可以在每次游戏结束的时候点击上传来上传照片。', +} export const ZH = { ...zhUser, ...zhWelcome, ...zhGeneral, - ...zhLeaderboard, ...zhHome, ...zhSettings, ...zhUserbox } + ...zhLeaderboard, ...zhHome, ...zhSettings, ...zhUserbox, ...zhMaiPhoto } diff --git a/AquaNet/src/libs/sdk.ts b/AquaNet/src/libs/sdk.ts index 9761e99e..8b71ef23 100644 --- a/AquaNet/src/libs/sdk.ts +++ b/AquaNet/src/libs/sdk.ts @@ -284,6 +284,8 @@ export const CARD = { export const GAME = { trend: (username: string, game: GameName): Promise => post(`/api/v2/game/${game}/trend`, { username }), + photos: (): Promise => + post(`/api/v2/game/mai2/my-photo`, { }), userSummary: (username: string, game: GameName): Promise => post(`/api/v2/game/${game}/user-summary`, { username }), ranking: (game: GameName): Promise => diff --git a/AquaNet/src/pages/MaiPhoto.svelte b/AquaNet/src/pages/MaiPhoto.svelte new file mode 100644 index 00000000..8b9eb9ad --- /dev/null +++ b/AquaNet/src/pages/MaiPhoto.svelte @@ -0,0 +1,57 @@ + + +
+
+

{t("maiphoto.title")}

+
+ + {#await GAME.photos()} + + {:then photos} + {#if photos.length === 0} +
{t('maiphoto.none')}
+ {:else} +
{t('maiphoto.url_warning')}
+ {/if} +
+ {#each photos as photo} +
+ Memorial +
+ {/each} +
+ {:catch error} + + {/await} +
+ +