update tencent music api

master
Janx 2 years ago
parent ce738f6b40
commit 8a6b8521c4

@ -1,7 +0,0 @@
VUE_APP_NETEASE_API_URL=/api
VUE_APP_ELECTRON_API_URL=/api
VUE_APP_ELECTRON_API_URL_DEV=http://127.0.0.1:10754
VUE_APP_LASTFM_API_KEY=09c55292403d961aa517ff7f5e8a3d9c
VUE_APP_LASTFM_API_SHARED_SECRET=307c9fda32b3904e53654baff215cb67
DEV_SERVER_PORT=20201

@ -82,7 +82,8 @@ jobs:
uses: samuelmeuli/action-electron-builder@v1.6.0
env:
VUE_APP_ELECTRON_API_URL: /api
VUE_APP_ELECTRON_API_URL_DEV: http://127.0.0.1:10754
VUE_APP_ELECTRON_API_URL_DEV: /api
# VUE_APP_ELECTRON_API_URL_DEV: http://127.0.0.1:10754
VUE_APP_LASTFM_API_KEY: 09c55292403d961aa517ff7f5e8a3d9c
VUE_APP_LASTFM_API_SHARED_SECRET: 307c9fda32b3904e53654baff215cb67
with:

@ -126,5 +126,6 @@
"hooks": {
"pre-commit": "npm run prettier"
}
}
}
},
"__npminstall_done": false
}

