1
0
mirror of https://github.com/hanxi/xiaomusic.git synced 2026-03-18 08:43:17 +08:00

fix: 修复异常未加载插件无法禁用bug (#666)

* 更新版本标识

* 修复开放接口部分音源链接不能直接播放bug

* 修复异常未加载插件无法禁用bug

* 更新版本标识
This commit is contained in:
boluofan
2026-01-12 09:05:58 +08:00
committed by GitHub
parent 71177297b7
commit 9bdf78277e
5 changed files with 107 additions and 38 deletions

View File

@@ -1020,48 +1020,48 @@ class JSPluginManager:
# 禁用插件
def disable_plugin(self, plugin_name: str) -> bool:
# 读取、修改 插件配置json文件① 将plugins_info属性中对于的插件状态改为禁用、2将 enabled_plugins中对应插件移除
if plugin_name in self.plugins:
self.plugins[plugin_name]["enabled"] = False
# 读取、修改 插件配置json文件① 将plugins_info属性中对于的插件状态改为禁用、2将 enabled_plugins中对应插件移除
# 同步更新配置文件
try:
# 使用自定义的配置文件路径
config_file_path = self.plugins_config_path
# 同步更新配置文件
try:
# 使用自定义的配置文件路径
config_file_path = self.plugins_config_path
# 读取现有配置
if os.path.exists(config_file_path):
with open(config_file_path, encoding="utf-8") as f:
config_data = json.load(f)
# 读取现有配置
if os.path.exists(config_file_path):
with open(config_file_path, encoding="utf-8") as f:
config_data = json.load(f)
# 更新plugins_info中对应插件的状态
for plugin_info in config_data.get("plugins_info", []):
if plugin_info.get("name") == plugin_name:
plugin_info["enabled"] = False
# 更新plugins_info中对应插件的状态
for plugin_info in config_data.get("plugins_info", []):
if plugin_info.get("name") == plugin_name:
plugin_info["enabled"] = False
# 添加到enabled_plugins中如果不存在
if "enabled_plugins" not in config_data:
config_data["enabled_plugins"] = []
# 添加到enabled_plugins中如果不存在
if "enabled_plugins" not in config_data:
config_data["enabled_plugins"] = []
if plugin_name in config_data["enabled_plugins"]:
# 移除对应的插件名
config_data["enabled_plugins"].remove(plugin_name)
if plugin_name in config_data["enabled_plugins"]:
# 移除对应的插件名
config_data["enabled_plugins"].remove(plugin_name)
# 写回配置文件
with open(config_file_path, "w", encoding="utf-8") as f:
json.dump(config_data, f, ensure_ascii=False, indent=2)
# 清空缓存:
self._invalidate_config_cache()
self.log.info(
f"Plugin config updated for enabled plugin {plugin_name}"
)
# 更新插件引擎
self.reload_plugins()
except Exception as e:
self.log.error(
f"Failed to update plugin config when enabling {plugin_name}: {e}"
# 写回配置文件
with open(config_file_path, "w", encoding="utf-8") as f:
json.dump(config_data, f, ensure_ascii=False, indent=2)
# 清空缓存:
self._invalidate_config_cache()
self.log.info(
f"Plugin config updated for enabled plugin {plugin_name}"
)
return True
return False
# 更新插件引擎
self.reload_plugins()
except Exception as e:
self.log.error(
f"Failed to update plugin config when enabling {plugin_name}: {e}"
)
return False
return True
# 卸载插件
def uninstall_plugin(self, plugin_name: str) -> bool:

View File

@@ -193,8 +193,12 @@ class MusicUrlHandler:
# 默认使用 未经过【网络歌曲代理】的连接,如不存在说明 未启用【网络歌曲代理】使用proxy_url
request_url = origin_url if origin_url else proxy_url
source_url = await self.get_play_url(request_url)
out_url = source_url
# 开放接口中部分音源的链接不是直接可播放的MP3链接/**.mp3?guid=**&vkey=**&uin=**),还需要进一步提取
if "?" in source_url and "&" in source_url:
out_url = self._get_proxy_url(source_url)
sec = await self._get_online_music_duration(name, source_url)
return sec, source_url
return sec, out_url
async def _get_web_music_duration(self, name, url, origin_url):
"""获取网络音乐时长

View File

@@ -0,0 +1,6 @@
// config.js
window.appConfig = {
// TODO 版本号
version: "1.0.4",
// 其他配置项可继续添加
};

View File

@@ -4,6 +4,8 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no">
<title>在线音乐搜索</title>
<!-- ... 公共配置 ... -->
<script src="./config.js"></script>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
@@ -21,12 +23,27 @@
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
overflow: hidden;
}
.version-info {
position: absolute;
top: 10px;
left: 20px;
color: white;
font-size: 14px;
background: rgba(255, 255, 255, 0.2);
padding: 4px 8px;
border-radius: 4px;
z-index: 10;
}
/* 调整 header 内容的 padding避免与版本信息重叠 */
.header {
background: #31c27c;
color: white;
padding: 20px;
padding: 20px 20px 20px 60px; /* 左边增加留白 */
text-align: center;
position: relative;
}
.search-section {
padding: 20px;
border-bottom: 1px solid #eee;
@@ -731,6 +748,9 @@
<div class="container">
<div class="header">
<h1>在线音乐搜索</h1>
<div class="version-info">
<span id="versionSpan"></span>
</div>
<p>通过 MusicFree音源插件、开放音乐接口 搜索在线音乐</p>
<!-- 顶部居中按钮 -->
<div class="header-buttons">
@@ -851,6 +871,14 @@
});
// 页面加载时执行
document.addEventListener('DOMContentLoaded', function() {
// 获取版本号
if (window.appConfig && window.appConfig.version) {
const versionSpan = document.getElementById('versionSpan');
if (versionSpan) {
versionSpan.textContent = `v${window.appConfig.version}`;
}
}
//加载插件
loadPlugins();
// 绑定搜索按钮事件
document.getElementById('searchBtn').addEventListener('click', searchMusic);

View File

@@ -4,6 +4,8 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>在线搜索配置</title>
<!-- ... 公共配置 ... -->
<script src="./config.js"></script>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
@@ -21,12 +23,27 @@
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
overflow: hidden;
}
.version-info {
position: absolute;
top: 10px;
left: 20px;
color: white;
font-size: 14px;
background: rgba(255, 255, 255, 0.2);
padding: 4px 8px;
border-radius: 4px;
z-index: 10;
}
/* 调整 header 内容的 padding避免与版本信息重叠 */
.header {
background: #31c27c;
color: white;
padding: 20px;
padding: 20px 20px 20px 60px; /* 左边增加留白 */
text-align: center;
position: relative;
}
.loading {
text-align: center;
padding: 40px;
@@ -267,6 +284,9 @@
<div class="container">
<div class="header">
<h1>插件&接口设置</h1>
<div class="version-info">
<span id="versionSpan"></span>
</div>
<p>管理您的插件和在线接口</p>
<!-- 顶部居中按钮 -->
<div class="header-buttons">
@@ -325,9 +345,20 @@
<script>
// 页面加载时获取插件列表
window.onload = function() {
};
// 页面加载时执行
document.addEventListener('DOMContentLoaded', function() {
// 获取版本号
if (window.appConfig && window.appConfig.version) {
const versionSpan = document.getElementById('versionSpan');
if (versionSpan) {
versionSpan.textContent = `v${window.appConfig.version}`;
}
}
//加载插件
loadPlugins();
loadOpenApiConfig();
};
});
/*============================开放接口函数=================================*/
// 加载 OpenAPI 配置
async function loadOpenApiConfig() {