From d8734f830232b2f3e231e9b8d4cd17977f27a3d3 Mon Sep 17 00:00:00 2001 From: alger Date: Sun, 14 Sep 2025 00:19:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/i18n/lang/en-US/login.ts | 6 +- src/i18n/lang/en-US/settings.ts | 7 +- src/i18n/lang/ja-JP/README.md | 2 +- src/i18n/lang/ja-JP/artist.ts | 2 +- src/i18n/lang/ja-JP/common.ts | 2 +- src/i18n/lang/ja-JP/comp.ts | 11 +- src/i18n/lang/ja-JP/donation.ts | 5 +- src/i18n/lang/ja-JP/download.ts | 5 +- src/i18n/lang/ja-JP/favorite.ts | 2 +- src/i18n/lang/ja-JP/history.ts | 2 +- src/i18n/lang/ja-JP/login.ts | 8 +- src/i18n/lang/ja-JP/player.ts | 5 +- src/i18n/lang/ja-JP/search.ts | 2 +- src/i18n/lang/ja-JP/settings.ts | 19 +-- src/i18n/lang/ja-JP/songItem.ts | 2 +- src/i18n/lang/ja-JP/user.ts | 2 +- src/i18n/lang/ko-KR/artist.ts | 2 +- src/i18n/lang/ko-KR/common.ts | 2 +- src/i18n/lang/ko-KR/comp.ts | 8 +- src/i18n/lang/ko-KR/donation.ts | 5 +- src/i18n/lang/ko-KR/download.ts | 5 +- src/i18n/lang/ko-KR/favorite.ts | 2 +- src/i18n/lang/ko-KR/history.ts | 2 +- src/i18n/lang/ko-KR/login.ts | 8 +- src/i18n/lang/ko-KR/player.ts | 2 +- src/i18n/lang/ko-KR/search.ts | 2 +- src/i18n/lang/ko-KR/settings.ts | 13 ++- src/i18n/lang/ko-KR/songItem.ts | 2 +- src/i18n/lang/ko-KR/user.ts | 2 +- src/i18n/lang/zh-CN/settings.ts | 7 +- src/i18n/lang/zh-Hant/settings.ts | 4 +- src/main/modules/fileManager.ts | 50 ++++---- src/preload/index.ts | 2 +- .../components/common/MusicListNavigator.ts | 26 ++--- src/renderer/hooks/useSongItem.ts | 16 +-- src/renderer/index.html | 16 +-- src/renderer/layout/components/AppMenu.vue | 8 +- src/renderer/store/modules/player.ts | 109 ++++++++++-------- src/renderer/store/modules/settings.ts | 2 +- 39 files changed, 208 insertions(+), 169 deletions(-) diff --git a/src/i18n/lang/en-US/login.ts b/src/i18n/lang/en-US/login.ts index 0a20664..dfc12f0 100644 --- a/src/i18n/lang/en-US/login.ts +++ b/src/i18n/lang/en-US/login.ts @@ -45,7 +45,8 @@ export default { phoneLoginFailed: 'Phone login failed, please check if phone number and password are correct', autoGetCookieSuccess: 'Auto get Cookie successful', autoGetCookieFailed: 'Auto get Cookie failed', - autoGetCookieTip: 'Will open NetEase Cloud Music login page, please complete login and close the window', + autoGetCookieTip: + 'Will open NetEase Cloud Music login page, please complete login and close the window', qrCheckFailed: 'Failed to check QR code status, please refresh and try again', qrLoading: 'Loading QR code...', qrExpired: 'QR code has expired, please click to refresh', @@ -58,5 +59,6 @@ export default { qrGenerating: 'Generating QR code...' }, qrTitle: 'NetEase Cloud Music QR Code Login', - uidWarning: 'Note: UID login is only for viewing user public information and cannot access features that require login permissions.' + uidWarning: + 'Note: UID login is only for viewing user public information and cannot access features that require login permissions.' }; diff --git a/src/i18n/lang/en-US/settings.ts b/src/i18n/lang/en-US/settings.ts index fcec2cd..cad2a1a 100644 --- a/src/i18n/lang/en-US/settings.ts +++ b/src/i18n/lang/en-US/settings.ts @@ -82,7 +82,8 @@ export default { showStatusBarContent: 'You can display the music control function in your mac status bar (effective after a restart)', fallbackParser: 'Fallback Parser (GD Music)', - fallbackParserDesc: 'When "GD Music" is checked and regular sources fail, this service will be used.', + fallbackParserDesc: + 'When "GD Music" is checked and regular sources fail, this service will be used.', parserGD: 'GD Music (Built-in)', parserCustom: 'Custom API', @@ -103,8 +104,8 @@ export default { notImported: 'No custom source imported yet.', importSuccess: 'Successfully imported source: {name}', importFailed: 'Import failed: {message}', - enableHint: 'Import a JSON config file to enable', - }, + enableHint: 'Import a JSON config file to enable' + } }, application: { closeAction: 'Close Action', diff --git a/src/i18n/lang/ja-JP/README.md b/src/i18n/lang/ja-JP/README.md index dba757b..7ef95bd 100644 --- a/src/i18n/lang/ja-JP/README.md +++ b/src/i18n/lang/ja-JP/README.md @@ -35,4 +35,4 @@ - すべての翻訳キーは中国語版と英語版に対応しています - 新しい機能が追加された場合は、対応する日本語翻訳も追加する必要があります -- 文字化けを避けるため、ファイルはUTF-8エンコーディングで保存してください \ No newline at end of file +- 文字化けを避けるため、ファイルはUTF-8エンコーディングで保存してください diff --git a/src/i18n/lang/ja-JP/artist.ts b/src/i18n/lang/ja-JP/artist.ts index ab0a41b..b8177d6 100644 --- a/src/i18n/lang/ja-JP/artist.ts +++ b/src/i18n/lang/ja-JP/artist.ts @@ -2,4 +2,4 @@ export default { hotSongs: '人気楽曲', albums: 'アルバム', description: 'アーティスト紹介' -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ja-JP/common.ts b/src/i18n/lang/ja-JP/common.ts index 5883d7b..ced7545 100644 --- a/src/i18n/lang/ja-JP/common.ts +++ b/src/i18n/lang/ja-JP/common.ts @@ -53,4 +53,4 @@ export default { play: '再生', favorite: 'お気に入り' } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ja-JP/comp.ts b/src/i18n/lang/ja-JP/comp.ts index 79fcb87..078b4a6 100644 --- a/src/i18n/lang/ja-JP/comp.ts +++ b/src/i18n/lang/ja-JP/comp.ts @@ -38,10 +38,12 @@ export default { nowUpdate: '今すぐ更新', downloadFailed: 'ダウンロードに失敗しました。再試行するか手動でダウンロードしてください', startFailed: 'ダウンロードの開始に失敗しました。再試行するか手動でダウンロードしてください', - noDownloadUrl: '現在のシステムに適したインストールパッケージが見つかりません。手動でダウンロードしてください', + noDownloadUrl: + '現在のシステムに適したインストールパッケージが見つかりません。手動でダウンロードしてください', installConfirmTitle: '更新をインストール', installConfirmContent: 'アプリを閉じて更新をインストールしますか?', - manualInstallTip: 'アプリを閉じた後にインストーラーが正常に起動しない場合は、ダウンロードフォルダでファイルを見つけて手動で開いてください。', + manualInstallTip: + 'アプリを閉じた後にインストーラーが正常に起動しない場合は、ダウンロードフォルダでファイルを見つけて手動で開いてください。', yesInstall: '今すぐインストール', noThanks: '後でインストール', fileLocation: 'ファイルの場所', @@ -172,7 +174,8 @@ export default { noTasks: 'インポートタスクがありません', clearTasks: 'タスクをクリア', clearTasksConfirmTitle: 'クリア確認', - clearTasksConfirmContent: 'すべてのインポートタスク記録をクリアしますか?この操作は元に戻せません。', + clearTasksConfirmContent: + 'すべてのインポートタスク記録をクリアしますか?この操作は元に戻せません。', confirm: '確認', cancel: 'キャンセル', clearTasksSuccess: 'タスクリストをクリアしました', @@ -187,4 +190,4 @@ export default { mv: 'MV', home: 'ホーム', search: '検索' -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ja-JP/donation.ts b/src/i18n/lang/ja-JP/donation.ts index b5a19e2..cd33567 100644 --- a/src/i18n/lang/ja-JP/donation.ts +++ b/src/i18n/lang/ja-JP/donation.ts @@ -1,8 +1,9 @@ export default { - description: 'あなたの寄付は開発・保守作業をサポートするために使用され、サーバー保守、ドメイン更新などが含まれます。', + description: + 'あなたの寄付は開発・保守作業をサポートするために使用され、サーバー保守、ドメイン更新などが含まれます。', message: 'メッセージを残す際は、メールアドレスやGitHubユーザー名を記載してください。', refresh: 'リストを更新', toDonateList: 'コーヒーをおごる', noMessage: 'メッセージがありません', title: '寄付リスト' -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ja-JP/download.ts b/src/i18n/lang/ja-JP/download.ts index 8e05f1a..ed06cfd 100644 --- a/src/i18n/lang/ja-JP/download.ts +++ b/src/i18n/lang/ja-JP/download.ts @@ -36,7 +36,8 @@ export default { }, clear: { title: 'ダウンロード記録をクリア', - message: 'すべてのダウンロード記録をクリアしますか?この操作はダウンロード済みの音楽ファイルを削除しませんが、すべての記録をクリアします。', + message: + 'すべてのダウンロード記録をクリアしますか?この操作はダウンロード済みの音楽ファイルを削除しませんが、すべての記録をクリアします。', confirm: 'クリア確認', cancel: 'キャンセル', success: 'ダウンロード記録をクリアしました' @@ -84,4 +85,4 @@ export default { albumName: 'アルバム名' } } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ja-JP/favorite.ts b/src/i18n/lang/ja-JP/favorite.ts index 6374f97..78940cd 100644 --- a/src/i18n/lang/ja-JP/favorite.ts +++ b/src/i18n/lang/ja-JP/favorite.ts @@ -10,4 +10,4 @@ export default { selectSongsFirst: 'まずダウンロードする楽曲を選択してください', descending: '降順', ascending: '昇順' -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ja-JP/history.ts b/src/i18n/lang/ja-JP/history.ts index ef833a0..db14769 100644 --- a/src/i18n/lang/ja-JP/history.ts +++ b/src/i18n/lang/ja-JP/history.ts @@ -2,4 +2,4 @@ export default { title: '再生履歴', playCount: '{count}', getHistoryFailed: '履歴の取得に失敗しました' -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ja-JP/login.ts b/src/i18n/lang/ja-JP/login.ts index fe42d7c..612c0e4 100644 --- a/src/i18n/lang/ja-JP/login.ts +++ b/src/i18n/lang/ja-JP/login.ts @@ -41,8 +41,10 @@ export default { uidLoginFailed: 'UIDログインに失敗しました。ユーザーIDが正しいか確認してください', autoGetCookieSuccess: 'Cookie自動取得成功', autoGetCookieFailed: 'Cookie自動取得失敗', - autoGetCookieTip: 'NetEase Cloud Musicのログインページを開きます。ログイン完了後、ウィンドウを閉じてください' + autoGetCookieTip: + 'NetEase Cloud Musicのログインページを開きます。ログイン完了後、ウィンドウを閉じてください' }, qrTitle: 'NetEase Cloud Music QRコードログイン', - uidWarning: '注意:UIDログインはユーザーの公開情報を表示するためのみ使用でき、ログイン権限が必要な機能にはアクセスできません。' -}; \ No newline at end of file + uidWarning: + '注意:UIDログインはユーザーの公開情報を表示するためのみ使用でき、ログイン権限が必要な機能にはアクセスできません。' +}; diff --git a/src/i18n/lang/ja-JP/player.ts b/src/i18n/lang/ja-JP/player.ts index a90efde..d8c4842 100644 --- a/src/i18n/lang/ja-JP/player.ts +++ b/src/i18n/lang/ja-JP/player.ts @@ -120,6 +120,7 @@ export default { cleared: 'プレイリストをクリアしました', empty: 'プレイリストが空です', clearConfirmTitle: 'プレイリストをクリア', - clearConfirmContent: 'これによりプレイリスト内のすべての楽曲がクリアされ、現在の再生が停止されます。続行しますか?' + clearConfirmContent: + 'これによりプレイリスト内のすべての楽曲がクリアされ、現在の再生が停止されます。続行しますか?' } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ja-JP/search.ts b/src/i18n/lang/ja-JP/search.ts index e02038e..79f88da 100644 --- a/src/i18n/lang/ja-JP/search.ts +++ b/src/i18n/lang/ja-JP/search.ts @@ -24,4 +24,4 @@ export default { mv: 'MV', bilibili: 'Bilibili' } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ja-JP/settings.ts b/src/i18n/lang/ja-JP/settings.ts index c8f563d..8b93e4f 100644 --- a/src/i18n/lang/ja-JP/settings.ts +++ b/src/i18n/lang/ja-JP/settings.ts @@ -78,9 +78,11 @@ export default { autoPlay: '自動再生', autoPlayDesc: 'アプリを再起動した際に自動的に再生を継続するかどうか', showStatusBar: 'ステータスバーコントロール機能を表示するかどうか', - showStatusBarContent: 'Macのステータスバーに音楽コントロール機能を表示できます(再起動後に有効)', + showStatusBarContent: + 'Macのステータスバーに音楽コントロール機能を表示できます(再起動後に有効)', fallbackParser: '代替解析サービス (GD音楽台)', - fallbackParserDesc: '「GD音楽台」にチェックが入っていて、通常の音源で再生できない場合、このサービスが使用されます。', + fallbackParserDesc: + '「GD音楽台」にチェックが入っていて、通常の音源で再生できない場合、このサービスが使用されます。', parserGD: 'GD 音楽台 (内蔵)', parserCustom: 'カスタム API', sourceLabels: { @@ -93,13 +95,14 @@ export default { }, customApi: { sectionTitle: 'カスタム API 設定', - enableHint: 'カスタム API を有効にするには、まずカスタム API をインポートする必要があります。', + enableHint: + 'カスタム API を有効にするには、まずカスタム API をインポートする必要があります。', importConfig: 'JSON設定をインポート', currentSource: '現在の音源', notImported: 'カスタム音源はまだインポートされていません。', importSuccess: '音源のインポートに成功しました: {name}', - importFailed: 'インポートに失敗しました: {message}', - }, + importFailed: 'インポートに失敗しました: {message}' + } }, application: { closeAction: '閉じる動作', @@ -114,7 +117,8 @@ export default { download: 'ダウンロード管理', downloadDesc: 'ダウンロードリストボタンを常に表示するかどうか', unlimitedDownload: '無制限ダウンロード', - unlimitedDownloadDesc: '有効にすると音楽を無制限でダウンロードします(ダウンロード失敗の可能性があります)。デフォルトは300曲制限', + unlimitedDownloadDesc: + '有効にすると音楽を無制限でダウンロードします(ダウンロード失敗の可能性があります)。デフォルトは300曲制限', downloadPath: 'ダウンロードディレクトリ', downloadPathDesc: '音楽ファイルのダウンロード場所を選択', remoteControl: 'リモートコントロール', @@ -130,7 +134,8 @@ export default { proxyPort: 'プロキシポート', proxyPortPlaceholder: 'プロキシポートを入力してください', realIP: 'realIP設定', - realIPDesc: '制限により、このプロジェクトは海外での使用が制限されます。realIPパラメータを使用して国内IPを渡すことで解決できます', + realIPDesc: + '制限により、このプロジェクトは海外での使用が制限されます。realIPパラメータを使用して国内IPを渡すことで解決できます', messages: { proxySuccess: 'プロキシ設定を保存しました。アプリ再起動後に有効になります', proxyError: '入力が正しいかどうか確認してください', diff --git a/src/i18n/lang/ja-JP/songItem.ts b/src/i18n/lang/ja-JP/songItem.ts index 36f703a..a342022 100644 --- a/src/i18n/lang/ja-JP/songItem.ts +++ b/src/i18n/lang/ja-JP/songItem.ts @@ -25,4 +25,4 @@ export default { negativeText: 'キャンセル' } } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ja-JP/user.ts b/src/i18n/lang/ja-JP/user.ts index 89606ef..f7fcd91 100644 --- a/src/i18n/lang/ja-JP/user.ts +++ b/src/i18n/lang/ja-JP/user.ts @@ -45,4 +45,4 @@ export default { deleteSuccess: '削除成功', deleteFailed: '削除失敗' } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ko-KR/artist.ts b/src/i18n/lang/ko-KR/artist.ts index 135d79c..b32a3b6 100644 --- a/src/i18n/lang/ko-KR/artist.ts +++ b/src/i18n/lang/ko-KR/artist.ts @@ -2,4 +2,4 @@ export default { hotSongs: '인기 곡', albums: '앨범', description: '아티스트 소개' -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ko-KR/common.ts b/src/i18n/lang/ko-KR/common.ts index 730613d..836aad1 100644 --- a/src/i18n/lang/ko-KR/common.ts +++ b/src/i18n/lang/ko-KR/common.ts @@ -53,4 +53,4 @@ export default { play: '재생', favorite: '즐겨찾기' } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ko-KR/comp.ts b/src/i18n/lang/ko-KR/comp.ts index c10b01d..c8915bd 100644 --- a/src/i18n/lang/ko-KR/comp.ts +++ b/src/i18n/lang/ko-KR/comp.ts @@ -41,7 +41,8 @@ export default { noDownloadUrl: '현재 시스템에 적합한 설치 패키지를 찾을 수 없습니다. 수동으로 다운로드해주세요', installConfirmTitle: '업데이트 설치', installConfirmContent: '앱을 닫고 업데이트를 설치하시겠습니까?', - manualInstallTip: '앱을 닫은 후 설치 프로그램이 정상적으로 나타나지 않으면 다운로드 폴더에서 파일을 찾아 수동으로 열어주세요.', + manualInstallTip: + '앱을 닫은 후 설치 프로그램이 정상적으로 나타나지 않으면 다운로드 폴더에서 파일을 찾아 수동으로 열어주세요.', yesInstall: '지금 설치', noThanks: '나중에 설치', fileLocation: '파일 위치', @@ -172,7 +173,8 @@ export default { noTasks: '가져오기 작업이 없습니다', clearTasks: '작업 지우기', clearTasksConfirmTitle: '지우기 확인', - clearTasksConfirmContent: '모든 가져오기 작업 기록을 지우시겠습니까? 이 작업은 되돌릴 수 없습니다.', + clearTasksConfirmContent: + '모든 가져오기 작업 기록을 지우시겠습니까? 이 작업은 되돌릴 수 없습니다.', confirm: '확인', cancel: '취소', clearTasksSuccess: '작업 목록이 지워졌습니다', @@ -187,4 +189,4 @@ export default { mv: 'MV', home: '홈', search: '검색' -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ko-KR/donation.ts b/src/i18n/lang/ko-KR/donation.ts index 880e433..0082b9f 100644 --- a/src/i18n/lang/ko-KR/donation.ts +++ b/src/i18n/lang/ko-KR/donation.ts @@ -1,8 +1,9 @@ export default { - description: '귀하의 기부는 서버 유지보수, 도메인 갱신 등을 포함한 개발 및 유지보수 작업을 지원하는 데 사용됩니다.', + description: + '귀하의 기부는 서버 유지보수, 도메인 갱신 등을 포함한 개발 및 유지보수 작업을 지원하는 데 사용됩니다.', message: '메시지를 남길 때 이메일이나 GitHub 이름을 남겨주세요.', refresh: '목록 새로고침', toDonateList: '커피 한 잔 사주세요', noMessage: '메시지가 없습니다', title: '기부 목록' -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ko-KR/download.ts b/src/i18n/lang/ko-KR/download.ts index 4613a59..05f294c 100644 --- a/src/i18n/lang/ko-KR/download.ts +++ b/src/i18n/lang/ko-KR/download.ts @@ -36,7 +36,8 @@ export default { }, clear: { title: '다운로드 기록 지우기', - message: '모든 다운로드 기록을 지우시겠습니까? 이 작업은 다운로드된 음악 파일을 삭제하지 않지만 모든 기록을 지웁니다.', + message: + '모든 다운로드 기록을 지우시겠습니까? 이 작업은 다운로드된 음악 파일을 삭제하지 않지만 모든 기록을 지웁니다.', confirm: '지우기 확인', cancel: '취소', success: '다운로드 기록이 지워졌습니다' @@ -84,4 +85,4 @@ export default { albumName: '앨범명' } } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ko-KR/favorite.ts b/src/i18n/lang/ko-KR/favorite.ts index 61b2989..c6559b9 100644 --- a/src/i18n/lang/ko-KR/favorite.ts +++ b/src/i18n/lang/ko-KR/favorite.ts @@ -10,4 +10,4 @@ export default { selectSongsFirst: '먼저 다운로드할 곡을 선택해주세요', descending: '내림차순', ascending: '오름차순' -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ko-KR/history.ts b/src/i18n/lang/ko-KR/history.ts index bc22714..1449ae5 100644 --- a/src/i18n/lang/ko-KR/history.ts +++ b/src/i18n/lang/ko-KR/history.ts @@ -2,4 +2,4 @@ export default { title: '재생 기록', playCount: '{count}', getHistoryFailed: '기록 가져오기 실패' -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ko-KR/login.ts b/src/i18n/lang/ko-KR/login.ts index 7fb150e..19b68ea 100644 --- a/src/i18n/lang/ko-KR/login.ts +++ b/src/i18n/lang/ko-KR/login.ts @@ -41,8 +41,10 @@ export default { uidLoginFailed: 'UID 로그인에 실패했습니다. 사용자 ID가 올바른지 확인하세요', autoGetCookieSuccess: 'Cookie 자동 가져오기 성공', autoGetCookieFailed: 'Cookie 자동 가져오기 실패', - autoGetCookieTip: '넷이즈 클라우드 뮤직 로그인 페이지를 열겠습니다. 로그인 완료 후 창을 닫아주세요' + autoGetCookieTip: + '넷이즈 클라우드 뮤직 로그인 페이지를 열겠습니다. 로그인 완료 후 창을 닫아주세요' }, qrTitle: '넷이즈 클라우드 뮤직 QR코드 로그인', - uidWarning: '주의: UID 로그인은 사용자 공개 정보를 확인하는 데만 사용할 수 있으며, 로그인 권한이 필요한 기능에 액세스할 수 없습니다.' -}; \ No newline at end of file + uidWarning: + '주의: UID 로그인은 사용자 공개 정보를 확인하는 데만 사용할 수 있으며, 로그인 권한이 필요한 기능에 액세스할 수 없습니다.' +}; diff --git a/src/i18n/lang/ko-KR/player.ts b/src/i18n/lang/ko-KR/player.ts index 5a1c8b0..8ccd26f 100644 --- a/src/i18n/lang/ko-KR/player.ts +++ b/src/i18n/lang/ko-KR/player.ts @@ -121,4 +121,4 @@ export default { clearConfirmTitle: '재생 목록 비우기', clearConfirmContent: '재생 목록의 모든 곡을 삭제하고 현재 재생을 중지합니다. 계속하시겠습니까?' } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ko-KR/search.ts b/src/i18n/lang/ko-KR/search.ts index c284609..cc4a99b 100644 --- a/src/i18n/lang/ko-KR/search.ts +++ b/src/i18n/lang/ko-KR/search.ts @@ -24,4 +24,4 @@ export default { mv: 'MV', bilibili: 'B站' } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ko-KR/settings.ts b/src/i18n/lang/ko-KR/settings.ts index 4169ffc..83a863f 100644 --- a/src/i18n/lang/ko-KR/settings.ts +++ b/src/i18n/lang/ko-KR/settings.ts @@ -80,7 +80,8 @@ export default { showStatusBar: '상태바 제어 기능 표시 여부', showStatusBarContent: 'Mac 상태바에 음악 제어 기능을 표시할 수 있습니다 (재시작 후 적용)', fallbackParser: '대체 분석 서비스 (GD Music)', - fallbackParserDesc: '"GD Music"을 선택하고 일반 음원을 사용할 수 없을 때 이 서비스를 사용합니다.', + fallbackParserDesc: + '"GD Music"을 선택하고 일반 음원을 사용할 수 없을 때 이 서비스를 사용합니다.', parserGD: 'GD Music (내장)', parserCustom: '사용자 지정 API', @@ -101,8 +102,8 @@ export default { notImported: '아직 사용자 지정 음원을 가져오지 않았습니다.', importSuccess: '음원 가져오기 성공: {name}', importFailed: '가져오기 실패: {message}', - enableHint: '사용하려면 먼저 JSON 구성 파일을 가져오세요', - }, + enableHint: '사용하려면 먼저 JSON 구성 파일을 가져오세요' + } }, application: { closeAction: '닫기 동작', @@ -117,7 +118,8 @@ export default { download: '다운로드 관리', downloadDesc: '다운로드 목록 버튼을 항상 표시할지 여부', unlimitedDownload: '무제한 다운로드', - unlimitedDownloadDesc: '활성화하면 음악을 무제한으로 다운로드합니다 (다운로드 실패가 발생할 수 있음), 기본 제한 300곡', + unlimitedDownloadDesc: + '활성화하면 음악을 무제한으로 다운로드합니다 (다운로드 실패가 발생할 수 있음), 기본 제한 300곡', downloadPath: '다운로드 디렉토리', downloadPathDesc: '음악 파일의 다운로드 위치 선택', remoteControl: '원격 제어', @@ -133,7 +135,8 @@ export default { proxyPort: '프록시 포트', proxyPortPlaceholder: '프록시 포트를 입력하세요', realIP: 'realIP 설정', - realIPDesc: '제한으로 인해 이 프로젝트는 해외에서 사용할 때 제한을 받을 수 있으며, realIP 매개변수를 사용하여 국내 IP를 전달하여 해결할 수 있습니다', + realIPDesc: + '제한으로 인해 이 프로젝트는 해외에서 사용할 때 제한을 받을 수 있으며, realIP 매개변수를 사용하여 국내 IP를 전달하여 해결할 수 있습니다', messages: { proxySuccess: '프록시 설정이 저장되었습니다. 앱을 재시작한 후 적용됩니다', proxyError: '입력이 올바른지 확인하세요', diff --git a/src/i18n/lang/ko-KR/songItem.ts b/src/i18n/lang/ko-KR/songItem.ts index c4905d1..d2c1de5 100644 --- a/src/i18n/lang/ko-KR/songItem.ts +++ b/src/i18n/lang/ko-KR/songItem.ts @@ -25,4 +25,4 @@ export default { negativeText: '취소' } } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/ko-KR/user.ts b/src/i18n/lang/ko-KR/user.ts index 214ae52..bd8fb47 100644 --- a/src/i18n/lang/ko-KR/user.ts +++ b/src/i18n/lang/ko-KR/user.ts @@ -45,4 +45,4 @@ export default { deleteSuccess: '삭제 성공', deleteFailed: '삭제 실패' } -}; \ No newline at end of file +}; diff --git a/src/i18n/lang/zh-CN/settings.ts b/src/i18n/lang/zh-CN/settings.ts index 7730e4e..0ed3a1a 100644 --- a/src/i18n/lang/zh-CN/settings.ts +++ b/src/i18n/lang/zh-CN/settings.ts @@ -81,7 +81,8 @@ export default { showStatusBarContent: '可以在您的mac状态栏显示音乐控制功能(重启后生效)', fallbackParser: 'GD音乐台(music.gdstudio.xyz)设置', - fallbackParserDesc: 'GD音乐台将自动尝试多个音乐平台进行解析,无需额外配置。优先级高于其他解析方式,但是请求可能较慢。感谢(music.gdstudio.xyz)\n', + fallbackParserDesc: + 'GD音乐台将自动尝试多个音乐平台进行解析,无需额外配置。优先级高于其他解析方式,但是请求可能较慢。感谢(music.gdstudio.xyz)\n', parserGD: 'GD 音乐台 (内置)', parserCustom: '自定义 API', @@ -103,8 +104,8 @@ export default { notImported: '尚未导入自定义音源。', importSuccess: '成功导入音源: {name}', importFailed: '导入失败: {message}', - enableHint: '请先导入 JSON 配置文件才能启用', - }, + enableHint: '请先导入 JSON 配置文件才能启用' + } }, application: { closeAction: '关闭行为', diff --git a/src/i18n/lang/zh-Hant/settings.ts b/src/i18n/lang/zh-Hant/settings.ts index 433659b..679417c 100644 --- a/src/i18n/lang/zh-Hant/settings.ts +++ b/src/i18n/lang/zh-Hant/settings.ts @@ -101,8 +101,8 @@ export default { notImported: '尚未匯入自訂音源。', importSuccess: '成功匯入音源:{name}', importFailed: '匯入失敗:{message}', - enableHint: '請先匯入 JSON 設定檔才能啟用', - }, + enableHint: '請先匯入 JSON 設定檔才能啟用' + } }, application: { closeAction: '關閉行為', diff --git a/src/main/modules/fileManager.ts b/src/main/modules/fileManager.ts index 187161f..0b976f1 100644 --- a/src/main/modules/fileManager.ts +++ b/src/main/modules/fileManager.ts @@ -2,6 +2,7 @@ import axios from 'axios'; import { app, dialog, ipcMain, Notification, protocol, shell } from 'electron'; import Store from 'electron-store'; import { fileTypeFromFile } from 'file-type'; +import { FlacTagMap, writeFlacTags } from 'flac-tagger'; import * as fs from 'fs'; import * as http from 'http'; import * as https from 'https'; @@ -9,8 +10,8 @@ import * as mm from 'music-metadata'; import * as NodeID3 from 'node-id3'; import * as os from 'os'; import * as path from 'path'; -import { FlacTagMap, writeFlacTags } from 'flac-tagger'; import sharp from 'sharp'; + import { getStore } from './config'; const MAX_CONCURRENT_DOWNLOADS = 3; @@ -619,21 +620,20 @@ async function downloadMusic( try { // 使用 sharp 进行压缩 coverImageBuffer = await sharp(originalCoverBuffer) - .resize({ - width: 1600, - height: 1600, - fit: 'inside', - withoutEnlargement: true - }) - .jpeg({ - quality: 80, - mozjpeg: true - }) - .toBuffer(); + .resize({ + width: 1600, + height: 1600, + fit: 'inside', + withoutEnlargement: true + }) + .jpeg({ + quality: 80, + mozjpeg: true + }) + .toBuffer(); const compressedSizeMB = (coverImageBuffer.length / (1024 * 1024)).toFixed(2); console.log(`封面图压缩完成,新大小: ${compressedSizeMB} MB`); - } catch (compressionError) { console.error('封面图压缩失败,将使用原图:', compressionError); coverImageBuffer = originalCoverBuffer; // 如果压缩失败,则回退使用原始图片 @@ -708,21 +708,21 @@ async function downloadMusic( LYRICS: lyricsContent || '', TRACKNUMBER: songInfo?.no ? String(songInfo.no) : undefined, DATE: songInfo?.publishTime - ? new Date(songInfo.publishTime).getFullYear().toString() - : undefined + ? new Date(songInfo.publishTime).getFullYear().toString() + : undefined }; await writeFlacTags( - { - tagMap, - picture: coverImageBuffer - ? { - buffer: coverImageBuffer, - mime: 'image/jpeg' - } - : undefined - }, - finalFilePath + { + tagMap, + picture: coverImageBuffer + ? { + buffer: coverImageBuffer, + mime: 'image/jpeg' + } + : undefined + }, + finalFilePath ); console.log('FLAC tags written successfully'); } catch (err) { diff --git a/src/preload/index.ts b/src/preload/index.ts index 5b311d2..b393a1e 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -57,7 +57,7 @@ const api = { return Promise.reject(new Error(`未授权的 IPC 通道: ${channel}`)); }, // 搜索建议 - getSearchSuggestions: (keyword: string) => ipcRenderer.invoke('get-search-suggestions', keyword), + getSearchSuggestions: (keyword: string) => ipcRenderer.invoke('get-search-suggestions', keyword) }; // 创建带类型的ipcRenderer对象,暴露给渲染进程 diff --git a/src/renderer/components/common/MusicListNavigator.ts b/src/renderer/components/common/MusicListNavigator.ts index bb4a64b..6d33bf4 100644 --- a/src/renderer/components/common/MusicListNavigator.ts +++ b/src/renderer/components/common/MusicListNavigator.ts @@ -18,28 +18,28 @@ export function navigateToMusicList( canRemove?: boolean; } ) { - const musicStore = useMusicStore(); - const { id, type, name, songList, listInfo, canRemove = false } = options; + const musicStore = useMusicStore(); + const { id, type, name, songList, listInfo, canRemove = false } = options; - // 如果是每日推荐,不需要设置 musicStore,直接从 recommendStore 获取 - if (type !== 'dailyRecommend') { - musicStore.setCurrentMusicList(songList, name, listInfo, canRemove); - } else { - // 确保 musicStore 的数据被清空,避免显示旧的列表 - musicStore.clearCurrentMusicList(); - } + // 如果是每日推荐,不需要设置 musicStore,直接从 recommendStore 获取 + if (type !== 'dailyRecommend') { + musicStore.setCurrentMusicList(songList, name, listInfo, canRemove); + } else { + // 确保 musicStore 的数据被清空,避免显示旧的列表 + musicStore.clearCurrentMusicList(); + } - // 路由跳转 - if (id) { + // 路由跳转 + if (id) { router.push({ name: 'musicList', params: { id }, query: { type } }); - } else { + } else { router.push({ name: 'musicList', query: { type: 'dailyRecommend' } }); - } + } } diff --git a/src/renderer/hooks/useSongItem.ts b/src/renderer/hooks/useSongItem.ts index 1d31d2b..929ae83 100644 --- a/src/renderer/hooks/useSongItem.ts +++ b/src/renderer/hooks/useSongItem.ts @@ -7,7 +7,7 @@ import type { SongResult } from '@/types/music'; import { getImgUrl } from '@/utils'; import { getImageBackground } from '@/utils/linearColor'; -import { dislikeRecommendedSong } from "../api/music"; +import { dislikeRecommendedSong } from '../api/music'; import { useArtist } from './useArtist'; import { useDownload } from './useDownload'; @@ -89,11 +89,11 @@ export function useSongItem(props: { item: SongResult; canRemove?: boolean }) { // 判断当前歌曲是否为每日推荐歌曲 const isDailyRecommendSong = computed(() => { - return recommendStore.dailyRecommendSongs.some(song => song.id === props.item.id); + return recommendStore.dailyRecommendSongs.some((song) => song.id === props.item.id); }); // 切换不喜欢状态 - const toggleDislike = async (e: Event) => { + const toggleDislike = async (e: Event) => { e && e.stopPropagation(); if (isDislike.value) { @@ -102,17 +102,17 @@ export function useSongItem(props: { item: SongResult; canRemove?: boolean }) { } playerStore.addToDislikeList(props.item.id); - + // 只有当前歌曲是每日推荐歌曲时才调用接口 if (!isDailyRecommendSong.value) { return; - } + } try { console.log('发送不感兴趣请求,歌曲ID:', props.item.id); const numericId = typeof props.item.id === 'string' ? parseInt(props.item.id) : props.item.id; const response = await dislikeRecommendedSong(numericId); if (response.data.data) { - console.log(response) + console.log(response); const newSongData = response.data.data; const newSong: SongResult = { ...newSongData, @@ -126,10 +126,10 @@ export function useSongItem(props: { item: SongResult; canRemove?: boolean }) { id: newSongData.id, name: newSongData.name, artists: newSongData.ar || newSongData.artists, - album: newSongData.al || newSongData.album, + album: newSongData.al || newSongData.album }, source: 'netease', - count: 0, + count: 0 }; recommendStore.replaceSongInDailyRecommend(props.item.id, newSong); } else { diff --git a/src/renderer/index.html b/src/renderer/index.html index 5e2160e..b3e0a93 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -37,19 +37,19 @@ diff --git a/src/renderer/layout/components/AppMenu.vue b/src/renderer/layout/components/AppMenu.vue index 35cde47..f968de9 100644 --- a/src/renderer/layout/components/AppMenu.vue +++ b/src/renderer/layout/components/AppMenu.vue @@ -9,7 +9,11 @@
- +