@ -1,6 +1,13 @@
<template>
<div id="app" :class="{ 'user-select-none': userSelectNone }">
<div
id="app"
class="no-scrollbar"
:class="{ 'user-select-none': userSelectNone }"
>
<Scrollbar v-show="!showLyrics" ref="scrollbar" />
<transition name="slide-up">
<Player v-if="enablePlayer" v-show="showPlayer" ref="player" />
</transition>
<Navbar v-show="showNavbar" ref="navbar" />
<main
ref="main"
@ -12,9 +19,7 @@
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
</main>
<transition name="slide-up">
<Player v-if="enablePlayer" v-show="showPlayer" ref="player" />
</transition>
<Toast />
<ModalAddTrackToPlaylist v-if="isAccountLoggedIn" />
<ModalNewPlaylist v-if="isAccountLoggedIn" />
@ -110,24 +115,39 @@ export default {
</script>
<style lang="scss">
html,
body,
#app {
position: fixed;
width: 100%;
height: 100%;
}
* {
padding: 0;
margin: 0;
}
#app {
position: relative;
transition: all 0.4s;
}
main {
position: fixed;
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
overflow: auto;
padding: 64px 10vw 96px 10vw;
box-sizing: border-box;
scrollbar-width: none; // firefox
}
@media (max-width: 1336px) {
.no-scrollbar::-webkit-scrollbar {
display: none;
}
.no-scrollbar {
overflow: scroll;
}
@media (max-width: 576px) {
main {
padding: 64px 5vw 96px 5vw;
}

@ -73,7 +73,7 @@ body {
html {
overflow-y: var(--html-overflow-y);
min-width: 768px;
min-width: 576px;
overscroll-behavior: none;
}

@ -130,7 +130,7 @@
}
}
@media (min-width: 768px) {
@media (min-width: 576px) {
.plyr__captions {
font-size: 18px;
font-size: var(--plyr-font-size-large, 18px);
@ -774,7 +774,7 @@ a.plyr__control::before {
margin-right: var(--plyr-control-spacing, 10px);
}
@media (max-width: calc(768px - 1)) {
@media (max-width: calc(576px - 1)) {
.plyr__time + .plyr__time {
display: none;
}

@ -1,7 +1,7 @@
import Vue from 'vue';
import SvgIcon from '@/components/SvgIcon';
Vue.component('svg-icon', SvgIcon);
Vue.component('SvgIcon', SvgIcon);
const requireAll = requireContext => requireContext.keys().map(requireContext);
const req = require.context('./', true, /\.svg$/);
requireAll(req);

@ -1,5 +1,5 @@
<template>
<div class="cover-row" :style="rowStyles">
<div class="cover-row no-scrollbar" :style="rowStyles">
<div
v-for="item in items"
:key="item.id"
@ -54,7 +54,7 @@ export default {
subTextFontSize: { type: String, default: '16px' },
showPlayCount: { type: Boolean, default: false },
columnNumber: { type: Number, default: 5 },
gap: { type: String, default: '44px 24px' },
gap: { type: String, default: '44px 16px' },
playButtonSize: { type: Number, default: 22 },
},
computed: {
@ -124,6 +124,7 @@ export default {
.item {
color: var(--color-text);
min-width: 100px;
.text {
margin-top: 8px;
.title {
@ -161,7 +162,11 @@ export default {
}
}
@media (max-width: 834px) {
@media (max-width: 576px) {
.cover-row {
display: grid;
overflow-x: auto;
}
.item .text .title {
font-size: 14px;
}

@ -1,5 +1,5 @@
<template>
<div>
<div class="navView">
<nav :class="{ 'has-custom-titlebar': hasCustomTitlebar }">
<Win32Titlebar v-if="enableWin32Titlebar" />
<LinuxTitlebar v-if="enableLinuxTitlebar" />
@ -46,8 +46,8 @@
<img
class="avatar"
:src="avatarUrl"
@click="showUserProfileMenu"
loading="lazy"
@click="showUserProfileMenu"
/>
</div>
</nav>
@ -65,6 +65,12 @@
<svg-icon icon-class="logout" />
{{ $t('library.userProfileMenu.logout') }}
</div>
<div class="item" @click="toTheme">
<svg-icon
:icon-class="settings.appearance == 'dark' ? 'moon' : 'sun'"
/>
{{ $t('nav.theme') }}
</div>
<hr />
<div class="item" @click="toGitHub">
<svg-icon icon-class="github" />
@ -86,7 +92,7 @@ import Win32Titlebar from '@/components/Win32Titlebar.vue';
import LinuxTitlebar from '@/components/LinuxTitlebar.vue';
import ContextMenu from '@/components/ContextMenu.vue';
import ButtonIcon from '@/components/ButtonIcon.vue';
import { changeAppearance } from '@/utils/common';
export default {
name: 'Navbar',
components: {
@ -157,6 +163,15 @@ export default {
toSettings() {
this.$router.push({ name: 'settings' });
},
toTheme() {
if (this.settings.appearance != 'dark') {
this.settings.appearance = 'dark';
changeAppearance('dark');
} else {
this.settings.appearance = 'light';
changeAppearance('light');
}
},
toGitHub() {
window.open('https://github.com/qier222/YesPlayMusic');
},
@ -172,8 +187,12 @@ export default {
</script>
<style lang="scss" scoped>
.navView {
position: absolute;
z-index: 100;
width: 100%;
}
nav {
position: fixed;
top: 0;
right: 0;
left: 0;
@ -188,16 +207,9 @@ nav {
backdrop-filter: saturate(180%) blur(20px);
background-color: var(--color-navbar-bg);
z-index: 100;
-webkit-app-region: drag;
}
@media (max-width: 1336px) {
nav {
padding: 0 5vw;
}
}
@supports (-moz-appearance: none) {
nav {
background-color: var(--color-body-bg);
@ -221,7 +233,31 @@ nav.has-custom-titlebar {
-webkit-app-region: no-drag;
}
}
@media (max-width: 970px) {
@media (max-width: 1000px) {
.navigation-buttons {
flex: unset;
}
}
@media (max-width: 576px) {
.search-box .container {
width: 120px !important;
}
nav {
padding: {
right: 10px;
left: 10px;
}
}
.navigation-links {
a {
padding: 0 !important;
margin: 0 auto !important;
font-size: 14px !important;
}
}
.navigation-buttons {
display: none;
}
.navigation-buttons {
flex: unset;
}

@ -22,7 +22,7 @@
:silent="true"
></vue-slider>
</div>
<div class="controls">
<div class="controls no-scrollbar">
<div class="playing">
<div class="container" @click.stop>
<img
@ -67,6 +67,11 @@
></svg-icon>
</button-icon>
</div>
<button-icon
style="display: inline-block; vertical-align: middle"
@click.native="Download"
><svg-icon icon-class="download"
/></button-icon>
</div>
<div class="blank"></div>
</div>
@ -170,7 +175,6 @@
<button-icon
class="lyrics-button"
title="歌词"
style="margin-left: 12px"
@click.native="toggleLyrics"
><svg-icon icon-class="arrow-up"
/></button-icon>
@ -247,6 +251,32 @@ export default {
hasList() {
return hasListSource();
},
Download() {
let that = this;
let xhr = new XMLHttpRequest();
xhr.open('GET', this.player.nowMp3Url, true);
xhr.responseType = 'blob';
xhr.onload = function () {
if (xhr.status === 200) {
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(xhr.response, that.currentTrack.name);
} else {
let link = document.createElement('a');
let body = document.querySelector('body');
link.href = window.URL.createObjectURL(xhr.response);
link.download =
that.currentTrack.name + '-' + that.currentTrack.ar[0].name;
// fix Firefox
link.style.display = 'none';
body.appendChild(link);
link.click();
body.removeChild(link);
window.URL.revokeObjectURL(link.href);
}
}
};
xhr.send();
},
goToList() {
goToListSource();
},
@ -278,16 +308,15 @@ export default {
<style lang="scss" scoped>
.player {
position: fixed;
position: absolute;
bottom: 0;
right: 0;
left: 0;
display: flex;
flex-direction: column;
justify-content: space-around;
height: 64px;
width: 100%;
backdrop-filter: saturate(180%) blur(30px);
// background-color: rgba(255, 255, 255, 0.86);
background-color: var(--color-navbar-bg);
z-index: 100;
}
@ -307,6 +336,7 @@ export default {
.controls {
display: grid;
grid-template-columns: repeat(3, 1fr);
overflow-x: scroll;
height: 100%;
padding: {
right: 10vw;
@ -314,9 +344,13 @@ export default {
}
}
@media (max-width: 1336px) {
@media (max-width: 576px) {
.controls .button-icon {
padding: 0 5px !important;
margin: 0 5px !important;
}
.controls {
padding: 0 5vw;
padding: 0 5px;
}
}
@ -341,6 +375,7 @@ export default {
.track-info {
height: 46px;
margin-left: 12px;
min-width: 100px;
display: flex;
flex-direction: column;
justify-content: center;
@ -432,10 +467,6 @@ export default {
}
}
.like-button {
margin-left: 16px;
}
.button-icon.disabled {
cursor: default;
opacity: 0.38;

@ -152,7 +152,7 @@ export default {
<style lang="scss" scoped>
#scrollbar {
position: fixed;
position: absolute;
right: 0;
top: 0;
bottom: 0;

@ -1,5 +1,5 @@
<template>
<div class="track-list">
<div class="track-list no-scrollbar">
<ContextMenu ref="menu">
<div v-show="type !== 'cloudDisk'" class="item-info">
<img

@ -283,7 +283,7 @@ button {
border-radius: 8px;
height: 46px;
width: 46px;
margin-right: 20px;
margin-right: 14px;
border: 1px solid rgba(0, 0, 0, 0.04);
cursor: pointer;
}
@ -293,6 +293,7 @@ button {
}
.title-and-artist {
min-width: 120px;
flex: 1;
display: flex;
.container {
@ -300,11 +301,11 @@ button {
flex-direction: column;
}
.title {
font-size: 18px;
font-size: 16px;
font-weight: 600;
color: var(--color-text);
cursor: default;
padding-right: 16px;
padding-right: 12px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
@ -347,6 +348,7 @@ button {
flex: 1;
display: flex;
font-size: 16px;
min-width: 80px;
opacity: 0.88;
color: var(--color-text);
display: -webkit-box;

@ -8,6 +8,7 @@ export default {
explore: '发现',
library: '音乐库',
search: '搜索',
theme: '主题',
github: 'GitHub 仓库',
},
home: {

@ -8,6 +8,7 @@ const routes = [
path: '/',
name: 'home',
component: () => import('@/views/home.vue'),
children: [],
meta: {
keepAlive: true,
savePosition: true,

@ -20,7 +20,7 @@ let localStorage = {
automaticallyCacheSongs: true,
cacheLimit: 8192,
enableReversedMode: false,
nyancatStyle: false,
nyancatStyle: true,
showLyricsTranslation: true,
lyricsBackground: true,
closeAppOption: 'ask',

@ -333,6 +333,7 @@ export default class {
this._nextTrackCallback();
},
});
this._howler.on('loaderror', (_, errCode) => {
// https://developer.mozilla.org/en-US/docs/Web/API/MediaError/code
// code 3: MEDIA_ERR_DECODE
@ -509,6 +510,7 @@ export default class {
ifUnplayableThen = UNPLAYABLE_CONDITION.PLAY_NEXT_TRACK
) {
return this._getAudioSource(track).then(source => {
// 获取mp3url 代理
if (source) {
let replaced = false;
if (track.id === this.currentTrackID) {
@ -731,7 +733,6 @@ export default class {
if (retryCount < 0) {
let content = '获取私人FM数据时重试次数过多请手动切换下一首';
store.dispatch('showToast', content);
console.log(content);
return false;
}
// 这里只能拿到一条数据
@ -786,7 +787,7 @@ export default class {
this._howler?.once('play', () => {
this._howler?.fade(0, this.volume, PLAY_PAUSE_FADE_DURATION);
this.nowMp3Url = this._howler._src;
this._setPlaying(true);
if (this._currentTrack.name) {
setTitle(this._currentTrack);

@ -1,7 +1,6 @@
import router from '@/router';
import { doLogout, getCookie } from '@/utils/auth';
import axios from 'axios';
let baseURL = '';
// Web 和 Electron 跑在不同端口避免同时启动时冲突
if (process.env.IS_ELECTRON) {
@ -13,9 +12,8 @@ if (process.env.IS_ELECTRON) {
} else {
baseURL = process.env.VUE_APP_NETEASE_API_URL;
}
const service = axios.create({
baseURL,
baseURL: baseURL,
withCredentials: true,
timeout: 15000,
});

@ -7,7 +7,6 @@
:show-play-button="true"
:always-show-shadow="true"
:click-cover-to-play="true"
:fixed-size="288"
type="album"
:cover-hover="false"
:play-button-size="18"
@ -437,4 +436,33 @@ export default {
overflow: hidden;
white-space: pre-line;
}
.cover {
height: 288px;
width: 288px;
}
@media (max-width: 576px) {
.playlist {
margin-top: 14px;
}
.cover {
width: auto !important;
height: auto !important;
}
.playlist-info {
width: auto;
margin: 0;
flex-direction: column;
}
.playlist-info .info .title {
font-size: 24px;
font-weight: 700;
}
.playlist-info .info {
padding: 14px;
margin: 0;
}
.search-box-likepage {
right: 8vw;
}
}
</style>

@ -542,4 +542,31 @@ export default {
overflow: hidden;
white-space: pre-line;
}
@media (max-width: 576px) {
.artist {
margin-top: 14px;
}
.head {
width: auto !important;
height: auto !important;
}
.artist-info img {
margin-right: 0;
}
.artist-info {
margin: 0;
flex-direction: column;
.name {
margin-top: 20px;
}
}
.artist-info .info {
padding: 14px;
margin: 0;
}
.search-box-likepage {
right: 8vw;
}
}
</style>

@ -27,7 +27,7 @@
</div>
<div class="index-row">
<div class="title"> For You </div>
<div class="for-you-row">
<div class="for-you-row no-scrollbar">
<DailyTracksCard ref="DailyTracksCard" />
<FMCard />
</div>
@ -202,4 +202,11 @@ footer {
gap: 24px;
margin-bottom: 78px;
}
@media (max-width: 576px) {
.for-you-row {
overflow: auto;
grid-template-columns: repeat(1, 1fr);
margin-bottom: 0;
}
}
</style>

@ -31,7 +31,7 @@
</button>
</div>
</div>
<div class="songs">
<div class="songs no-scrollbar">
<TrackList
:id="liked.playlists.length > 0 ? liked.playlists[0].id : 0"
:tracks="liked.songsWithDetails"
@ -621,4 +621,16 @@ button.playHistory-button--selected {
transform: none;
}
}
@media (max-width: 576px) {
.section-one {
flex-direction: column;
}
.section-one .songs {
margin: 20px 0;
overflow: auto;
}
.section-two {
margin: 0;
}
}
</style>

@ -29,217 +29,224 @@
class="gradient-background"
:style="{ background }"
></div>
<div class="left-side">
<div>
<div v-if="settings.showLyricsTime" class="date">
{{ date }}
</div>
<div class="cover">
<div class="cover-container">
<img :src="imageUrl" loading="lazy" />
<div
class="shadow"
:style="{ backgroundImage: `url(${imageUrl})` }"
></div>
<div class="main-container">
<div class="left-side">
<div>
<div v-if="settings.showLyricsTime" class="date">
{{ date }}
</div>
</div>
<div class="controls">
<div class="top-part">
<div class="track-info">
<div class="title" :title="currentTrack.name">
<router-link
v-if="hasList()"
:to="`${getListPath()}`"
@click.native="toggleLyrics"
>{{ currentTrack.name }}
</router-link>
<span v-else>
{{ currentTrack.name }}
</span>
</div>
<div class="subtitle">
<router-link
v-if="artist.id !== 0"
:to="`/artist/${artist.id}`"
@click.native="toggleLyrics"
>{{ artist.name }}
</router-link>
<span v-else>
{{ artist.name }}
</span>
<span v-if="album.id !== 0">
-
<div class="cover">
<div class="cover-container">
<img :src="imageUrl" loading="lazy" />
<div
class="shadow"
:style="{ backgroundImage: `url(${imageUrl})` }"
></div>
</div>
</div>
<div class="controls">
<div class="top-part">
<div class="track-info">
<div class="title" :title="currentTrack.name">
<router-link
:to="`/album/${album.id}`"
:title="album.name"
v-if="hasList()"
:to="`${getListPath()}`"
@click.native="toggleLyrics"
>{{ album.name }}
>{{ currentTrack.name }}
</router-link>
</span>
</div>
</div>
<div class="top-right">
<div class="volume-control">
<button-icon :title="$t('player.mute')" @click.native="mute">
<svg-icon v-show="volume > 0.5" icon-class="volume" />
<svg-icon v-show="volume === 0" icon-class="volume-mute" />
<svg-icon
v-show="volume <= 0.5 && volume !== 0"
icon-class="volume-half"
/>
</button-icon>
<div class="volume-bar">
<vue-slider
v-model="volume"
:min="0"
:max="1"
:interval="0.01"
:drag-on-click="true"
:duration="0"
tooltip="none"
:dot-size="12"
></vue-slider>
<span v-else>
{{ currentTrack.name }}
</span>
</div>
<div class="subtitle">
<router-link
v-if="artist.id !== 0"
:to="`/artist/${artist.id}`"
@click.native="toggleLyrics"
>{{ artist.name }}
</router-link>
<span v-else>
{{ artist.name }}
</span>
<span v-if="album.id !== 0">
-
<router-link
:to="`/album/${album.id}`"
:title="album.name"
@click.native="toggleLyrics"
>{{ album.name }}
</router-link>
</span>
</div>
</div>
<div class="buttons">
<button-icon
:title="$t('player.like')"
@click.native="likeATrack(player.currentTrack.id)"
>
<svg-icon
:icon-class="
player.isCurrentTrackLiked ? 'heart-solid' : 'heart'
"
/>
</button-icon>
<button-icon
:title="$t('contextMenu.addToPlaylist')"
@click.native="addToPlaylist"
>
<svg-icon icon-class="plus" />
</button-icon>
<!-- <button-icon @click.native="openMenu" title="Menu"
<div class="top-right">
<div class="volume-control">
<button-icon
:title="$t('player.mute')"
@click.native="mute"
>
<svg-icon v-show="volume > 0.5" icon-class="volume" />
<svg-icon
v-show="volume === 0"
icon-class="volume-mute"
/>
<svg-icon
v-show="volume <= 0.5 && volume !== 0"
icon-class="volume-half"
/>
</button-icon>
<div class="volume-bar">
<vue-slider
v-model="volume"
:min="0"
:max="1"
:interval="0.01"
:drag-on-click="true"
:duration="0"
tooltip="none"
:dot-size="12"
></vue-slider>
</div>
</div>
<div class="buttons">
<button-icon
:title="$t('player.like')"
@click.native="likeATrack(player.currentTrack.id)"
>
<svg-icon
:icon-class="
player.isCurrentTrackLiked ? 'heart-solid' : 'heart'
"
/>
</button-icon>
<button-icon
:title="$t('contextMenu.addToPlaylist')"
@click.native="addToPlaylist"
>
<svg-icon icon-class="plus" />
</button-icon>
<!-- <button-icon @click.native="openMenu" title="Menu"
><svg-icon icon-class="more"
/></button-icon> -->
</div>
</div>
</div>
</div>
<div class="progress-bar">
<span>{{ formatTrackTime(player.progress) || '0:00' }}</span>
<div class="slider">
<vue-slider
v-model="player.progress"
:min="0"
:max="player.currentTrackDuration"
:interval="1"
:drag-on-click="true"
:duration="0"
:dot-size="12"
:height="2"
:tooltip-formatter="formatTrackTime"
:lazy="true"
:silent="true"
></vue-slider>
<div class="progress-bar">
<span>{{ formatTrackTime(player.progress) || '0:00' }}</span>
<div class="slider">
<vue-slider
v-model="player.progress"
:min="0"
:max="player.currentTrackDuration"
:interval="1"
:drag-on-click="true"
:duration="0"
:dot-size="12"
:height="2"
:tooltip-formatter="formatTrackTime"
:lazy="true"
:silent="true"
></vue-slider>
</div>
<span>{{ formatTrackTime(player.currentTrackDuration) }}</span>
</div>
<span>{{ formatTrackTime(player.currentTrackDuration) }}</span>
</div>
<div class="media-controls">
<button-icon
v-show="!player.isPersonalFM"
:title="
player.repeatMode === 'one'
? $t('player.repeatTrack')
: $t('player.repeat')
"
:class="{ active: player.repeatMode !== 'off' }"
@click.native="switchRepeatMode"
>
<svg-icon
v-show="player.repeatMode !== 'one'"
icon-class="repeat"
/>
<svg-icon
v-show="player.repeatMode === 'one'"
icon-class="repeat-1"
/>
</button-icon>
<div class="middle">
<div class="media-controls">
<button-icon
v-show="!player.isPersonalFM"
:title="$t('player.previous')"
@click.native="playPrevTrack"
>
<svg-icon icon-class="previous" />
</button-icon>
<button-icon
v-show="player.isPersonalFM"
title="不喜欢"
@click.native="moveToFMTrash"
>
<svg-icon icon-class="thumbs-down" />
</button-icon>
<button-icon
id="play"
:title="$t(player.playing ? 'player.pause' : 'player.play')"
@click.native="playOrPause"
:title="
player.repeatMode === 'one'
? $t('player.repeatTrack')
: $t('player.repeat')
"
:class="{ active: player.repeatMode !== 'off' }"
@click.native="switchRepeatMode"
>
<svg-icon :icon-class="player.playing ? 'pause' : 'play'" />
<svg-icon
v-show="player.repeatMode !== 'one'"
icon-class="repeat"
/>
<svg-icon
v-show="player.repeatMode === 'one'"
icon-class="repeat-1"
/>
</button-icon>
<div class="middle">
<button-icon
v-show="!player.isPersonalFM"
:title="$t('player.previous')"
@click.native="playPrevTrack"
>
<svg-icon icon-class="previous" />
</button-icon>
<button-icon
v-show="player.isPersonalFM"
title="不喜欢"
@click.native="moveToFMTrash"
>
<svg-icon icon-class="thumbs-down" />
</button-icon>
<button-icon
id="play"
:title="$t(player.playing ? 'player.pause' : 'player.play')"
@click.native="playOrPause"
>
<svg-icon :icon-class="player.playing ? 'pause' : 'play'" />
</button-icon>
<button-icon
:title="$t('player.next')"
@click.native="playNextTrack"
>
<svg-icon icon-class="next" />
</button-icon>
</div>
<button-icon
:title="$t('player.next')"
@click.native="playNextTrack"
v-show="!player.isPersonalFM"
:title="$t('player.shuffle')"
:class="{ active: player.shuffle }"
@click.native="switchShuffle"
>
<svg-icon icon-class="next" />
<svg-icon icon-class="shuffle" />
</button-icon>
</div>
<button-icon
v-show="!player.isPersonalFM"
:title="$t('player.shuffle')"
:class="{ active: player.shuffle }"
@click.native="switchShuffle"
>
<svg-icon icon-class="shuffle" />
</button-icon>
</div>
</div>
</div>
</div>
<div class="right-side">
<transition name="slide-fade">
<div
v-show="!noLyric"
ref="lyricsContainer"
class="lyrics-container"
:style="lyricFontSize"
>
<div id="line-1" class="line"></div>
<div class="right-side">
<transition name="slide-fade">
<div
v-for="(line, index) in lyricWithTranslation"
:id="`line${index}`"
:key="index"
class="line"
:class="{
highlight: highlightLyricIndex === index,
}"
@click="clickLyricLine(line.time)"
@dblclick="clickLyricLine(line.time, true)"
v-show="!noLyric"
ref="lyricsContainer"
class="lyrics-container"
:style="lyricFontSize"
>
<div class="content">
<span v-if="line.contents[0]">{{ line.contents[0] }}</span>
<br />
<span
v-if="
line.contents[1] &&
$store.state.settings.showLyricsTranslation
"
class="translation"
>{{ line.contents[1] }}</span
>
<div id="line-1" class="line"></div>
<div
v-for="(line, index) in lyricWithTranslation"
:id="`line${index}`"
:key="index"
class="line"
:class="{
highlight: highlightLyricIndex === index,
}"
@click="clickLyricLine(line.time)"
@dblclick="clickLyricLine(line.time, true)"
>
<div class="content">
<span v-if="line.contents[0]">{{ line.contents[0] }}</span>
<br />
<span
v-if="
line.contents[1] &&
$store.state.settings.showLyricsTranslation
"
class="translation"
>{{ line.contents[1] }}</span
>
</div>
</div>
</div>
</div>
</transition>
</transition>
</div>
</div>
<div class="close-button" @click="toggleLyrics">
<button>
@ -564,13 +571,17 @@ export default {
--contrast-lyrics-background: 125%;
--brightness-lyrics-background: 50%;
}
.main-container {
display: flex;
margin: 0 auto;
flex-direction: row;
}
.lyrics-background {
filter: blur(50px) contrast(var(--contrast-lyrics-background))
brightness(var(--brightness-lyrics-background));
position: absolute;
height: 100vh;
width: 100vw;
width: 100%;
.top-right,
.bottom-left {
z-index: 0;
@ -611,14 +622,14 @@ export default {
.gradient-background {
position: absolute;
height: 100vh;
width: 100vw;
width: 100%;
}
.left-side {
flex: 1;
display: flex;
justify-content: flex-end;
margin-right: 32px;
margin-right: 40px;
margin-top: 24px;
align-items: center;
transition: all 0.5s;
@ -794,7 +805,7 @@ export default {
flex: 1;
font-weight: 600;
color: var(--color-text);
margin-right: 24px;
margin-right: 30px;
z-index: 0;
.lyrics-container {
@ -906,21 +917,30 @@ export default {
}
}
@media (max-aspect-ratio: 10/9) {
@media screen and (min-width: 1200px) {
.right-side .lyrics-container {
max-width: 600px;
}
}
@media screen and (max-width: 576px) {
.lyrics-container .line .content {
transform-origin: center !important;
font-size: 0.8em;
}
.left-side {
display: none;
}
.right-side .lyrics-container {
max-width: 100%;
text-align: center;
padding: 0;
margin: 0;
font-size: 0.8;
width: 100%;
}
}
@media screen and (min-width: 1200px) {
.right-side .lyrics-container {
max-width: 600px;
.right-side {
margin: 0;
}
}
.slide-up-enter-active,
.slide-up-leave-active {
transition: all 0.4s;

@ -56,7 +56,7 @@ import MvRow from '@/components/MvRow.vue';
import { mapActions } from 'vuex';
export default {
name: 'mv',
name: 'Mv',
components: {
MvRow,
ButtonIcon,

@ -10,7 +10,6 @@
:show-play-button="true"
:always-show-shadow="true"
:click-cover-to-play="true"
:fixed-size="288"
type="playlist"
:cover-hover="false"
:play-button-size="18"
@ -933,8 +932,26 @@ export default {
}
}
}
@media (max-width: 1336px) {
.cover {
height: 288px;
width: 288px;
}
@media (max-width: 576px) {
.playlist {
margin-top: 14px;
}
.cover {
width: auto !important;
height: auto !important;
}
.playlist-info {
margin: 0;
flex-direction: column;
}
.playlist-info .info {
padding: 14px;
margin: 0;
}
.search-box-likepage {
right: 8vw;
}

@ -1,5 +1,14 @@
<template>
<div v-show="show" class="search-page">
<div v-show="tracks.length > 0" class="tracks">
<div class="section-title"
>{{ $t('search.song')
}}<router-link :to="`/search/${keywords}/tracks`">{{
$t('home.seeMore')
}}</router-link></div
>
<TrackList :tracks="tracks" type="tracklist" />
</div>
<div v-show="artists.length > 0 || albums.length > 0" class="row">
<div v-show="artists.length > 0" class="artists">
<div v-show="artists.length > 0" class="section-title"
@ -34,27 +43,6 @@
/>
</div>
</div>
<div v-show="tracks.length > 0" class="tracks">
<div class="section-title"
>{{ $t('search.song')
}}<router-link :to="`/search/${keywords}/tracks`">{{
$t('home.seeMore')
}}</router-link></div
>
<TrackList :tracks="tracks" type="tracklist" />
</div>
<div v-show="musicVideos.length > 0" class="music-videos">
<div class="section-title"
>{{ $t('search.mv')
}}<router-link :to="`/search/${keywords}/music-videos`">{{
$t('home.seeMore')
}}</router-link></div
>
<MvRow :mvs="musicVideos.slice(0, 5)" />
</div>
<div v-show="playlists.length > 0" class="playlists">
<div class="section-title"
>{{ $t('search.playlist')
@ -72,7 +60,15 @@
:play-button-size="26"
/>
</div>
<div v-show="musicVideos.length > 0" class="music-videos">
<div class="section-title"
>{{ $t('search.mv')
}}<router-link :to="`/search/${keywords}/music-videos`">{{
$t('home.seeMore')
}}</router-link></div
>
<MvRow :mvs="musicVideos.slice(0, 5)" />
</div>
<div v-show="!haveResult" class="no-results">
<div
><svg-icon icon-class="search" />
@ -89,7 +85,7 @@ import { mapActions } from 'vuex';
import { getTrackDetail } from '@/api/track';
import { search } from '@/api/others';
import NProgress from 'nprogress';
// import { get } from '@/utils/metingAPI';
import TrackList from '@/components/TrackList.vue';
import MvRow from '@/components/MvRow.vue';
import CoverRow from '@/components/CoverRow.vue';
@ -134,6 +130,11 @@ export default {
},
created() {
this.getData();
// get({ server: 'tencent', type: 'search', }).then(data => {
// // if (data.result?.song !== undefined)
// // data.result.song.songs = mapTrackPlayableStatus(data.result.song.songs);
// return data;
// });
},
methods: {
...mapActions(['showToast']),

@ -5,6 +5,7 @@ function resolve(dir) {
}
module.exports = {
publicPath: './',
// 生产环境打包不输出 map
productionSourceMap: false,
devServer: {
@ -12,12 +13,20 @@ module.exports = {
port: process.env.DEV_SERVER_PORT || 8080,
proxy: {
'^/api': {
target: 'http://localhost:3000',
target:
'https://service-osrz4um8-1257251314.gz.apigw.tencentcs.com/release/',
changeOrigin: true,
pathRewrite: {
'^/api': '/',
},
},
'^/meting': {
target: 'https://api.wuenci.com/meting/api/',
changeOrigin: true,
pathRewrite: {
'^/meting': '/',
},
},
},
},
pwa: {

@ -1772,89 +1772,89 @@
dependencies:
"@types/node" "*"
"@unblockneteasemusic/rust-napi-android-arm-eabi@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-android-arm-eabi/-/rust-napi-android-arm-eabi-0.3.0.tgz#71e020bbc3b6662efc1c4c80354e775580c6ffca"
integrity sha512-PSgb5j8sSs4gGUBy3FcPvQTsLlCc6HknyyK5Ax7caUMEzGK/oTFhpwkldulidc+eLh5mRCuNeKq9NvdMZuYp6A==
"@unblockneteasemusic/rust-napi-android-arm-eabi@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-android-arm-eabi/-/rust-napi-android-arm-eabi-0.4.0.tgz#30d71b473ea34442dc82c041e18092040fd00278"
integrity sha512-XKplW125O+YkbEq8AlhrdiLQJMZRG4+e+w8VKUndC9gIv8SB+xINFshtJISszBwP3eRg0kB3v8ZSl2gBMKZpEA==
"@unblockneteasemusic/rust-napi-android-arm64@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-android-arm64/-/rust-napi-android-arm64-0.3.0.tgz#837998a6b06e802ac0e149d3d231d0874f38f01e"
integrity sha512-0Zi8QgIxDYTEWaOTbDYIPoL0ECfsQXUd0N43HBjMnFsgAkc/FViNAFaKN1SkowrZNQoXYM/5I928Ea18Bv2ivQ==
"@unblockneteasemusic/rust-napi-android-arm64@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-android-arm64/-/rust-napi-android-arm64-0.4.0.tgz#8ca2e90f445672eb91c13cbb5169f7f9c21b08ef"
integrity sha512-gV6bPA6Ve8uK9NM9n6hw/XVcOnFJUsfZkCawiZBeUbpGilcgJdE0KzxDVvdM7UtOSebdNdlOjix1o0zyYPtZ4w==
"@unblockneteasemusic/rust-napi-darwin-arm64@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-darwin-arm64/-/rust-napi-darwin-arm64-0.3.0.tgz#4732257c048720e7966011381507db55ca8acc59"
integrity sha512-EByiGPy6GUk6bpZFZ+gdnalaomWjztOGuj8Ei7XExGJbl5gHw9ab+eh5v73frricGWpyz25SpSq4Nta8BDaoxw==
"@unblockneteasemusic/rust-napi-darwin-arm64@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-darwin-arm64/-/rust-napi-darwin-arm64-0.4.0.tgz#311564870084790e3af98586174acd83a55de84a"
integrity sha512-2aRJaODkgQST++6jRovr6xwp4oJaUprGaPXFNbW0v9v7kmwrwXaXg5zz0TOoP28MB41hJQ48KjTNY0VaPzDROw==
"@unblockneteasemusic/rust-napi-darwin-x64@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-darwin-x64/-/rust-napi-darwin-x64-0.3.0.tgz#26081090e00da553ba77e0b6dc03d7cc5a2d61e9"
integrity sha512-5CYwFCtpU+cxdPsDmqVyaPQ2ZzmZQ1OdOT2zQFfhWR6ru8px/8PhlYSaO+/T9d5z/OkXU6T8so8yBUHyhOBJng==
"@unblockneteasemusic/rust-napi-darwin-x64@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-darwin-x64/-/rust-napi-darwin-x64-0.4.0.tgz#7ddd74ef08390c52abdd7ac34a6fd344f24653bd"
integrity sha512-j1dWvz8+qIoa3750RoibUk59SKPemhcf39uRwp+phfk5mj1+z3sobgcHZfO/3w/6CTtJ0Smh78ljYYIaPycEjQ==
"@unblockneteasemusic/rust-napi-freebsd-x64@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-freebsd-x64/-/rust-napi-freebsd-x64-0.3.0.tgz#421e832d9f7212f5525b1273a474261105835dab"
integrity sha512-Ndh5UUVDpkqWvNJtkTQX3BloxQcWahnixvS6MtJ2orSem0GOTxB1AaVwguofF3DDA2MdIWEogmMNbML+YfGq1A==
"@unblockneteasemusic/rust-napi-freebsd-x64@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-freebsd-x64/-/rust-napi-freebsd-x64-0.4.0.tgz#f0d5a4b0f4746d1f66a9d26f0742f6fd03d85ba7"
integrity sha512-g/7rQ4U8AhkTA5/hrEKAcNjFpfZL3aQyy53fTQ8VXmrME5WKvzxFMpEl+FYh5dMfSCqfEKemJeCdvUrJxNGs1w==
"@unblockneteasemusic/rust-napi-linux-arm-gnueabihf@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-linux-arm-gnueabihf/-/rust-napi-linux-arm-gnueabihf-0.3.0.tgz#b222416565074a9e5832fc8b9d961bac144ab543"
integrity sha512-DJGg8KozC/bUETGkR9+frcEnytNDCBaROIDM1OjgsqXlILMAStK8fAxhNhXHRvrHQcgVL2xZ7NXQayvSwJSRsw==
"@unblockneteasemusic/rust-napi-linux-arm-gnueabihf@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-linux-arm-gnueabihf/-/rust-napi-linux-arm-gnueabihf-0.4.0.tgz#a4ff72c97ae59d23a4f749a13cb4b2499860fec5"
integrity sha512-2kRdVhMpfTAPAIImLuAv9sGqlh5Kcb51d8gKeNBIYCWR2SVNqEBNIAaKmkp9PtUY8Colr+LJaOZtUro9ipQ6rw==
"@unblockneteasemusic/rust-napi-linux-arm64-gnu@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-linux-arm64-gnu/-/rust-napi-linux-arm64-gnu-0.3.0.tgz#4eb22a7012c87daf86f00fddbf3c13d76ad29ea2"
integrity sha512-Xi5oo+E4RGMCPI2S5rtd7Hb1K86R89D+tptCwoZDC4xAoQ6Tjn7/psL1hpnBI5dx76YG/PLELjrdlV8UwUV2Mg==
"@unblockneteasemusic/rust-napi-linux-arm64-gnu@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-linux-arm64-gnu/-/rust-napi-linux-arm64-gnu-0.4.0.tgz#1a92506f9280ef8f4f45205c9959ad084bd60ebe"
integrity sha512-uw4+NlJkc9oncyNSzKWPHE+KH5KLRsz0RTgdihDTnaSSatHr668Ip1CDcL59t6JpuBgRkP0T02OcQTXv92NJzA==
"@unblockneteasemusic/rust-napi-linux-arm64-musl@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-linux-arm64-musl/-/rust-napi-linux-arm64-musl-0.3.0.tgz#a722158e96ead9fa30fdd205504dd1684db156f6"
integrity sha512-ZiF/bQbaIr+d+8JVxQ2pwvevrWAF3l4q7PzKytV/z0mzZo70ZOpfseZkQ08puAfzzDhAmRls0gTsDX1ktvuNPA==
"@unblockneteasemusic/rust-napi-linux-arm64-musl@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-linux-arm64-musl/-/rust-napi-linux-arm64-musl-0.4.0.tgz#05ad6eeaf783248d9a537ecdf92410d910518727"
integrity sha512-9XqghLSk1QBkmkdlb3O+IJaxelEOPXouGXJXPx9NMmcsgEFgD1RL0h5H3pFKKpV6hjHKFwi7Ue6kfUBM6Z6Tnw==
"@unblockneteasemusic/rust-napi-linux-x64-gnu@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-linux-x64-gnu/-/rust-napi-linux-x64-gnu-0.3.0.tgz#8a52b909b0bba19416901f475928ce90e8585af7"
integrity sha512-fyWDKdcUGdJCGlCOJ7nPIuWEhEI3J2GvptVegYnE6XEIfLkvbPOYVmPylI/Gw3pVwZ2dvU0V2hPjqcfgUqzJGg==
"@unblockneteasemusic/rust-napi-linux-x64-gnu@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-linux-x64-gnu/-/rust-napi-linux-x64-gnu-0.4.0.tgz#6057fe710970d99df019794bff11fac48fbc6664"
integrity sha512-HGywXQAcIQkTBpI66i+cPHvCr1t5smKuJJaTcwV/5WfoHYsP+uuO522R4XNV/EPEIV9PDUwinoemiDKUQumJVw==
"@unblockneteasemusic/rust-napi-linux-x64-musl@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-linux-x64-musl/-/rust-napi-linux-x64-musl-0.3.0.tgz#507e6791db634ce9ac55cdcc9c30bce74bc85e8a"
integrity sha512-NQ/axCrjzBbzgPjxY88PN/b9oQeryCOjpCwXD90fMJXuV8llUA4BsTILxVneiPwt2VI4fCvth1O5BMsNfeFAWw==
"@unblockneteasemusic/rust-napi-linux-x64-musl@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-linux-x64-musl/-/rust-napi-linux-x64-musl-0.4.0.tgz#86dd367c46b71df7bbb014095602a5a967830c86"
integrity sha512-0Nxx9914zH6EEJ88v0zFKynOnZ1umv2SFWbAaEPZ5x3tqh896M3OFyxtbGfBKgJJfvz7b3XKiQ5+aTBlYg8Wmg==
"@unblockneteasemusic/rust-napi-win32-arm64-msvc@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-win32-arm64-msvc/-/rust-napi-win32-arm64-msvc-0.3.0.tgz#a8bd63de5897c540541d9ce4d7b843be7b088a6b"
integrity sha512-TvAMHneV9cB2HULnMQfOnTgd7p+E4L+MtG2I5foHD3h0IeLC8+fPvYzs/HIKhfZCBWcHR5hfoQ/102V6uHFxJg==
"@unblockneteasemusic/rust-napi-win32-arm64-msvc@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-win32-arm64-msvc/-/rust-napi-win32-arm64-msvc-0.4.0.tgz#3c4274e2b3429e5736c6b451ef8d9f9cc5530eb2"
integrity sha512-wX5k9FrnejxZQZEocbJ9QdTC30jc9r77GeqjyGBLRa04e019IMLT+Orj1+SVJawKXk43rLS96Ish+7GKLOeWog==
"@unblockneteasemusic/rust-napi-win32-ia32-msvc@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-win32-ia32-msvc/-/rust-napi-win32-ia32-msvc-0.3.0.tgz#002231d22bfa378bdb88c7f21b11e9e121cb3385"
integrity sha512-x68DuYHZOHDIlzcG9HbTbpABiSwP9Uc3GK0WuCXl03HTOMKYjT+OJ0aA8HtTyeXMe+IpSJPpg2UIOT3XqaCaeg==
"@unblockneteasemusic/rust-napi-win32-ia32-msvc@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-win32-ia32-msvc/-/rust-napi-win32-ia32-msvc-0.4.0.tgz#8758ba79e5d8af85b5b42e059382a4866dbe4b13"
integrity sha512-B86TVJKpsaYwzE5JfkcIvmFIyjo66P999I5RfkzNYVV+vqi9Z5wsOUZ5K9BcECaGtGfyRUJRYUJ8G5R6WdP6ZA==
"@unblockneteasemusic/rust-napi-win32-x64-msvc@0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi-win32-x64-msvc/-/rust-napi-win32-x64-msvc-0.3.0.tgz#53242eea5ee6af30fa68330be752b030be72c1f6"
integrity sha512-ACmTzPih91FmVt87BIdGhiKVbjKHNawRj5vgHcFlPX6KQ8NrxSigXXNs0/JWWDvAK9BLpOmeCtieXHnMdv+YQQ==
"@unblockneteasemusic/rust-napi-win32-x64-msvc@0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi-win32-x64-msvc/-/rust-napi-win32-x64-msvc-0.4.0.tgz#bfb173acb99147fb9aee7520a9db21514f5ac791"
integrity sha512-b0BzkWHxzcXRtFAMi8CluPgfuUympnqI2lgXMVNYEKllcQj/Hu5crQIKB4A3w8Z5d9xxW9qIMGo8y66ygXRjeg==
"@unblockneteasemusic/rust-napi@^0.3.0-pre.1":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@unblockneteasemusic/rust-napi/-/rust-napi-0.3.0.tgz#607562e51b0bd50cfee19fb23bf7eff139296bda"
integrity sha512-UA20K1T72XkFFoaY7D+XNqlX4zakrGDsrIsChs92e4qqhzu2mPJWNYV/cS2xOWFUbeFve84Hz7Kwl/OocjTDpQ==
"@unblockneteasemusic/rust-napi@^0.4.0":
version "0.4.0"
resolved "https://registry.npmmirror.com/@unblockneteasemusic/rust-napi/-/rust-napi-0.4.0.tgz#2c46be08da74cd4450c28579b04a7ed554ebbcea"
integrity sha512-I/XAjjBlBqA+sO7XJFPbmxDiPABgINPaIE6dR7grNQlFPAPDYgfdR0Iz5R7Fg7MuKMClRpPIR2QYAm6dJXQIsQ==
optionalDependencies:
"@unblockneteasemusic/rust-napi-android-arm-eabi" "0.3.0"
"@unblockneteasemusic/rust-napi-android-arm64" "0.3.0"
"@unblockneteasemusic/rust-napi-darwin-arm64" "0.3.0"
"@unblockneteasemusic/rust-napi-darwin-x64" "0.3.0"
"@unblockneteasemusic/rust-napi-freebsd-x64" "0.3.0"
"@unblockneteasemusic/rust-napi-linux-arm-gnueabihf" "0.3.0"
"@unblockneteasemusic/rust-napi-linux-arm64-gnu" "0.3.0"
"@unblockneteasemusic/rust-napi-linux-arm64-musl" "0.3.0"
"@unblockneteasemusic/rust-napi-linux-x64-gnu" "0.3.0"
"@unblockneteasemusic/rust-napi-linux-x64-musl" "0.3.0"
"@unblockneteasemusic/rust-napi-win32-arm64-msvc" "0.3.0"
"@unblockneteasemusic/rust-napi-win32-ia32-msvc" "0.3.0"
"@unblockneteasemusic/rust-napi-win32-x64-msvc" "0.3.0"
"@unblockneteasemusic/rust-napi-android-arm-eabi" "0.4.0"
"@unblockneteasemusic/rust-napi-android-arm64" "0.4.0"
"@unblockneteasemusic/rust-napi-darwin-arm64" "0.4.0"
"@unblockneteasemusic/rust-napi-darwin-x64" "0.4.0"
"@unblockneteasemusic/rust-napi-freebsd-x64" "0.4.0"
"@unblockneteasemusic/rust-napi-linux-arm-gnueabihf" "0.4.0"
"@unblockneteasemusic/rust-napi-linux-arm64-gnu" "0.4.0"
"@unblockneteasemusic/rust-napi-linux-arm64-musl" "0.4.0"
"@unblockneteasemusic/rust-napi-linux-x64-gnu" "0.4.0"
"@unblockneteasemusic/rust-napi-linux-x64-musl" "0.4.0"
"@unblockneteasemusic/rust-napi-win32-arm64-msvc" "0.4.0"
"@unblockneteasemusic/rust-napi-win32-ia32-msvc" "0.4.0"
"@unblockneteasemusic/rust-napi-win32-x64-msvc" "0.4.0"
"@vibrant/color@^3.2.1-alpha.1":
version "3.2.1-alpha.1"
@ -2397,12 +2397,12 @@
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
NeteaseCloudMusicApi@^4.5.2:
version "4.6.6"
resolved "https://registry.yarnpkg.com/NeteaseCloudMusicApi/-/NeteaseCloudMusicApi-4.6.6.tgz#97ac29a34dd6d3022ead4246fef62ec7f3dedfbe"
integrity sha512-7VNbW6MlMleuG6WDglIFYHtlICJNxF7Nw20vZxaiGdrvQDB6LJvOy6kpXivwATYlkAwzXhz67dNuQVJ16ctXLw==
NeteaseCloudMusicApi@^4.8.7:
version "4.8.9"
resolved "https://registry.npmmirror.com/NeteaseCloudMusicApi/-/NeteaseCloudMusicApi-4.8.9.tgz#b1c077bd74f55a995b40d9c9b436636fa40306be"
integrity sha512-3YcbljD8nGn0KsjoPq6pBxZSuu3Sk4M3c8ZZhdvEAL+P+1noYftq/ZhA+CY0uQXLMkgbHRpLapBdGXMXhhB6/Q==
dependencies:
axios "^0.24.0"
axios "^1.2.2"
express "^4.17.1"
express-fileupload "^1.1.9"
md5 "^2.3.0"
@ -2868,13 +2868,6 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
axios@^0.24.0:
version "0.24.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6"
integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==
dependencies:
follow-redirects "^1.14.4"
axios@^0.26.1:
version "0.26.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9"
@ -2882,6 +2875,15 @@ axios@^0.26.1:
dependencies:
follow-redirects "^1.14.8"
axios@^1.2.2:
version "1.3.1"
resolved "https://registry.npmmirror.com/axios/-/axios-1.3.1.tgz#80bf6c8dbb46e6db1fa8fe9ab114c1ca7405c2ee"
integrity sha512-78pWJsQTceInlyaeBQeYZ/QgZeWS8hGeKiIJiDKQe3hEyBb7sEMq0K4gjx+Va6WHTYO4zI/RRl8qGRzn0YMadA==
dependencies:
follow-redirects "^1.15.0"
form-data "^4.0.0"
proxy-from-env "^1.1.0"
babel-eslint@^10.1.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
@ -6139,7 +6141,7 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3"
readable-stream "^2.3.6"
follow-redirects@^1.0.0, follow-redirects@^1.14.4:
follow-redirects@^1.0.0:
version "1.15.1"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5"
integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==
@ -6149,6 +6151,11 @@ follow-redirects@^1.14.8:
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7"
integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==
follow-redirects@^1.15.0:
version "1.15.2"
resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@ -10221,6 +10228,11 @@ proxy-addr@~2.0.7:
forwarded "0.2.0"
ipaddr.js "1.9.1"
proxy-from-env@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"

Loading…
Cancel
Save