feat(播放): 添加支持直接使用playUrl播放歌曲的功能
- 在SearchResultTable和SearchResultList组件中添加playTheSongWithPlayUrl方法 - 修改播放逻辑,优先使用playUrl进行播放 - 在Mobile.vue中添加playUrl处理逻辑 - 新增tunehub服务的getSongInfo和searchSongs接口 - 重构歌曲搜索处理逻辑,使用tunehub服务替代原有实现
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
<van-col span="23" offset="1">
|
||||
<van-row>
|
||||
<van-col span="22">
|
||||
<van-row @click="play(null, item.url, i)">
|
||||
<van-row @click="play(item, i)">
|
||||
<van-col style="font-size: 16px">
|
||||
<i
|
||||
v-if="item.resourceForbidden"
|
||||
@@ -115,6 +115,10 @@ export default {
|
||||
type: Function,
|
||||
required: true,
|
||||
},
|
||||
playTheSongWithPlayUrl: {
|
||||
type: Function,
|
||||
required: false,
|
||||
},
|
||||
suggestMatchSongId: {
|
||||
type: String,
|
||||
required: false,
|
||||
@@ -137,11 +141,15 @@ export default {
|
||||
const playTheSong = (songMeta, pageUrl, suggestMatchSongId) => {
|
||||
props.playTheSong(songMeta, pageUrl, suggestMatchSongId);
|
||||
};
|
||||
const playTheSongWithPlayUrl = (playOption) => {
|
||||
props.playTheSongWithPlayUrl && props.playTheSongWithPlayUrl(playOption);
|
||||
};
|
||||
|
||||
const showPopover = ref([]);
|
||||
|
||||
return {
|
||||
playTheSong,
|
||||
playTheSongWithPlayUrl,
|
||||
showPopover,
|
||||
ellipsis,
|
||||
};
|
||||
@@ -158,6 +166,12 @@ export default {
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
getSourceUrl(item) {
|
||||
if (!item) {
|
||||
return "";
|
||||
}
|
||||
return item.pageUrl || item.url || "";
|
||||
},
|
||||
async uploadToCloud(pageUrl) {
|
||||
const ret = await createSyncSongFromUrlJob(
|
||||
pageUrl,
|
||||
@@ -180,37 +194,60 @@ export default {
|
||||
startTaskListener(ret.data.jobId);
|
||||
}
|
||||
},
|
||||
play(songMeta, pageUrl, index) {
|
||||
play(item, index) {
|
||||
if (this.currentSongIndex === index) {
|
||||
return;
|
||||
}
|
||||
this.currentSongIndex = index;
|
||||
this.playTheSong(songMeta, pageUrl, this.suggestMatchSongId);
|
||||
const pageUrl = this.getSourceUrl(item);
|
||||
if (this.playTheSongWithPlayUrl && item && item.playUrl) {
|
||||
this.playTheSongWithPlayUrl({
|
||||
playUrl: item.playUrl,
|
||||
coverUrl: item.coverUrl,
|
||||
songName: item.songName,
|
||||
artist: item.artist,
|
||||
pageUrl,
|
||||
source: item.source,
|
||||
});
|
||||
return;
|
||||
}
|
||||
this.playTheSong(null, pageUrl, this.suggestMatchSongId);
|
||||
},
|
||||
async onSelect(actionItem) {
|
||||
const currentSong = this.searchResult[actionItem.songIndex];
|
||||
const pageUrl = this.getSourceUrl(currentSong);
|
||||
console.log(currentSong);
|
||||
switch (actionItem.action) {
|
||||
case ActionUpload:
|
||||
this.uploadToCloud(currentSong.url);
|
||||
this.uploadToCloud(pageUrl);
|
||||
break;
|
||||
case ActionDownloadToLocalService:
|
||||
this.downloadToLocalService(currentSong.url);
|
||||
this.downloadToLocalService(pageUrl);
|
||||
break;
|
||||
case ActionDownload:
|
||||
const ret = await getSongsMeta({ url: currentSong.url });
|
||||
const info = ret.data.songMeta;
|
||||
console.log(ret);
|
||||
const a = document.createElement("a");
|
||||
a.href = info.audios[0].url;
|
||||
a.download = `${currentSong.songName}-${currentSong.artist}.mp3`;
|
||||
a.style.display = "none";
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
if (currentSong.playUrl) {
|
||||
const a = document.createElement("a");
|
||||
a.href = currentSong.playUrl;
|
||||
a.download = `${currentSong.songName}-${currentSong.artist}.mp3`;
|
||||
a.style.display = "none";
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
} else {
|
||||
const ret = await getSongsMeta({ url: pageUrl });
|
||||
const info = ret.data.songMeta;
|
||||
console.log(ret);
|
||||
const a = document.createElement("a");
|
||||
a.href = info.audios[0].url;
|
||||
a.download = `${currentSong.songName}-${currentSong.artist}.mp3`;
|
||||
a.style.display = "none";
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
a.remove();
|
||||
}
|
||||
break;
|
||||
case ActionOpenRef:
|
||||
window.open(currentSong.url, "_blank").focus();
|
||||
window.open(pageUrl || currentSong.url, "_blank").focus();
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user