mirror of
https://github.com/qier222/YesPlayMusic.git
synced 2024-11-22 12:32:07 +08:00
feat: allow customizing UNM's sources (#1134)
* feat(ipcMain/unm): allow passing customized source
* feat(utils/Player): pass settings.unmSource
According to c280221a44
,
we can let users customize their desired source now.
* feat(views/settings): allow configuring sources
We haven't supported specifying the environment variable in YPM yet.
This commit is contained in:
parent
c73da5c5ad
commit
83b78bab34
|
@ -48,8 +48,18 @@ async function getBiliVideoFile(url) {
|
||||||
return `data:application/octet-stream;base64,${encodedData}`;
|
return `data:application/octet-stream;base64,${encodedData}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse the source string (`a, b`) to source list `['a', 'b']`.
|
||||||
|
*
|
||||||
|
* @param {string} sourceString The source string.
|
||||||
|
* @returns {string[]} The source list.
|
||||||
|
*/
|
||||||
|
function parseSourceStringToList(sourceString) {
|
||||||
|
return sourceString.split(',').map(s => s.trim());
|
||||||
|
}
|
||||||
|
|
||||||
export function initIpcMain(win, store) {
|
export function initIpcMain(win, store) {
|
||||||
ipcMain.handle('unblock-music', async (_, track) => {
|
ipcMain.handle('unblock-music', async (_, track, source) => {
|
||||||
// 兼容 unblockneteasemusic 所使用的 api 字段
|
// 兼容 unblockneteasemusic 所使用的 api 字段
|
||||||
track.alias = track.alia || [];
|
track.alias = track.alia || [];
|
||||||
track.duration = track.dt || 0;
|
track.duration = track.dt || 0;
|
||||||
|
@ -62,11 +72,15 @@ export function initIpcMain(win, store) {
|
||||||
}, 5000);
|
}, 5000);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const sourceList =
|
||||||
|
typeof source === 'string' ? parseSourceStringToList(source) : null;
|
||||||
|
log(`[UNM] using source: ${sourceList || '<default>'}`);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const matchedAudio = await Promise.race([
|
const matchedAudio = await Promise.race([
|
||||||
// TODO: tell users to install yt-dlp.
|
// TODO: tell users to install yt-dlp.
|
||||||
// we passed "null" to source, to let UNM choose the default source.
|
// we passed "null" to source, to let UNM choose the default source.
|
||||||
match(track.id, null, track),
|
match(track.id, sourceList, track),
|
||||||
timeoutPromise,
|
timeoutPromise,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
|
@ -299,7 +299,11 @@ export default class {
|
||||||
) {
|
) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const source = await ipcRenderer.invoke('unblock-music', track);
|
const source = await ipcRenderer.invoke(
|
||||||
|
'unblock-music',
|
||||||
|
track,
|
||||||
|
store.state.settings.unmSource
|
||||||
|
);
|
||||||
if (store.state.settings.automaticallyCacheSongs && source?.url) {
|
if (store.state.settings.automaticallyCacheSongs && source?.url) {
|
||||||
// TODO: 将unblockMusic字样换成真正的来源(比如酷我咪咕等)
|
// TODO: 将unblockMusic字样换成真正的来源(比如酷我咪咕等)
|
||||||
cacheTrackSource(track, source.url, 128000, 'unblockMusic');
|
cacheTrackSource(track, source.url, 128000, 'unblockMusic');
|
||||||
|
|
|
@ -222,6 +222,58 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<section v-if="isElectron" class="unm-configuration">
|
||||||
|
<h3>UnblockNeteaseMusic 设定</h3>
|
||||||
|
<div class="item">
|
||||||
|
<div class="left">
|
||||||
|
<div class="title"
|
||||||
|
>启用
|
||||||
|
<a
|
||||||
|
href="https://github.com/UnblockNeteaseMusic/server"
|
||||||
|
target="blank"
|
||||||
|
>UnblockNeteaseMusic</a
|
||||||
|
></div
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<div class="toggle">
|
||||||
|
<input
|
||||||
|
id="enable-unblock-netease-music"
|
||||||
|
v-model="enableUnblockNeteaseMusic"
|
||||||
|
type="checkbox"
|
||||||
|
name="enable-unblock-netease-music"
|
||||||
|
/>
|
||||||
|
<label for="enable-unblock-netease-music"></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="item">
|
||||||
|
<div class="left">
|
||||||
|
<div class="title"> 备选音源 </div>
|
||||||
|
<div class="description">
|
||||||
|
音源的具体代号
|
||||||
|
<a
|
||||||
|
href="https://github.com/UnblockNeteaseMusic/server#音源清单"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
可以点此到 UNM 的说明页面查询 </a
|
||||||
|
><br />
|
||||||
|
多个音源请用 <code>,</code> 逗号分隔。<br />
|
||||||
|
留空则使用 UNM 内置的默认值。
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="right">
|
||||||
|
<input
|
||||||
|
id="unm-source"
|
||||||
|
v-model="unmSource"
|
||||||
|
class="text-input"
|
||||||
|
placeholder="例 bilibili, kuwo"
|
||||||
|
/>
|
||||||
|
<label for="unm-source"></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
<h3>第三方</h3>
|
<h3>第三方</h3>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
|
@ -240,29 +292,6 @@
|
||||||
<button v-else @click="lastfmConnect()"> 授权连接 </button>
|
<button v-else @click="lastfmConnect()"> 授权连接 </button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="isElectron" class="item">
|
|
||||||
<div class="left">
|
|
||||||
<div class="title"
|
|
||||||
>启用
|
|
||||||
<a
|
|
||||||
href="https://github.com/UnblockNeteaseMusic/server"
|
|
||||||
target="blank"
|
|
||||||
>UnblockNeteaseMusic</a
|
|
||||||
></div
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
<div class="right">
|
|
||||||
<div class="toggle">
|
|
||||||
<input
|
|
||||||
id="enable-unblock-netease-music"
|
|
||||||
v-model="enableUnblockNeteaseMusic"
|
|
||||||
type="checkbox"
|
|
||||||
name="enable-unblock-netease-music"
|
|
||||||
/>
|
|
||||||
<label for="enable-unblock-netease-music"></label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div v-if="isElectron" class="item">
|
<div v-if="isElectron" class="item">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
|
@ -852,6 +881,21 @@ export default {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
unmSource: {
|
||||||
|
/**
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
get() {
|
||||||
|
return this.settings.unmSource || '';
|
||||||
|
},
|
||||||
|
/** @param {string?} value */
|
||||||
|
set(value) {
|
||||||
|
this.$store.commit('updateSettings', {
|
||||||
|
key: 'unmSource',
|
||||||
|
value: value.length ? value : null,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
isLastfmConnected() {
|
isLastfmConnected() {
|
||||||
return this.lastfm.key !== undefined;
|
return this.lastfm.key !== undefined;
|
||||||
},
|
},
|
||||||
|
@ -1128,6 +1172,12 @@ h3 {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
opacity: 0.78;
|
opacity: 0.78;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.description {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-top: 0.5em;
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user