feat: 设置播放类型支持配置语音提示词,定时任务支持设置播放类型

This commit is contained in:
涵曦 2024-11-26 23:18:25 +08:00
parent ca2ddcd89c
commit 0bc4bc8b13
5 changed files with 48 additions and 13 deletions

View File

@ -6,6 +6,11 @@ import os
from dataclasses import asdict, dataclass, field
from typing import get_type_hints
from xiaomusic.const import (
PLAY_TYPE_ALL,
PLAY_TYPE_ONE,
PLAY_TYPE_RND,
)
from xiaomusic.utils import validate_proxy
@ -161,6 +166,15 @@ class Config:
get_ask_by_mina: bool = (
os.getenv("XIAOMUSIC_GET_ASK_BY_MINA", "false").lower() == "true"
)
play_type_one_tts_msg: str = os.getenv(
"XIAOMUSIC_PLAY_TYPE_ONE_TTS_MSG", "已经设置为单曲循环"
)
play_type_all_tts_msg: str = os.getenv(
"XIAOMUSIC_PLAY_TYPE_ALL_TTS_MSG", "已经设置为全部循环"
)
play_type_rnd_tts_msg: str = os.getenv(
"XIAOMUSIC_PLAY_TYPE_RND_TTS_MSG", "已经设置为随机播放"
)
def append_keyword(self, keys, action):
for key in keys.split(","):
@ -280,3 +294,12 @@ class Config:
os.makedirs(self.conf_path)
cookies_path = os.path.join(self.conf_path, "yt-dlp-cookie.txt")
return cookies_path
def get_play_type_tts(self, play_type):
if play_type == PLAY_TYPE_ONE:
return self.play_type_one_tts_msg
if play_type == PLAY_TYPE_ALL:
return self.play_type_all_tts_msg
if play_type == PLAY_TYPE_RND:
return self.play_type_rnd_tts_msg
return ""

View File

@ -14,12 +14,6 @@ PLAY_TYPE_ONE = 0 # 单曲循环
PLAY_TYPE_ALL = 1 # 全部循环
PLAY_TYPE_RND = 2 # 随机播放
PLAY_TYPE_TTS = {
PLAY_TYPE_ONE: "已经设置为单曲循环",
PLAY_TYPE_ALL: "已经设置为全部循环",
PLAY_TYPE_RND: "已经设置为随机播放",
}
# 需要采用 mina 获取对话记录的设备型号
GET_ASK_BY_MINA = {
"M01",

View File

@ -63,6 +63,14 @@ class Crontab:
self.add_job(expression, job)
# 设置播放类型任务
def add_job_set_play_type(self, expression, xiaomusic, did, arg1, **kwargs):
async def job():
play_type = int(arg1)
await xiaomusic.set_play_type(did, play_type, False)
self.add_job(expression, job)
def add_job_cron(self, xiaomusic, cron):
expression = cron["expression"] # cron 计划格式
name = cron["name"] # stop, play, play_music_list, tts

View File

@ -170,6 +170,13 @@ var vConsole = new window.VConsole();
<label for="stop_tts_msg">停止提示音:</label>
<input id="stop_tts_msg" type="text" value="收到,再见"></input>
<label for="play_type_one_tts_msg">单曲循环提示音:</label>
<input id="play_type_one_tts_msg" type="text" value="已经设置为单曲循环"></input>
<label for="play_type_all_tts_msg">全部循环提示音:</label>
<input id="play_type_all_tts_msg" type="text" value="已经设置为全部循环"></input>
<label for="play_type_rnd_tts_msg">随机播放提示音:</label>
<input id="play_type_rnd_tts_msg" type="text" value="已经设置为随机播放"></input>
<label for="keywords_playlocal">播放本地歌曲口令:</label>
<input id="keywords_playlocal" type="text" value="播放本地歌曲,本地播放歌曲"></input>
<label for="keywords_play">播放歌曲口令:</label>

View File

@ -31,7 +31,6 @@ from xiaomusic.const import (
PLAY_TYPE_ALL,
PLAY_TYPE_ONE,
PLAY_TYPE_RND,
PLAY_TYPE_TTS,
SUPPORT_MUSIC_TYPE,
)
from xiaomusic.crontab import Crontab
@ -885,15 +884,18 @@ class XiaoMusic:
# 设置为单曲循环
async def set_play_type_one(self, did="", **kwargs):
await self.devices[did].set_play_type(PLAY_TYPE_ONE)
await self.set_play_type(did, PLAY_TYPE_ONE)
# 设置为全部循环
async def set_play_type_all(self, did="", **kwargs):
await self.devices[did].set_play_type(PLAY_TYPE_ALL)
await self.set_play_type(did, PLAY_TYPE_ALL)
# 设置为随机播放
async def set_random_play(self, did="", **kwargs):
await self.devices[did].set_play_type(PLAY_TYPE_RND)
await self.set_play_type(did, PLAY_TYPE_RND)
async def set_play_type(self, did="", play_type=PLAY_TYPE_RND, dotts=True):
await self.devices[did].set_play_type(play_type, dotts)
# 设置为刷新列表
async def gen_music_list(self, **kwargs):
@ -1758,11 +1760,12 @@ class XiaoMusicDevice:
self.log.info("get_volume. volume:%d", volume)
return volume
async def set_play_type(self, play_type):
async def set_play_type(self, play_type, dotts=True):
self.device.play_type = play_type
self.xiaomusic.save_cur_config()
tts = PLAY_TYPE_TTS[play_type]
await self.do_tts(tts)
if dotts:
tts = self.config.get_play_type_tts(play_type)
await self.do_tts(tts)
self.update_playlist()
async def play_music_list(self, list_name, music_name):