支持播放VIP歌曲

master
qier222 4 years ago
parent 23b68fc401
commit 4fcc6d2aff

@ -1,9 +1,10 @@
import { updateMediaSessionMetaData } from "@/utils/mediaSession"; import { updateMediaSessionMetaData } from "@/utils/mediaSession";
import { getTrackDetail, scrobble } from "@/api/track"; import { getTrackDetail, scrobble, getMP3 } from "@/api/track";
import { isLoggedIn } from "@/utils/auth";
export default { export default {
switchTrack({ state, dispatch, commit }, basicTrack) { switchTrack({ state, dispatch, commit }, basicTrack) {
getTrackDetail(basicTrack.id).then((data) => { getTrackDetail(basicTrack.id).then(data => {
let track = data.songs[0]; let track = data.songs[0];
track.sort = basicTrack.sort; track.sort = basicTrack.sort;
@ -11,9 +12,7 @@ export default {
scrobble({ scrobble({
id: state.player.currentTrack.id, id: state.player.currentTrack.id,
sourceid: state.player.listInfo.id, sourceid: state.player.listInfo.id,
time: time === 0 ? 180 : time, time: time === 0 ? 180 : time
}).then((data) => {
console.log("scrobble", data);
}); });
commit("updateCurrentTrack", track); commit("updateCurrentTrack", track);
@ -25,36 +24,43 @@ export default {
return; return;
} }
commit( function commitMP3(mp3) {
"replaceMP3", commit("replaceMP3", mp3);
`https://music.163.com/song/media/outer/url?id=${track.id}` state.howler.once("end", () => {
); dispatch("nextTrack");
state.howler.once("end", () => { });
dispatch("nextTrack"); }
});
if (isLoggedIn) {
getMP3(track.id).then(data => {
commitMP3(data.data[0].url);
});
} else {
commitMP3(`https://music.163.com/song/media/outer/url?id=${track.id}`);
}
}); });
}, },
playFirstTrackOnList({ state, dispatch }) { playFirstTrackOnList({ state, dispatch }) {
dispatch( dispatch(
"switchTrack", "switchTrack",
state.player.list.find((t) => t.sort === 0) state.player.list.find(t => t.sort === 0)
); );
}, },
playTrackOnListByID({ state, commit, dispatch }, trackID) { playTrackOnListByID({ state, commit, dispatch }, trackID) {
let track = state.player.list.find((t) => t.id === trackID); let track = state.player.list.find(t => t.id === trackID);
dispatch("switchTrack", track); dispatch("switchTrack", track);
if (state.player.shuffle) { if (state.player.shuffle) {
// 当随机模式开启时双击列表的一首歌进行播放此时要把这首歌的sort调到第一(0),这样用户就能随机播放完整的歌单 // 当随机模式开启时双击列表的一首歌进行播放此时要把这首歌的sort调到第一(0),这样用户就能随机播放完整的歌单
let otherTrack = state.player.list.find((t) => t.sort === 0); let otherTrack = state.player.list.find(t => t.sort === 0);
commit("switchSortBetweenTwoTracks", { commit("switchSortBetweenTwoTracks", {
trackID1: track.id, trackID1: track.id,
trackID2: otherTrack.id, trackID2: otherTrack.id
}); });
} }
}, },
nextTrack({ state, dispatch }, realNext = false) { nextTrack({ state, dispatch }, realNext = false) {
let nextTrack = state.player.list.find( let nextTrack = state.player.list.find(
(track) => track.sort === state.player.currentTrack.sort + 1 track => track.sort === state.player.currentTrack.sort + 1
); );
if (state.player.repeat === "one" && realNext === false) { if (state.player.repeat === "one" && realNext === false) {
@ -63,7 +69,7 @@ export default {
if (nextTrack === undefined) { if (nextTrack === undefined) {
if (state.player.repeat !== "off") { if (state.player.repeat !== "off") {
nextTrack = state.player.list.find((t) => t.sort === 0); nextTrack = state.player.list.find(t => t.sort === 0);
} else { } else {
return; return;
} }
@ -73,13 +79,13 @@ export default {
}, },
previousTrack({ state, dispatch }) { previousTrack({ state, dispatch }) {
let previousTrack = state.player.list.find( let previousTrack = state.player.list.find(
(track) => track.sort === state.player.currentTrack.sort - 1 track => track.sort === state.player.currentTrack.sort - 1
); );
if (previousTrack == undefined) { if (previousTrack == undefined) {
if (state.player.repeat !== "off") { if (state.player.repeat !== "off") {
previousTrack = state.player.list.reduce((x, y) => (x > y ? x : y)); previousTrack = state.player.list.reduce((x, y) => (x > y ? x : y));
} else { } else {
previousTrack = state.player.list.find((t) => t.sort === 0); previousTrack = state.player.list.find(t => t.sort === 0);
} }
} }
dispatch("switchTrack", previousTrack); dispatch("switchTrack", previousTrack);
@ -88,5 +94,5 @@ export default {
state.howler.once("end", () => { state.howler.once("end", () => {
dispatch("nextTrack"); dispatch("nextTrack");
}); });
}, }
}; };

@ -1,11 +1,18 @@
import { isLoggedIn } from "./auth";
import store from "@/store";
export function isTrackPlayable(track) { export function isTrackPlayable(track) {
let result = { let result = {
playable: true, playable: true,
reason: "", reason: ""
}; };
if (track.fee === 1 || track.privilege?.fee === 1) { if (track.fee === 1 || track.privilege?.fee === 1) {
result.playable = false; if (isLoggedIn && store.state.settings.user.vipType === 11) {
result.reason = "VIP Only"; result.playable = true;
} else {
result.playable = false;
result.reason = "VIP Only";
}
} else if (track.fee === 4 || track.privilege?.fee === 4) { } else if (track.fee === 4 || track.privilege?.fee === 4) {
result.playable = false; result.playable = false;
result.reason = "Paid Album"; result.reason = "Paid Album";
@ -20,7 +27,7 @@ export function isTrackPlayable(track) {
} }
export function mapTrackPlayableStatus(tracks) { export function mapTrackPlayableStatus(tracks) {
return tracks.map((t) => { return tracks.map(t => {
let result = isTrackPlayable(t); let result = isTrackPlayable(t);
t.playable = result.playable; t.playable = result.playable;
t.reason = result.reason; t.reason = result.reason;
@ -40,13 +47,13 @@ export function randomNum(minNum, maxNum) {
} }
export function shuffleAList(list) { export function shuffleAList(list) {
let sortsList = list.map((t) => t.sort); let sortsList = list.map(t => t.sort);
for (let i = 1; i < sortsList.length; i++) { for (let i = 1; i < sortsList.length; i++) {
const random = Math.floor(Math.random() * (i + 1)); const random = Math.floor(Math.random() * (i + 1));
[sortsList[i], sortsList[random]] = [sortsList[random], sortsList[i]]; [sortsList[i], sortsList[random]] = [sortsList[random], sortsList[i]];
} }
let newSorts = {}; let newSorts = {};
list.map((track) => { list.map(track => {
newSorts[track.id] = sortsList.pop(); newSorts[track.id] = sortsList.pop();
}); });
return newSorts; return newSorts;

Loading…
Cancel
Save