diff --git a/xiaomusic/static/default/md.js b/xiaomusic/static/default/md.js
index ab66ef2..f7622ce 100644
--- a/xiaomusic/static/default/md.js
+++ b/xiaomusic/static/default/md.js
@@ -897,7 +897,7 @@ function _refresh_music_list(callback) {
$("#music_list").empty();
$.get("/musiclist", function (data, status) {
console.log(data, status);
- favoritelist = data["收藏"];
+ favoritelist = data["收藏"] || [];
// 收集所有播放列表选项
var playlistOptions = [];
@@ -1574,7 +1574,7 @@ function startWebSocket(did, token) {
offset = data.offset || 0;
duration = data.duration || 0;
- if (favoritelist.includes(cur_music)) {
+ if (favoritelist && favoritelist.includes(cur_music)) {
$(".favorite").addClass("favorite-active");
} else {
$(".favorite").removeClass("favorite-active");
diff --git a/xiaomusic/static/onlineSearch/index.html b/xiaomusic/static/onlineSearch/index.html
index 9e12e1c..6baebb8 100644
--- a/xiaomusic/static/onlineSearch/index.html
+++ b/xiaomusic/static/onlineSearch/index.html
@@ -144,7 +144,7 @@
cursor: pointer;
}
- .search-btn, .play-all-btn, .push-btn {
+ .search-btn, .play-all-btn {
padding: 10px 20px;
background-color: #007bff;
color: white;
@@ -160,12 +160,12 @@
gap: 6px;
}
- .search-btn:hover, .play-all-btn:hover, .push-btn:hover {
+ .search-btn:hover, .play-all-btn:hover {
background-color: #0056b3;
transform: translateY(-1px);
}
- .search-btn:active, .play-all-btn:active, .push-btn:active {
+ .search-btn:active, .play-all-btn:active {
transform: translateY(0);
}
@@ -645,7 +645,7 @@
width: 100%;
}
- .search-btn, .push-btn, .play-all-btn {
+ .search-btn, .play-all-btn {
flex: 1;
padding: 12px;
font-size: 14px;
@@ -821,6 +821,9 @@
+
-
@@ -898,6 +897,7 @@
let currentLyrics = []; // 存储解析后的歌词
let lyricLines = []; // 存储歌词 DOM 元素
let songList = []; // 存储搜索到的歌曲列表
+ let currentDeviceId = localStorage.getItem('cur_did') || 'web_device'; // 当前选中的设备
// 分页相关变量
let currentPage = 1;
@@ -932,12 +932,13 @@
}
//加载插件
loadPlugins();
+ // 加载设备列表
+ loadDevices();
// 绑定搜索按钮事件
document.getElementById('searchBtn').addEventListener('click', searchMusic);
// 绑定其他按钮事件
- document.getElementById('pushAllBtn').addEventListener('click', pushAllMusic);
- document.getElementById('playAllBtn').addEventListener('click', webPlayAllMusic);
+ document.getElementById('playAllBtn').addEventListener('click', handlePlayAllMusic);
// 绑定回车键事件
document.getElementById('searchInput').addEventListener('keypress', function(e) {
@@ -952,6 +953,61 @@
});
});
+ // 加载设备列表
+ async function loadDevices() {
+ try {
+ const response = await fetch('/getsetting');
+ const data = await response.json();
+
+ const deviceSelect = document.getElementById('deviceSelect');
+ deviceSelect.innerHTML = '';
+
+ const dids = data.mi_did ? data.mi_did.split(',') : [];
+ const devices = data.devices || {};
+
+ dids.forEach(didValue => {
+ const device = Object.values(devices).find(d => d.did === didValue);
+ if (device) {
+ const option = document.createElement('option');
+ option.value = didValue;
+ option.textContent = device.name;
+ deviceSelect.appendChild(option);
+ }
+ });
+
+ // 添加网页端本地选项
+ const webOption = document.createElement('option');
+ webOption.value = 'web_device';
+ webOption.textContent = '网页端-本地';
+ deviceSelect.appendChild(webOption);
+
+ // 恢复上次选择的设备
+ if (currentDeviceId && dids.includes(currentDeviceId)) {
+ deviceSelect.value = currentDeviceId;
+ } else if (currentDeviceId === 'web_device') {
+ deviceSelect.value = 'web_device';
+ } else if (dids.length > 0) {
+ currentDeviceId = dids[0];
+ deviceSelect.value = currentDeviceId;
+ } else {
+ currentDeviceId = 'web_device';
+ deviceSelect.value = 'web_device';
+ }
+
+ // 设备选择变化时保存
+ deviceSelect.addEventListener('change', function() {
+ currentDeviceId = this.value;
+ localStorage.setItem('cur_did', currentDeviceId);
+ });
+ } catch (error) {
+ console.error('加载设备列表失败:', error);
+ // 出错时添加默认选项
+ const deviceSelect = document.getElementById('deviceSelect');
+ deviceSelect.innerHTML = '';
+ currentDeviceId = 'web_device';
+ }
+ }
+
// 平滑滚动到顶部
function scrollToTop() {
@@ -1099,8 +1155,7 @@
${item.platform || 'online'}
-
-
+
`).join('');
@@ -1169,25 +1224,43 @@
// 获取当前选中的设备 ID
function getCurrentDeviceId() {
- // 从 localStorage 获取当前设备 ID
- return localStorage.getItem('cur_did') || '';
+ return currentDeviceId || localStorage.getItem('cur_did') || 'web_device';
+ }
+
+ // 统一的播放处理函数
+ async function handlePlayMusic(mediaItem) {
+ const deviceId = getCurrentDeviceId();
+ if (deviceId === 'web_device') {
+ await webPlayMusic(mediaItem);
+ } else {
+ await pushMusic(mediaItem);
+ }
+ }
+
+ // 统一的播放全部处理函数
+ async function handlePlayAllMusic() {
+ const deviceId = getCurrentDeviceId();
+ if (songList.length === 0) {
+ alert('请先搜索歌曲!');
+ return;
+ }
+ if (deviceId === 'web_device') {
+ await webPlayAllMusic();
+ } else {
+ await pushAllMusic();
+ }
}
// 推送音乐(设备播放)
async function pushMusic(mediaItem) {
try {
const deviceId = getCurrentDeviceId();
- if (!deviceId || deviceId === '') {
- alert('请先设置设备!');
- return;
- }
if (!mediaItem) {
alert('歌曲不存在!');
return;
}
const mediaItemList = [mediaItem];
let playlistName = '_online_webPush';
- // 批量推送音乐到设备
await pushList(playlistName, deviceId, mediaItemList);
} catch (error) {
alert('播放出错:' + error.message);
@@ -1198,18 +1271,12 @@
async function pushAllMusic() {
try {
const deviceId = getCurrentDeviceId();
- if (!deviceId || deviceId === '') {
- alert('请先设置设备!');
- return;
- }
if (songList.length === 0) {
alert('请先搜索歌曲!');
return;
}
- console.log("songList",songList)
- // 格式化 musicList
+ console.log("songList", songList);
let playlistName = '_online_webPush';
- // 批量推送音乐到设备
await pushList(playlistName, deviceId, songList);
} catch (error) {
alert('播放出错:' + error.message);
@@ -1217,27 +1284,25 @@
}
// 推送音乐列表到设备
- async function pushList(playlistName, deviceId, songList){
+ async function pushList(playlistName, deviceId, musicList) {
const response = await fetch('/api/device/pushList', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(
- { playlistName: playlistName,did: deviceId, songList: songList}
+ { playlistName: playlistName, did: deviceId, songList: musicList }
)
});
const data = await response.json();
- // 根据新返回结构调整处理逻辑
if (data) {
if (data.success) {
- // 显示服务端返回的具体消息而不是通用提示
alert('推送成功!');
} else {
- alert('推送失败:'+data.error);
+ alert('推送失败:' + data.error);
}
} else {
- alert('播放失败:' + ('未知错误'));
+ alert('播放失败:未知错误');
}
}