搜索中...
';
-
+ songList = [];
try {
const response = await fetch(`/api/search/online?keyword=${encodeURIComponent(keyword)}&plugin=${plugin}`);
const data = await response.json();
-
if (data.success) {
+ isOpenAPI = data.isOpenAPI;
displayResults(data.data);
} else {
resultsDiv.innerHTML = `
@@ -631,12 +999,12 @@
${item.platform || 'online'}
-
-
-
+
+
`).join('');
+ songList = results;
resultsDiv.innerHTML = html;
}
@@ -647,52 +1015,84 @@
return localStorage.getItem('cur_did') || '';
}
- // 播放音乐(设备播放)
- async function playMusic(mediaItem) {
+ // 推送音乐(设备播放)
+ async function pushMusic(mediaItem) {
try {
const deviceId = getCurrentDeviceId();
if (!deviceId || deviceId === '') {
alert('请先设置设备!');
return;
}
- // 构造正确的请求数据
- const requestData = {...mediaItem, did: deviceId};
-
- const response = await fetch('/api/play/online', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify(requestData)
- });
-
- const data = await response.json();
- // 根据新返回结构调整处理逻辑
- if (data && data[0]) {
- let itemResult = data[0];
- if (itemResult.code === 0) {
- // 显示服务端返回的具体消息而不是通用提示
- alert('推送成功!');
- } else {
- alert('播放失败: '+itemResult.msg);
- }
- } else {
- alert('播放失败: ' + (data.error || '未知错误'));
+ if (!mediaItem) {
+ alert('歌曲不存在!');
+ return;
}
+ const mediaItemList = [mediaItem];
+ let playlistName = '_online_webPush';
+ // 批量推送音乐到设备
+ await pushList(playlistName, deviceId, mediaItemList);
} catch (error) {
alert('播放出错: ' + error.message);
}
}
- // 网页播放音乐
+ // 全部推送音乐到设备
+ async function pushAllMusic() {
+ try {
+ const deviceId = getCurrentDeviceId();
+ if (!deviceId || deviceId === '') {
+ alert('请先设置设备!');
+ return;
+ }
+ if (songList.length === 0) {
+ alert('请先搜索歌曲!');
+ return;
+ }
+ console.log("songList",songList)
+ // 格式化musicList
+ let playlistName = '_online_webPush';
+ // 批量推送音乐到设备
+ await pushList(playlistName, deviceId, songList);
+ } catch (error) {
+ alert('播放出错: ' + error.message);
+ }
+ }
+
+ // 推送音乐列表到设备
+ async function pushList(playlistName, deviceId, songList){
+ const response = await fetch('/api/device/pushList', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify(
+ { playlistName: playlistName,did: deviceId, songList: songList}
+ )
+ });
+ const data = await response.json();
+ // 根据新返回结构调整处理逻辑
+ if (data) {
+ if (data.success) {
+ // 显示服务端返回的具体消息而不是通用提示
+ alert('推送成功!');
+ } else {
+ alert('推送失败: '+data.error);
+ }
+ } else {
+ alert('播放失败: ' + ('未知错误'));
+ }
+ }
+
+ /*=====================网页播放音乐==========================*/
+
+ // 网页播放音乐 - 优化版本
async function webPlayMusic(mediaItem) {
try {
let playUrl;
- if (mediaItem && mediaItem.isOpenAPI) {//在线接口
- //playUrl = mediaItem.url
- // 嗅探真实的音乐URL
- playUrl = await sniffRealMusicUrl(mediaItem.url);
- } else {//插件方式
+ if (mediaItem && isOpenAPI) {
+ // playUrl = await sniffRealMusicUrl(mediaItem.url);
+ playUrl = mediaItem.url;
+ } else {
const response = await fetch('/api/play/getMediaSource', {
method: 'POST',
headers: {
@@ -701,14 +1101,14 @@
body: JSON.stringify(mediaItem)
});
const data = await response.json();
- playUrl = data.url
+ playUrl = data.url;
}
if (playUrl) {
// 显示播放器
const player = document.getElementById('musicPlayer');
player.style.display = 'block';
- // 指定底部高度,解决播放器显示问题
+
const container = document.querySelector('.container');
container.style.paddingBottom = '80px';
@@ -722,24 +1122,38 @@
if (mediaItem.artwork) {
coverPlaceholder.textContent = '';
coverImage.src = mediaItem.artwork;
- coverImage.style.display = 'block'; // 显示图片
+ coverImage.style.display = 'block';
} else {
coverPlaceholder.textContent = '暂无封面';
- coverImage.style.display = 'none'; // 隐藏图片,显示默认文本
+ coverImage.style.display = 'none';
}
// 设置音频源
const audio = document.getElementById('audioPlayer');
audio.src = playUrl;
+
// 重置播放按钮图标
document.getElementById('playIcon').style.display = 'none';
document.getElementById('pauseIcon').style.display = 'block';
- // 获取并显示歌词
- await fetchAndDisplayLyrics(mediaItem);
+
+ // 移动端不显示歌词
+ if (!isMobile()) {
+ // 获取并显示歌词
+ await fetchAndDisplayLyrics(mediaItem);
+ } else {
+ // 移动端隐藏歌词容器
+ document.getElementById('lyricContainer').style.display = 'none';
+ }
+
+ // 监听元数据加载完成,获取时长信息
+ audio.onloadedmetadata = function() {
+ console.log('音频时长:', audio.duration + '秒');
+ // 可以在这里更新UI显示时长信息
+ };
// 开始播放
- audio.play();
+ await audio.play();
} else {
- alert('插件获取播放链接失败: ');
+ alert('插件获取播放链接失败');
}
} catch (error) {
alert('获取播放链接出错: ' + error.message);
@@ -747,6 +1161,7 @@
}
+
// 关闭播放器
function closePlayer() {
const player = document.getElementById('musicPlayer');
@@ -759,6 +1174,7 @@
document.getElementById('lyricContent').innerHTML = '';
currentLyrics = [];
lyricLines = [];
+ songList = [];
// 移除音频时间更新监听器
audio.removeEventListener('timeupdate', updateLyricHighlight);
@@ -777,18 +1193,34 @@
return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
}
- // 回车键搜索
- document.getElementById('searchInput').addEventListener('keypress', function(e) {
- if (e.key === 'Enter') {
+ // 综合处理多种事件
+ const searchInput = document.getElementById('searchInput');
+ const handleSearch = (e) => {
+ if (e.key === 'Enter' || e.type === 'input') {
+ e.preventDefault();
searchMusic();
+ // 确保键盘关闭
+ searchInput.blur();
}
- });
+ };
+
+ searchInput.addEventListener('keydown', handleSearch);
+ searchInput.addEventListener('keypress', handleSearch);
+
+ // 检查是否为移动端
+ function isMobile() {
+ return window.innerWidth <= 768;
+ }
// 获取并显示歌词
async function fetchAndDisplayLyrics(mediaItem) {
+ // 移动端不加载歌词
+ if (isMobile()) {
+ return;
+ }
try {
let lrcText
- if (mediaItem && mediaItem.isOpenAPI) {//在线接口
+ if (mediaItem && isOpenAPI) {//在线接口
// 调用OpenApi接口 GET获取歌词
const response = await fetch(mediaItem.lrc, {
method: 'GET',
@@ -934,6 +1366,86 @@
}
}
+ // 添加播放队列和状态管理
+ let playQueue = []; // 播放队列
+ let currentPlayIndex = 0; // 当前播放索引
+
+ // Web 端播放全部功能
+ async function webPlayAllMusic() {
+ if (songList.length === 0) {
+ alert('请先搜索歌曲!');
+ return;
+ }
+ // 设置播放队列
+ playQueue = [...songList];
+ currentPlayIndex = -1;
+ // 开始播放第一首
+ await playNextInWeb();
+ }
+
+ // 播放上一曲
+ async function playPrevInWeb() {
+ if (playQueue.length === 0) {
+ return;
+ }
+
+ currentPlayIndex--;
+ if (currentPlayIndex < 0) {
+ currentPlayIndex = playQueue.length - 1; // 循环到最后一首
+ }
+
+ const currentSong = playQueue[currentPlayIndex];
+
+ try {
+ await webPlayMusic(currentSong);
+ const audio = document.getElementById('audioPlayer');
+ audio.onended = handleTrackEnd;
+ } catch (error) {
+ console.error('播放失败:', error);
+ currentPlayIndex++;
+ if (currentPlayIndex >= playQueue.length) currentPlayIndex = 0;
+ }
+ }
+
+ // 播放下一曲函数,添加边界检查
+ async function playNextInWeb() {
+ if (playQueue.length === 0) {
+ return;
+ }
+
+ currentPlayIndex++;
+ if (currentPlayIndex >= playQueue.length) {
+ currentPlayIndex = 0; // 循环播放
+ }
+
+ const currentSong = playQueue[currentPlayIndex];
+
+ try {
+ await webPlayMusic(currentSong);
+ const audio = document.getElementById('audioPlayer');
+ audio.onended = handleTrackEnd;
+ } catch (error) {
+ console.error('播放失败:', error);
+ currentPlayIndex++;
+ if (currentPlayIndex >= playQueue.length) currentPlayIndex = -1;
+ await playNextInWeb();
+ }
+ }
+
+ // 处理单曲播放结束
+ function handleTrackEnd() {
+ currentPlayIndex++;
+ if (currentPlayIndex < playQueue.length) {
+ playNextInWeb();
+ } else {
+ console.log('所有歌曲播放完毕');
+ // 可选:重置播放器或显示播放完成提示
+ currentPlayIndex = 0;
+ }
+ }
+
+
+