diff --git a/src/App.vue b/src/App.vue index 68d2f1e..d834651 100644 --- a/src/App.vue +++ b/src/App.vue @@ -11,18 +11,14 @@ - "> + + @@ -55,6 +51,13 @@ export default { isAccountLoggedIn() { return isAccountLoggedIn(); }, + showPlayer() { + return ( + ["mv", "loginUsername", "login", "loginAccount"].includes( + this.$route.name + ) === false + ); + }, }, created() { if (this.isElectron) { diff --git a/src/components/Player.vue b/src/components/Player.vue index e87b5a2..b26035a 100644 --- a/src/components/Player.vue +++ b/src/components/Player.vue @@ -21,7 +21,7 @@ :src="currentTrack.al && currentTrack.al.picUrl | resizeImage(224)" @click="goToAlbum" /> -
+
{{ currentTrack.name }}
@@ -155,8 +155,8 @@ export default { }, mounted() { setInterval(() => { - this.progress = ~~this.player.seek(); - }, 500); + this.progress = this.player.seek(); + }, 1000); if (isAccountLoggedIn()) { userLikedSongsIDs(this.data.user.userId).then((data) => { this.updateLikedSongs(data.ids); @@ -186,6 +186,11 @@ export default { isCurrentTrackLiked() { return this.liked.songs.includes(this.currentTrack.id); }, + audioSource() { + return this.player._howler?._src.includes("kuwo.cn") + ? "音源来自酷我音乐" + : ""; + }, }, methods: { ...mapMutations(["updateLikedSongs", "toggleLyrics"]), diff --git a/src/components/TrackListItem.vue b/src/components/TrackListItem.vue index f758b3a..4d5a892 100644 --- a/src/components/TrackListItem.vue +++ b/src/components/TrackListItem.vue @@ -3,7 +3,7 @@ class="track" :class="trackClass" :style="trackStyle" - :title="track.reason" + :title="showUnavailableSongInGreyStyle ? track.reason : ''" @mouseover="hover = true" @mouseleave="hover = false" > @@ -147,6 +147,9 @@ export default { this.isMenuOpened ); }, + showUnavailableSongInGreyStyle() { + return this.$store.state.settings.showUnavailableSongInGreyStyle; + }, }, methods: { goToAlbum() { diff --git a/src/router/index.js b/src/router/index.js index 8e2137c..7c59f3e 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -122,6 +122,11 @@ const router = new VueRouter({ }, }); +const originalPush = VueRouter.prototype.push; +VueRouter.prototype.push = function push(location) { + return originalPush.call(this, location).catch((err) => err); +}; + router.beforeEach((to, from, next) => { // 需要登录的逻辑 if (to.meta.requireLogin) { diff --git a/src/store/initLocalStorage.js b/src/store/initLocalStorage.js index ee16fb9..be66e03 100644 --- a/src/store/initLocalStorage.js +++ b/src/store/initLocalStorage.js @@ -24,6 +24,7 @@ let localStorage = { if (process.env.IS_ELECTRON === true) { localStorage.settings.automaticallyCacheSongs = true; + localStorage.settings.showUnavailableSongInGreyStyle = false; } export default localStorage; diff --git a/src/utils/Player.js b/src/utils/Player.js index 304b658..ad7a0ce 100644 --- a/src/utils/Player.js +++ b/src/utils/Player.js @@ -184,21 +184,18 @@ export default class { _getAudioSourceFromUnblockMusic(track) { if (process.env.IS_ELECTRON !== true) return null; const source = ipcRenderer.sendSync("unblock-music", track); + if (store.state.settings.automaticallyCacheSongs && source?.url) { + cacheTrack(track.id, source.url); + } return source?.url; } _getAudioSource(track) { return this._getAudioSourceFromCache(String(track.id)) .then((source) => { - if (!source) return null; - return source; - }) - .then((source) => { - if (source) return source; - return this._getAudioSourceFromNetease(track); + return source ?? this._getAudioSourceFromNetease(track); }) .then((source) => { - if (source) return source; - return this._getAudioSourceFromUnblockMusic(track); + return source ?? this._getAudioSourceFromUnblockMusic(track); }); } _replaceCurrentTrack( @@ -216,6 +213,7 @@ export default class { this._playAudioSource(source, autoplay); return source; } else { + store.dispatch("showToast", `无法播放 ${track.name}`); ifUnplayableThen === "playNextTrack" ? this.playNextTrack() : this.playPrevTrack(); diff --git a/src/utils/common.js b/src/utils/common.js index 23c67e6..836f240 100644 --- a/src/utils/common.js +++ b/src/utils/common.js @@ -22,16 +22,16 @@ export function isTrackPlayable(track) { } } else if (track.fee === 4 || track.privilege?.fee === 4) { result.playable = false; - result.reason = "Paid Album"; + result.reason = "付费专辑"; } else if ( track.noCopyrightRcmd !== null && track.noCopyrightRcmd !== undefined ) { result.playable = false; - result.reason = "No Copyright"; + result.reason = "无版权"; } else if (track.privilege?.st < 0 && isAccountLoggedIn()) { result.playable = false; - result.reason = "The song has been removed from the shelves"; + result.reason = "已下架"; } return result; } diff --git a/src/utils/mediaSession.js b/src/utils/mediaSession.js deleted file mode 100644 index 6897af9..0000000 --- a/src/utils/mediaSession.js +++ /dev/null @@ -1,39 +0,0 @@ -import store from "@/store"; - -export function initMediaSession() { - if ("mediaSession" in navigator) { - navigator.mediaSession.setActionHandler("play", function () { - store.state.howler.play(); - }); - navigator.mediaSession.setActionHandler("pause", function () { - store.state.howler.pause(); - }); - navigator.mediaSession.setActionHandler("previoustrack", function () { - store.dispatch("previousTrack"); - }); - navigator.mediaSession.setActionHandler("nexttrack", function () { - store.dispatch("nextTrack"); - }); - navigator.mediaSession.setActionHandler("stop", () => { - store.state.howler.stop(); - }); - } -} - -export function updateMediaSessionMetaData(track) { - if ("mediaSession" in navigator) { - let artists = track.ar.map((a) => a.name); - navigator.mediaSession.metadata = new window.MediaMetadata({ - title: track.name, - artist: artists.join(","), - album: track.al.name, - artwork: [ - { - src: track.al.picUrl + "?param=512y512", - type: "image/jpg", - sizes: "512x512", - }, - ], - }); - } -} diff --git a/src/views/album.vue b/src/views/album.vue index 85d862e..0dd3f3a 100644 --- a/src/views/album.vue +++ b/src/views/album.vue @@ -198,9 +198,6 @@ export default { ...mapMutations(["appendTrackToPlayerList"]), ...mapActions(["playFirstTrackOnList", "playTrackOnListByID", "showToast"]), playAlbumByID(id, trackID = "first") { - if (this.tracks.find((t) => t.playable !== false) === undefined) { - return; - } this.$store.state.player.playAlbumByID(id, trackID); }, likeAlbum(toast = false) { diff --git a/src/views/artist.vue b/src/views/artist.vue index 20a246f..375ca34 100644 --- a/src/views/artist.vue +++ b/src/views/artist.vue @@ -106,9 +106,9 @@
相似歌手
diff --git a/src/views/mv.vue b/src/views/mv.vue index a8061c7..df33e3a 100644 --- a/src/views/mv.vue +++ b/src/views/mv.vue @@ -118,7 +118,7 @@ export default { this.player = new Plyr(this.$refs.videoPlayer, videoOptions); this.player.volume = this.$store.state.player.volume; this.player.on("playing", () => { - this.$store.state.howler.pause(); + this.$store.state.player.pause(); }); this.getData(this.$route.params.id); console.log("网易云你这mv音频码率也太糊了吧🙄");