From 12532b48d64ab7728dd816591adf91a0eaf00987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=B5=E6=9B=A6?= Date: Wed, 11 Dec 2024 09:58:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=A1=B9=20ignore=5Ftag=5Fdirs=20=E7=94=A8=E4=BA=8E=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=E8=AF=BB=E5=8F=96=E7=9B=AE=E5=BD=95=E4=B8=8B=E7=9A=84?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E4=BF=A1=E6=81=AF=EF=BC=8C=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E6=8C=82=E8=BD=BD=20alist=20=E7=9B=AE=E5=BD=95=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xiaomusic/config.py | 9 +++++++++ xiaomusic/static/default/setting.html | 3 +++ xiaomusic/static/default_past/setting.html | 3 +++ xiaomusic/utils.py | 12 ++++++++++++ xiaomusic/xiaomusic.py | 8 +++++++- 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/xiaomusic/config.py b/xiaomusic/config.py index 933633f..498ad34 100644 --- a/xiaomusic/config.py +++ b/xiaomusic/config.py @@ -106,6 +106,7 @@ class Config: "play,set_play_type_rnd,playlocal,play_music_list,play_music_list_index,stop_after_minute,stop", ) exclude_dirs: str = os.getenv("XIAOMUSIC_EXCLUDE_DIRS", "@eaDir,tmp") + ignore_tag_dirs: str = os.getenv("XIAOMUSIC_IGNORE_TAG_DIRS", "") music_path_depth: int = int(os.getenv("XIAOMUSIC_MUSIC_PATH_DEPTH", "10")) disable_httpauth: bool = ( os.getenv("XIAOMUSIC_DISABLE_HTTPAUTH", "true").lower() == "true" @@ -330,3 +331,11 @@ class Config: if play_type == PLAY_TYPE_SEQ: return self.play_type_seq_tts_msg return "" + + def get_ignore_tag_dirs(self): + ignore_tag_absolute_dirs = [] + for ignore_tag_dir in self.ignore_tag_dirs.split(","): + if ignore_tag_dir: + ignore_tag_absolute_path = os.path.abspath(ignore_tag_dir) + ignore_tag_absolute_dirs.append(ignore_tag_absolute_path) + return ignore_tag_absolute_dirs diff --git a/xiaomusic/static/default/setting.html b/xiaomusic/static/default/setting.html index 67f3fef..6cfe458 100644 --- a/xiaomusic/static/default/setting.html +++ b/xiaomusic/static/default/setting.html @@ -99,6 +99,9 @@ var vConsole = new window.VConsole(); + + + diff --git a/xiaomusic/static/default_past/setting.html b/xiaomusic/static/default_past/setting.html index 5ab5d05..f7a59a8 100644 --- a/xiaomusic/static/default_past/setting.html +++ b/xiaomusic/static/default_past/setting.html @@ -98,6 +98,9 @@ var vConsole = new window.VConsole(); + + + diff --git a/xiaomusic/utils.py b/xiaomusic/utils.py index 3d969c4..7b38ec9 100644 --- a/xiaomusic/utils.py +++ b/xiaomusic/utils.py @@ -990,3 +990,15 @@ def try_add_access_control_param(config, url): ).geturl() return new_url + + +# 判断文件在不在排除目录列表 +def not_in_dirs(filename, ignore_absolute_dirs): + file_absolute_path = os.path.abspath(filename) + file_dir = os.path.dirname(file_absolute_path) + for ignore_dir in ignore_absolute_dirs: + if file_dir.startswith(ignore_dir): + log.info(f"{file_dir} in {ignore_dir}") + return False # 文件在排除目录中 + + return True # 文件不在排除目录中 diff --git a/xiaomusic/xiaomusic.py b/xiaomusic/xiaomusic.py index ecf026f..6f6be7d 100644 --- a/xiaomusic/xiaomusic.py +++ b/xiaomusic/xiaomusic.py @@ -49,6 +49,7 @@ from xiaomusic.utils import ( get_local_music_duration, get_web_music_duration, list2str, + not_in_dirs, parse_cookie_string, parse_str_to_dict, save_picture_by_base64, @@ -577,6 +578,9 @@ class XiaoMusic: all_music_tags = self.try_load_from_tag_cache() all_music_tags.update(self.all_music_tags) # 保证最新 + + ignore_tag_absolute_dirs = self.config.get_ignore_tag_dirs() + self.log.info(f"ignore_tag_absolute_dirs: {ignore_tag_absolute_dirs}") for name, file_or_url in only_items.items(): start = time.perf_counter() if name not in all_music_tags: @@ -584,7 +588,9 @@ class XiaoMusic: if self.is_web_music(name): # TODO: 网络歌曲获取歌曲额外信息 pass - elif os.path.exists(file_or_url): + elif os.path.exists(file_or_url) and not_in_dirs( + file_or_url, ignore_tag_absolute_dirs + ): all_music_tags[name] = extract_audio_metadata( file_or_url, self.config.picture_cache_path )