{#if data.audioData.vocalsUrl}
diff --git a/src/routes/song/[id]/play/+page.server.ts b/src/routes/song/[id]/play/+page.server.ts
index 3488281..0cdde3a 100644
--- a/src/routes/song/[id]/play/+page.server.ts
+++ b/src/routes/song/[id]/play/+page.server.ts
@@ -1,15 +1,14 @@
import type { PageServerLoad } from './$types'
-import { getLyricsProcessed, getSongRaw, getSongUrl, checkLyricsProcessed } from "$lib/server/songs.ts"
+import { getLyricsProcessed, getSongUrl, checkLyricsProcessed } from "$lib/server/songs.ts"
import { redirect } from '@sveltejs/kit'
export const load: PageServerLoad = async ({ params, url }) => {
const songId = +params.id
- const song = await getSongRaw(songId)
const hasLrc = await checkLyricsProcessed(songId)
if (!hasLrc) throw redirect(302, `/song/${songId}`)
const lrc = await getLyricsProcessed(songId)!
const audioUrl = url.searchParams.get('music') === 'true' ? await getSongUrl(songId) : undefined
- return { song, lrc, audioUrl }
+ return { lrc, audioUrl }
}
\ No newline at end of file
diff --git a/src/routes/song/[id]/play/+page.svelte b/src/routes/song/[id]/play/+page.svelte
index 0ee28d8..1572193 100644
--- a/src/routes/song/[id]/play/+page.svelte
+++ b/src/routes/song/[id]/play/+page.svelte
@@ -157,7 +157,7 @@
musicControl?.ready()} onkeydown={() => musicControl?.ready()}/>
-
+
From 3bb4ff8e9a2dc8ce32a0fd15287b28a3825024e7 Mon Sep 17 00:00:00 2001
From: Azalea <22280294+hykilpikonna@users.noreply.github.com>
Date: Sun, 23 Nov 2025 10:09:55 +0800
Subject: [PATCH 3/5] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 277da33..bac48ac 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@ Practice Japanese Karaoke lyrics reading and typing at the same time with KaraDa
* [x] i18n
* [x] 404 page
-* [ ] Previous song / next song buttons
+* [x] Previous song / next song buttons
* [ ] Update an existing playlist
* [ ] Allow users to correct lyric pronunciations through correction feedback
* [ ] Correct lyrics timing inconsistencies (i.e. 网易云的歌词因为是业余用户上传的,时间戳不一定准确。但是 waveform 里面可以分析出每句歌词的具体开始结束时间,也许可以自动修正)
From 44d99dc8c1e9113c0ebf281b715ab2009f31fdb1 Mon Sep 17 00:00:00 2001
From: Azalea <22280294+hykilpikonna@users.noreply.github.com>
Date: Sun, 23 Nov 2025 10:32:09 +0800
Subject: [PATCH 4/5] [+] Update playlist option
---
src/lib/i18n/en.ts | 4 +++-
src/lib/i18n/ja.ts | 4 +++-
src/lib/i18n/zh.ts | 4 +++-
src/lib/server/songs.ts | 2 +-
src/lib/ui/ProgressList.svelte | 8 ++++----
src/routes/import/netease/+page.svelte | 6 ++++--
src/routes/playlist/[id]/+page.svelte | 8 +++++---
7 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/src/lib/i18n/en.ts b/src/lib/i18n/en.ts
index 39dbdbe..47f1017 100644
--- a/src/lib/i18n/en.ts
+++ b/src/lib/i18n/en.ts
@@ -37,6 +37,7 @@ export default {
tip: 'Go to NetEase Music App, find a Japanese playlist you like, click share, copy link, and paste it here to start importing!',
inputLabel: 'NetEase Playlist Link / ID',
btnStart: 'Start Import',
+ btnUpdate: 'Update Playlist',
btnView: 'View Playlist'
}
},
@@ -47,7 +48,8 @@ export default {
count: 'Songs: ',
startPractice: 'Start Practice',
songList: 'Song List',
- songs: 'songs'
+ songs: 'songs',
+ updateFromNetease: 'Update from NetEase'
},
list: {
mine: 'My Playlists',
diff --git a/src/lib/i18n/ja.ts b/src/lib/i18n/ja.ts
index ca2e986..425a73c 100644
--- a/src/lib/i18n/ja.ts
+++ b/src/lib/i18n/ja.ts
@@ -37,6 +37,7 @@ export default {
tip: 'NetEase Musicアプリでお気に入りの日本語プレイリストを見つけ、共有をクリックし、リンクをコピーしてここに貼り付けると、インポートを開始できます!',
inputLabel: 'NetEaseプレイリストリンク / ID',
btnStart: 'インポート開始',
+ btnUpdate: 'プレイリストを更新',
btnView: 'プレイリストを表示'
}
},
@@ -47,7 +48,8 @@ export default {
count: '曲数: ',
startPractice: '練習開始',
songList: '曲リスト',
- songs: '曲'
+ songs: '曲',
+ updateFromNetease: 'NetEaseから更新'
},
list: {
mine: 'マイプレイリスト',
diff --git a/src/lib/i18n/zh.ts b/src/lib/i18n/zh.ts
index 06d423f..c0e63ab 100644
--- a/src/lib/i18n/zh.ts
+++ b/src/lib/i18n/zh.ts
@@ -37,6 +37,7 @@ export default {
tip: '去网易云 APP 找一个你喜欢的日本语歌单,点击分享,再点击复制链接,然后把链接粘贴到这里就可以开始导入了!',
inputLabel: '网易云歌单链接 / ID',
btnStart: '开始导入',
+ btnUpdate: '更新歌单',
btnView: '查看歌单'
}
},
@@ -47,7 +48,8 @@ export default {
count: '歌曲数: ',
startPractice: '开始练习',
songList: '歌曲列表',
- songs: '首歌曲'
+ songs: '首歌曲',
+ updateFromNetease: '从网易云更新歌单'
},
list: {
mine: '我的歌单',
diff --git a/src/lib/server/songs.ts b/src/lib/server/songs.ts
index fbc00de..90dc354 100644
--- a/src/lib/server/songs.ts
+++ b/src/lib/server/songs.ts
@@ -226,7 +226,7 @@ export const getSession = (id: string) => sessions.get(id)
* @returns Import session
*/
export async function startImport(link: string, userId?: number): Promise {
- const meta = await getPlaylistRaw(parsePlaylistRef(link))
+ const meta = await getPlaylistRaw(parsePlaylistRef(link), true)
const importId = crypto.randomUUID()
const session: ImportSession = {
diff --git a/src/lib/ui/ProgressList.svelte b/src/lib/ui/ProgressList.svelte
index b36d314..a5220bd 100644
--- a/src/lib/ui/ProgressList.svelte
+++ b/src/lib/ui/ProgressList.svelte
@@ -27,14 +27,14 @@
-
+
{#each items as item}
-
-
{item.title}
+
+ {item.title}
{#if item.subtitle}
- {item.subtitle}
+ {item.subtitle}
{/if}
diff --git a/src/routes/import/netease/+page.svelte b/src/routes/import/netease/+page.svelte
index 95b96ce..dac97af 100644
--- a/src/routes/import/netease/+page.svelte
+++ b/src/routes/import/netease/+page.svelte
@@ -7,10 +7,12 @@
import ErrorDialog from "$lib/ui/status/ErrorDialog.svelte"
import ProgressList from "$lib/ui/ProgressList.svelte"
import { getI18n } from "$lib/i18n"
+ import { page } from '$app/state'
const t = getI18n().import.netease
- let link = $state('')
+ let link = $state(page.url.searchParams.get('id') ?? '')
+ let isUpdate = $derived(!!page.url.searchParams.get('id'))
interface SongImportStatus {
song: NeteaseSong
@@ -91,7 +93,7 @@
{#if status === 'idle'}
-
+
{:else if status === 'success'}
diff --git a/src/routes/playlist/[id]/+page.svelte b/src/routes/playlist/[id]/+page.svelte
index a149b03..bf0ced4 100644
--- a/src/routes/playlist/[id]/+page.svelte
+++ b/src/routes/playlist/[id]/+page.svelte
@@ -6,6 +6,7 @@
import SongInfo from "$lib/ui/listitem/SongInfo.svelte"
import { API } from "$lib/client"
import { getI18n } from "$lib/i18n"
+ import MenuItem from "$lib/ui/material3/MenuItem.svelte";
const t = getI18n().playlist.detail
@@ -49,9 +50,10 @@
{
icon: isFavorite ? "i-material-symbols:bookmark-rounded" : "i-material-symbols:bookmark-add-outline-rounded",
onclick: toggleFavorite
- },
- {icon: "i-material-symbols:more-vert", onclick: () => alert('More clicked')}
-]} />
+ }
+]}>
+
+

From c5293f34b3e73d53e1caac6b65d6bcb4468d2b7b Mon Sep 17 00:00:00 2001
From: Azalea <22280294+hykilpikonna@users.noreply.github.com>
Date: Sun, 23 Nov 2025 10:36:14 +0800
Subject: [PATCH 5/5] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index bac48ac..d22bf07 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@ Practice Japanese Karaoke lyrics reading and typing at the same time with KaraDa
* [x] i18n
* [x] 404 page
* [x] Previous song / next song buttons
-* [ ] Update an existing playlist
+* [x] Update an existing playlist
* [ ] Allow users to correct lyric pronunciations through correction feedback
* [ ] Correct lyrics timing inconsistencies (i.e. 网易云的歌词因为是业余用户上传的,时间戳不一定准确。但是 waveform 里面可以分析出每句歌词的具体开始结束时间,也许可以自动修正)