feat: 为歌曲同步功能添加元数据记录和日志

在前后端添加日志记录和元数据传递,包括歌曲名称、艺术家和专辑信息
This commit is contained in:
史悦
2026-01-08 14:50:27 +08:00
parent 8948df45ba
commit 76003d4bcd
5 changed files with 29 additions and 7 deletions

View File

@@ -114,6 +114,7 @@ async function search(req, res) {
.map(mapTunehubResult) .map(mapTunehubResult)
.filter(song => song.songName.length > 0); .filter(song => song.songName.length > 0);
logger.info(`[search] Final songs array = ${JSON.stringify(songs, null, 2)}`);
res.send({ res.send({
status: 0, status: 0,
data: { data: {

View File

@@ -52,7 +52,9 @@ async function createJob(req, res) {
jobId = await unblockMusicWithSongId(uid, source, songId) jobId = await unblockMusicWithSongId(uid, source, songId)
} else if (jobType === JobType.SyncSongFromUrl || jobType === JobType.DownloadSongFromUrl) { } else if (jobType === JobType.SyncSongFromUrl || jobType === JobType.DownloadSongFromUrl) {
const request = req.body; const request = req.body;
logger.info(`[createJob] Received jobType=${jobType}, request.body.urlJob=${JSON.stringify(request.urlJob, null, 2)}`);
const url = request.urlJob && matchUrlFromStr(request.urlJob.url); const url = request.urlJob && matchUrlFromStr(request.urlJob.url);
logger.info(`[createJob] Extracted url=${url} from request.urlJob.url=${request.urlJob.url}`);
if (!url) { if (!url) {
res.status(412).send({ res.status(412).send({
@@ -64,6 +66,7 @@ async function createJob(req, res) {
let meta = {}; let meta = {};
const songId = request.urlJob && request.urlJob.meta.songId ? request.urlJob.meta.songId : ""; const songId = request.urlJob && request.urlJob.meta.songId ? request.urlJob.meta.songId : "";
logger.info(`[createJob] songId=${songId}`);
// 先从 TuneHub 获取歌曲信息,避免显示原始 URL // 先从 TuneHub 获取歌曲信息,避免显示原始 URL
if (request.urlJob.meta && (request.urlJob.meta.songName !== "" && request.urlJob.meta.artist !== "")) { if (request.urlJob.meta && (request.urlJob.meta.songName !== "" && request.urlJob.meta.artist !== "")) {

View File

@@ -12,18 +12,21 @@ export const qrLoginCheck = qrKey => get("/account/qrlogin-check", {qrKey});
export const getAllPlaylist = data => get("/playlists", data); export const getAllPlaylist = data => get("/playlists", data);
export const getPlaylistDetail = playlistId => get(`/playlists/netease/${playlistId}/songs`); export const getPlaylistDetail = playlistId => get(`/playlists/netease/${playlistId}/songs`);
export const getJobDetail = jobId => get(`/sync-jobs/${jobId}`); export const getJobDetail = jobId => get(`/sync-jobs/${jobId}`);
export const createSyncSongFromUrlJob = (url, songId = "") => { export const createSyncSongFromUrlJob = (url, songId = "", meta = {}) => {
return post("/sync-jobs", { return post("/sync-jobs", {
"jobType": "SyncSongFromUrl", "jobType": "SyncSongFromUrl",
"urlJob": { "urlJob": {
"url": url, "url": url,
"meta": { "meta": {
"songId": songId "songId": songId,
"songName": meta.songName || "",
"artist": meta.artist || "",
"album": meta.album || ""
} }
} }
}); });
}; };
export const createDownloadSongFromUrlJob = (url, songId = "") => { export const createDownloadSongFromUrlJob = (url, songId = "", meta = {}) => {
return post("/sync-jobs", { return post("/sync-jobs", {
"jobType": "DownloadSongFromUrl", "jobType": "DownloadSongFromUrl",
"urlJob": { "urlJob": {

View File

@@ -184,10 +184,18 @@ export default {
} }
return ""; return "";
}, },
async uploadToCloud(pageUrl) { async uploadToCloud(item) {
const pageUrl = this.getSourceUrl(item);
const meta = {
songName: item.songName || "",
artist: item.artist || "",
album: item.album || ""
};
console.log(`[SearchResultListForMobile] uploadToCloud: pageUrl=${pageUrl}, meta=${JSON.stringify(meta)}`);
const ret = await createSyncSongFromUrlJob( const ret = await createSyncSongFromUrlJob(
pageUrl, pageUrl,
this.suggestMatchSongId this.suggestMatchSongId,
meta
); );
console.log(ret); console.log(ret);
@@ -232,7 +240,7 @@ export default {
console.log(currentSong); console.log(currentSong);
switch (actionItem.action) { switch (actionItem.action) {
case ActionUpload: case ActionUpload:
this.uploadToCloud(pageUrl); this.uploadToCloud(currentSong);
break; break;
case ActionDownloadToLocalService: case ActionDownloadToLocalService:
this.downloadToLocalService(pageUrl); this.downloadToLocalService(pageUrl);

View File

@@ -295,9 +295,16 @@ export default {
}, },
async uploadToCloud(row) { async uploadToCloud(row) {
const pageUrl = this.getSourceUrl(row); const pageUrl = this.getSourceUrl(row);
const meta = {
songName: row.songName || "",
artist: row.artist || "",
album: row.album || ""
};
logger.info(`[SearchResultTable] uploadToCloud: pageUrl=${pageUrl}, meta=${JSON.stringify(meta)}`);
const ret = await createSyncSongFromUrlJob( const ret = await createSyncSongFromUrlJob(
pageUrl, pageUrl,
this.suggestMatchSongId this.suggestMatchSongId,
meta
); );
console.log(ret); console.log(ret);