全部循环为顺序播放,和随机播放区分开
This commit is contained in:
parent
28797edc7c
commit
d2473ec7e8
@ -64,3 +64,23 @@ def validate_proxy(proxy_str: str) -> bool:
|
|||||||
# 模糊搜索
|
# 模糊搜索
|
||||||
def fuzzyfinder(user_input, collection):
|
def fuzzyfinder(user_input, collection):
|
||||||
return difflib.get_close_matches(user_input, collection, 10, cutoff=0.1)
|
return difflib.get_close_matches(user_input, collection, 10, cutoff=0.1)
|
||||||
|
|
||||||
|
|
||||||
|
# 歌曲排序
|
||||||
|
def custom_sort_key(s):
|
||||||
|
# 使用正则表达式分别提取字符串的数字前缀和数字后缀
|
||||||
|
prefix_match = re.match(r"^(\d+)", s)
|
||||||
|
suffix_match = re.search(r"(\d+)$", s)
|
||||||
|
|
||||||
|
numeric_prefix = int(prefix_match.group(0)) if prefix_match else None
|
||||||
|
numeric_suffix = int(suffix_match.group(0)) if suffix_match else None
|
||||||
|
|
||||||
|
if numeric_prefix is not None:
|
||||||
|
# 如果前缀是数字,先按前缀数字排序,再按整个字符串排序
|
||||||
|
return (0, numeric_prefix, s)
|
||||||
|
elif numeric_suffix is not None:
|
||||||
|
# 如果后缀是数字,先按前缀字符排序,再按后缀数字排序
|
||||||
|
return (1, s[: suffix_match.start()], numeric_suffix)
|
||||||
|
else:
|
||||||
|
# 如果前缀和后缀都不是数字,按字典序排序
|
||||||
|
return (2, s)
|
||||||
|
@ -32,12 +32,14 @@ from xiaomusic.httpserver import StartHTTPServer
|
|||||||
from xiaomusic.utils import (
|
from xiaomusic.utils import (
|
||||||
fuzzyfinder,
|
fuzzyfinder,
|
||||||
parse_cookie_string,
|
parse_cookie_string,
|
||||||
|
custom_sort_key,
|
||||||
)
|
)
|
||||||
|
|
||||||
EOF = object()
|
EOF = object()
|
||||||
|
|
||||||
PLAY_TYPE_ONE = 0 # 单曲循环
|
PLAY_TYPE_ONE = 0 # 单曲循环
|
||||||
PLAY_TYPE_ALL = 1 # 全部循环
|
PLAY_TYPE_ALL = 1 # 全部循环
|
||||||
|
PLAY_TYPE_RND = 2 # 随机播放
|
||||||
|
|
||||||
|
|
||||||
class XiaoMusic:
|
class XiaoMusic:
|
||||||
@ -67,7 +69,7 @@ class XiaoMusic:
|
|||||||
# 下载对象
|
# 下载对象
|
||||||
self.download_proc = None
|
self.download_proc = None
|
||||||
# 单曲循环,全部循环
|
# 单曲循环,全部循环
|
||||||
self.play_type = PLAY_TYPE_ALL
|
self.play_type = PLAY_TYPE_RND
|
||||||
self.cur_music = ""
|
self.cur_music = ""
|
||||||
self._next_timer = None
|
self._next_timer = None
|
||||||
self._timeout = 0
|
self._timeout = 0
|
||||||
@ -377,7 +379,7 @@ class XiaoMusic:
|
|||||||
pass
|
pass
|
||||||
self._play_list = list(self._all_music.keys())
|
self._play_list = list(self._all_music.keys())
|
||||||
self._cur_play_list = "全部"
|
self._cur_play_list = "全部"
|
||||||
random.shuffle(self._play_list)
|
self._gen_play_list()
|
||||||
self.log.debug(self._all_music)
|
self.log.debug(self._all_music)
|
||||||
|
|
||||||
self._music_list = {}
|
self._music_list = {}
|
||||||
@ -387,6 +389,13 @@ class XiaoMusic:
|
|||||||
self.log.debug("dir_name:%s, list:%s", dir_name, self._music_list[dir_name])
|
self.log.debug("dir_name:%s, list:%s", dir_name, self._music_list[dir_name])
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# 歌曲排序或者打乱顺序
|
||||||
|
def _gen_play_list(self):
|
||||||
|
if self.play_type == PLAY_TYPE_RND:
|
||||||
|
self._play_list.sort(key=custom_sort_key)
|
||||||
|
else:
|
||||||
|
random.shuffle(self._play_list)
|
||||||
|
|
||||||
# 把下载的音乐加入播放列表
|
# 把下载的音乐加入播放列表
|
||||||
def add_download_music(self, name):
|
def add_download_music(self, name):
|
||||||
self._all_music[name] = os.path.join(self.music_path, f"{name}.mp3")
|
self._all_music[name] = os.path.join(self.music_path, f"{name}.mp3")
|
||||||
@ -579,7 +588,11 @@ class XiaoMusic:
|
|||||||
self.log.info("下一首")
|
self.log.info("下一首")
|
||||||
name = self.cur_music
|
name = self.cur_music
|
||||||
self.log.debug("play_next. name:%s, cur_music:%s", name, self.cur_music)
|
self.log.debug("play_next. name:%s, cur_music:%s", name, self.cur_music)
|
||||||
if self.play_type == PLAY_TYPE_ALL or name == "":
|
if (
|
||||||
|
self.play_type == PLAY_TYPE_ALL
|
||||||
|
or self.play_type == PLAY_TYPE_RND
|
||||||
|
or name == ""
|
||||||
|
):
|
||||||
name = self.get_next_music()
|
name = self.get_next_music()
|
||||||
if name == "":
|
if name == "":
|
||||||
await self.do_tts("本地没有歌曲")
|
await self.do_tts("本地没有歌曲")
|
||||||
@ -594,12 +607,13 @@ class XiaoMusic:
|
|||||||
# 全部循环
|
# 全部循环
|
||||||
async def set_play_type_all(self, **kwargs):
|
async def set_play_type_all(self, **kwargs):
|
||||||
self.play_type = PLAY_TYPE_ALL
|
self.play_type = PLAY_TYPE_ALL
|
||||||
|
self._gen_play_list()
|
||||||
await self.do_tts("已经设置为全部循环")
|
await self.do_tts("已经设置为全部循环")
|
||||||
|
|
||||||
# 随机播放
|
# 随机播放
|
||||||
async def random_play(self, **kwargs):
|
async def random_play(self, **kwargs):
|
||||||
self.play_type = PLAY_TYPE_ALL
|
self.play_type = PLAY_TYPE_RND
|
||||||
random.shuffle(self._play_list)
|
self._gen_play_list()
|
||||||
await self.do_tts("已经设置为随机播放")
|
await self.do_tts("已经设置为随机播放")
|
||||||
|
|
||||||
# 刷新列表
|
# 刷新列表
|
||||||
@ -630,7 +644,7 @@ class XiaoMusic:
|
|||||||
return
|
return
|
||||||
self._play_list = self._music_list[list_name]
|
self._play_list = self._music_list[list_name]
|
||||||
self._cur_play_list = list_name
|
self._cur_play_list = list_name
|
||||||
random.shuffle(self._play_list)
|
self._gen_play_list()
|
||||||
self.log.info(f"开始播放列表{list_name}")
|
self.log.info(f"开始播放列表{list_name}")
|
||||||
|
|
||||||
music_name = ""
|
music_name = ""
|
||||||
|
Loading…
Reference in New Issue
Block a user