fix: 修复开启继续播放时歌曲播放不完整问题 (#177)
This commit is contained in:
parent
2e53f20d80
commit
dcbf4330be
@ -142,7 +142,7 @@ var vConsole = new window.VConsole();
|
||||
<option value="false" selected>false</option>
|
||||
</select>
|
||||
|
||||
<label for="continue_play">启用继续播放(可能导致兼容性问题及歌曲无法完整播放):</label>
|
||||
<label for="continue_play">启用继续播放(可能导致兼容性问题):</label>
|
||||
<select id="continue_play">
|
||||
<option value="true">true</option>
|
||||
<option value="false" selected>false</option>
|
||||
|
@ -536,6 +536,11 @@ class XiaoMusic:
|
||||
query = new_record.get("query", "").strip()
|
||||
did = new_record.get("did", "").strip()
|
||||
await self.do_check_cmd(did, query, False)
|
||||
answers = new_record.get("answers", [{}])
|
||||
if answers:
|
||||
answer = answers[0].get("tts", {}).get("text", "").strip()
|
||||
await self.reset_timer_when_answer(len(answer), did)
|
||||
self.log.debug(f"query:{query} did:{did} answer:{answer}")
|
||||
|
||||
# 匹配命令
|
||||
async def do_check_cmd(self, did="", query="", ctrl_panel=True, **kwargs):
|
||||
@ -552,6 +557,10 @@ class XiaoMusic:
|
||||
except Exception as e:
|
||||
self.log.exception(f"Execption {e}")
|
||||
|
||||
# 重置计时器
|
||||
async def reset_timer_when_answer(self, answer_length, did):
|
||||
await self.devices[did].reset_timer_when_answer(answer_length)
|
||||
|
||||
def append_running_task(self, task):
|
||||
self.running_task.append(task)
|
||||
|
||||
@ -938,6 +947,7 @@ class XiaoMusicDevice:
|
||||
# 播放进度
|
||||
self._start_time = 0
|
||||
self._duration = 0
|
||||
self._paused_time = 0
|
||||
|
||||
# 关机定时器
|
||||
self._stop_timer = None
|
||||
@ -948,9 +958,9 @@ class XiaoMusicDevice:
|
||||
return self.device.cur_music
|
||||
|
||||
def get_offset_duration(self):
|
||||
if not self._playing:
|
||||
if not self.isplaying():
|
||||
return -1, -1
|
||||
offset = time.time() - self._start_time
|
||||
offset = time.time() - self._start_time - self._paused_time
|
||||
duration = self._duration
|
||||
return offset, duration
|
||||
|
||||
@ -1084,6 +1094,7 @@ class XiaoMusicDevice:
|
||||
sec = sec + self.config.delay_sec
|
||||
self._start_time = time.time()
|
||||
self._duration = sec
|
||||
self._paused_time = 0
|
||||
await self.set_next_music_timeout(sec)
|
||||
self.xiaomusic.save_cur_config()
|
||||
|
||||
@ -1335,6 +1346,19 @@ class XiaoMusicDevice:
|
||||
self.log.error(f"_get_audio_id {e}")
|
||||
return str(audio_id)
|
||||
|
||||
# 重置计时器
|
||||
async def reset_timer_when_answer(self, answer_length):
|
||||
if not (self.isplaying() and self.config.continue_play):
|
||||
return
|
||||
pause_time = answer_length / 5 + 1
|
||||
offset, duration = self.get_offset_duration()
|
||||
self._paused_time += pause_time
|
||||
new_time = duration - offset + pause_time
|
||||
await self.set_next_music_timeout(new_time)
|
||||
self.log.info(
|
||||
f"reset_timer 延长定时器. answer_length:{answer_length} pause_time:{pause_time}"
|
||||
)
|
||||
|
||||
# 设置下一首歌曲的播放定时器
|
||||
async def set_next_music_timeout(self, sec):
|
||||
self.cancel_next_timer()
|
||||
|
Loading…
Reference in New Issue
Block a user