95 lines
2.1 KiB
TypeScript
95 lines
2.1 KiB
TypeScript
/**
|
|
* 后台任务管理模块 (Deno 版本)
|
|
* 负责定期获取音乐状态和歌词更新
|
|
*/
|
|
|
|
import { ConnectionManager } from "./websocket_manager.ts";
|
|
import { getMusicStatus, MusicStatus } from "./apple_music.ts";
|
|
import { getLyricsData, LyricsData } from "./lyrics.ts";
|
|
|
|
let backgroundTaskId: number | null = null;
|
|
|
|
/**
|
|
* 启动后台任务
|
|
*/
|
|
export function startBackgroundTask(manager: ConnectionManager): void {
|
|
if (backgroundTaskId) {
|
|
console.log("后台任务已在运行");
|
|
return;
|
|
}
|
|
|
|
console.log("启动后台任务...");
|
|
|
|
backgroundTaskId = setInterval(async () => {
|
|
await updateMusicInfo(manager);
|
|
}, 1000); // 每秒更新一次
|
|
|
|
console.log("后台任务已启动");
|
|
}
|
|
|
|
/**
|
|
* 停止后台任务
|
|
*/
|
|
export function stopBackgroundTask(): void {
|
|
if (backgroundTaskId) {
|
|
clearInterval(backgroundTaskId);
|
|
backgroundTaskId = null;
|
|
console.log("后台任务已停止");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 更新音乐信息并发送给客户端
|
|
*/
|
|
export async function updateMusicInfo(
|
|
manager: ConnectionManager
|
|
): Promise<void> {
|
|
try {
|
|
// 获取音乐状态
|
|
const musicStatus = await getMusicStatus();
|
|
|
|
if (musicStatus.status === "error") {
|
|
console.warn(`获取音乐状态失败: ${musicStatus.error}`);
|
|
return;
|
|
}
|
|
|
|
// 获取歌词数据
|
|
const lyricsData = await getLyricsData(musicStatus);
|
|
|
|
// 合并数据
|
|
const updateData = {
|
|
type: "music_update",
|
|
timestamp: Date.now(),
|
|
music: musicStatus,
|
|
lyrics: lyricsData,
|
|
};
|
|
|
|
// 发送给所有连接的客户端
|
|
manager.broadcast(updateData);
|
|
} catch (error) {
|
|
console.error(`更新音乐信息时出错: ${error}`);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取歌词并发送更新
|
|
*/
|
|
export async function fetchAndUpdateLyrics(
|
|
status: MusicStatus,
|
|
manager: ConnectionManager
|
|
): Promise<void> {
|
|
try {
|
|
const lyricsData = await getLyricsData(status);
|
|
|
|
const updateData = {
|
|
type: "lyrics_update",
|
|
timestamp: Date.now(),
|
|
lyrics: lyricsData,
|
|
};
|
|
|
|
manager.broadcast(updateData);
|
|
} catch (error) {
|
|
console.error(`获取歌词并发送更新时出错: ${error}`);
|
|
}
|
|
}
|