feat: 优化设置页面,新增更多配置项
This commit is contained in:
parent
3754970c84
commit
485a42a9a0
@ -4,6 +4,7 @@ import argparse
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
from typing import get_type_hints
|
||||||
|
|
||||||
from xiaomusic.utils import validate_proxy
|
from xiaomusic.utils import validate_proxy
|
||||||
|
|
||||||
@ -58,7 +59,7 @@ class Config:
|
|||||||
port: int = int(os.getenv("XIAOMUSIC_PORT", "8090"))
|
port: int = int(os.getenv("XIAOMUSIC_PORT", "8090"))
|
||||||
proxy: str | None = os.getenv("XIAOMUSIC_PROXY", None)
|
proxy: str | None = os.getenv("XIAOMUSIC_PROXY", None)
|
||||||
search_prefix: str = os.getenv(
|
search_prefix: str = os.getenv(
|
||||||
"XIAOMUSIC_SEARCH", "ytsearch:"
|
"XIAOMUSIC_SEARCH", "bilisearch:"
|
||||||
) # "bilisearch:" or "ytsearch:"
|
) # "bilisearch:" or "ytsearch:"
|
||||||
ffmpeg_location: str = os.getenv("XIAOMUSIC_FFMPEG_LOCATION", "./ffmpeg/bin")
|
ffmpeg_location: str = os.getenv("XIAOMUSIC_FFMPEG_LOCATION", "./ffmpeg/bin")
|
||||||
active_cmd: str = os.getenv(
|
active_cmd: str = os.getenv(
|
||||||
@ -137,3 +138,34 @@ class Config:
|
|||||||
if value is not None and key in cls.__dataclass_fields__:
|
if value is not None and key in cls.__dataclass_fields__:
|
||||||
result[key] = value
|
result[key] = value
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def update_config(self, data):
|
||||||
|
# 获取类型提示
|
||||||
|
type_hints = get_type_hints(self)
|
||||||
|
|
||||||
|
for k, v in data.items():
|
||||||
|
if v and k in type_hints:
|
||||||
|
# 获取字段的类型
|
||||||
|
expected_type = type_hints[k]
|
||||||
|
|
||||||
|
# 根据期望的类型进行转换
|
||||||
|
if isinstance(v, expected_type):
|
||||||
|
# 如果v已经是正确的类型,则直接赋值
|
||||||
|
setattr(self, k, v)
|
||||||
|
else:
|
||||||
|
# 尝试转换类型
|
||||||
|
try:
|
||||||
|
# 特殊情况处理(例如对布尔值的转换)
|
||||||
|
if expected_type is bool:
|
||||||
|
converted_value = False
|
||||||
|
if v and v.lower() == "true":
|
||||||
|
converted_value = True
|
||||||
|
else:
|
||||||
|
# 使用期望类型的构造函数进行转换
|
||||||
|
converted_value = expected_type(v)
|
||||||
|
except (ValueError, TypeError) as e:
|
||||||
|
print(f"Error converting {v} to {expected_type}: {e}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
# 设置转换后的值
|
||||||
|
setattr(self, k, converted_value)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import os
|
import os
|
||||||
|
from dataclasses import asdict
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
|
||||||
from flask import Flask, request, send_file, send_from_directory
|
from flask import Flask, request, send_file, send_from_directory
|
||||||
@ -10,6 +11,7 @@ from xiaomusic import (
|
|||||||
__version__,
|
__version__,
|
||||||
)
|
)
|
||||||
from xiaomusic.utils import (
|
from xiaomusic.utils import (
|
||||||
|
deepcopy_data_no_sensitive_info,
|
||||||
downloadfile,
|
downloadfile,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -98,19 +100,11 @@ async def do_cmd():
|
|||||||
@auth.login_required
|
@auth.login_required
|
||||||
async def getsetting():
|
async def getsetting():
|
||||||
config = xiaomusic.getconfig()
|
config = xiaomusic.getconfig()
|
||||||
|
data = asdict(config)
|
||||||
alldevices = await xiaomusic.call_main_thread_function(xiaomusic.getalldevices)
|
alldevices = await xiaomusic.call_main_thread_function(xiaomusic.getalldevices)
|
||||||
log.info(alldevices)
|
log.info(f"getsetting alldevices: {alldevices}")
|
||||||
data = {
|
data["mi_did_list"] = alldevices["did_list"]
|
||||||
"mi_did": config.mi_did,
|
data["mi_hardware_list"] = alldevices["hardware_list"]
|
||||||
"mi_did_list": alldevices["did_list"],
|
|
||||||
"mi_hardware": config.hardware,
|
|
||||||
"mi_hardware_list": alldevices["hardware_list"],
|
|
||||||
"xiaomusic_search": config.search_prefix,
|
|
||||||
"xiaomusic_proxy": config.proxy,
|
|
||||||
"xiaomusic_music_list_url": config.music_list_url,
|
|
||||||
"xiaomusic_music_list_json": config.music_list_json,
|
|
||||||
}
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
@ -118,7 +112,8 @@ async def getsetting():
|
|||||||
@auth.login_required
|
@auth.login_required
|
||||||
async def savesetting():
|
async def savesetting():
|
||||||
data = request.get_json()
|
data = request.get_json()
|
||||||
log.info(data)
|
debug_data = deepcopy_data_no_sensitive_info(data)
|
||||||
|
log.info(f"saveconfig: {debug_data}")
|
||||||
await xiaomusic.saveconfig(data)
|
await xiaomusic.saveconfig(data)
|
||||||
return "save success"
|
return "save success"
|
||||||
|
|
||||||
|
@ -14,22 +14,103 @@
|
|||||||
</a>)
|
</a>)
|
||||||
</h2>
|
</h2>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="rows">
|
<div id="setting" class="rows">
|
||||||
<label for="mi_did">MI_DID:</label>
|
<label for="account">*小米账号:</label>
|
||||||
|
<input id="account" type="text" placeholder="填写小米登录账号"></input>
|
||||||
|
|
||||||
|
<label for="password">*小米密码:</label>
|
||||||
|
<input id="password" type="password" placeholder="填写小米登录密码"></input>
|
||||||
|
|
||||||
|
<label for="mi_did">*MI_DID:</label>
|
||||||
<select id="mi_did"></select>
|
<select id="mi_did"></select>
|
||||||
<label for="mi_hardware">MI_HARDWARE(型号):</label>
|
|
||||||
<select id="mi_hardware" disabled></select>
|
<label for="hardware">*MI_HARDWARE(型号):</label>
|
||||||
<label for="xiaomusic_search">XIAOMUSIC_SEARCH:</label>
|
<select id="hardware" disabled></select>
|
||||||
<select id="xiaomusic_search">
|
|
||||||
<option value="ytsearch:">ytsearch:</option>
|
<label for="hostname">*XIAOMUSIC_HOSTNAME(IP或域名):</label>
|
||||||
<option value="bilisearch:">bilisearch:</option>
|
<input id="hostname" type="text"></input>
|
||||||
|
|
||||||
|
<label for="verbose">是否开启调试日志:</label>
|
||||||
|
<select id="verbose">
|
||||||
|
<option value="true" selected>true</option>
|
||||||
|
<option value="false">false</option>
|
||||||
</select>
|
</select>
|
||||||
<label for="xiaomusic_proxy">XIAOMUSIC_PROXY(ytsearch需要):</label>
|
|
||||||
<input id="xiaomusic_proxy" type="text" placeholder="http://192.168.2.5:8080"></input>
|
<label for="music_path">音乐目录:</label>
|
||||||
<label for="xiaomusic_music_list_url">歌单地址:</label>
|
<input id="music_path" type="text" value="music"></input>
|
||||||
<input id="xiaomusic_music_list_url" type="text" value="https://gist.githubusercontent.com/hanxi/dda82d964a28f8110f8fba81c3ff8314/raw/example.json"></input>
|
|
||||||
<label for="xiaomusic_music_list_json">歌单内容:</label>
|
<label for="conf_path">配置文件目录:</label>
|
||||||
<textarea id="xiaomusic_music_list_json" type="text"></textarea>
|
<input id="conf_path" type="text"></input>
|
||||||
|
|
||||||
|
<label for="ffmpeg_location">ffmpeg路径:</label>
|
||||||
|
<input id="ffmpeg_location" type="text" value="./ffmpeg/bin"></input>
|
||||||
|
|
||||||
|
<label for="log_file">ffmpeg路径:</label>
|
||||||
|
<input id="log_file" type="text" value="/tmp/xiaomusic.txt"></input>
|
||||||
|
|
||||||
|
<label for="active_cmd">允许唤醒的命令:</label>
|
||||||
|
<input id="active_cmd" type="text" value="play,random_play,playlocal,play_music_list,stop"></input>
|
||||||
|
|
||||||
|
<label for="exclude_dirs">忽略目录(逗号分割):</label>
|
||||||
|
<input id="exclude_dirs" type="text" value="@eaDir"></input>
|
||||||
|
|
||||||
|
<label for="music_path_depth">目录深度:</label>
|
||||||
|
<input id="music_path_depth" type="number" value="10"></input>
|
||||||
|
|
||||||
|
<label for="search_prefix">XIAOMUSIC_SEARCH(歌曲下载方式):</label>
|
||||||
|
<select id="search_prefix">
|
||||||
|
<option value="bilisearch:">bilisearch:</option>
|
||||||
|
<option value="ytsearch:">ytsearch:</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<label for="proxy">XIAOMUSIC_PROXY(ytsearch需要):</label>
|
||||||
|
<input id="proxy" type="text" placeholder="http://192.168.2.5:8080"></input>
|
||||||
|
|
||||||
|
<label for="disable_httpauth">关闭密码验证:</label>
|
||||||
|
<select id="disable_httpauth">
|
||||||
|
<option value="true" selected>true</option>
|
||||||
|
<option value="false">false</option>
|
||||||
|
</select>
|
||||||
|
<label for="httpauth_username">web控制台账户:</label>
|
||||||
|
<input id="httpauth_username" type="text" value="admin"></input>
|
||||||
|
<label for="httpauth_password">web控制台密码:</label>
|
||||||
|
<input id="httpauth_password" type="password" value="admin"></input>
|
||||||
|
|
||||||
|
<label for="disable_download">关闭下载功能:</label>
|
||||||
|
<select id="disable_download">
|
||||||
|
<option value="true">true</option>
|
||||||
|
<option value="false" selected>false</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<label for="use_music_audio_id">触屏版显示歌曲ID:</label>
|
||||||
|
<input id="use_music_audio_id" type="text" value="1582971365183456177"></input>
|
||||||
|
<label for="use_music_id">触屏版显示歌曲分段ID:</label>
|
||||||
|
<input id="use_music_id" type="text" value="355454500"></input>
|
||||||
|
|
||||||
|
<label for="fuzzy_match_cutoff">模糊匹配阈值(0.1~0.9):</label>
|
||||||
|
<input id="fuzzy_match_cutoff" type="number" value="0.6"></input>
|
||||||
|
|
||||||
|
<label for="enable_fuzzy_match">开启模糊搜索:</label>
|
||||||
|
<select id="enable_fuzzy_match">
|
||||||
|
<option value="true" selected>true</option>
|
||||||
|
<option value="false">false</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<label for="stop_tts_msg">停止提示音:</label>
|
||||||
|
<input id="stop_tts_msg" type="text" value="收到,再见"></input>
|
||||||
|
<label for="keywords_playlocal">播放本地歌曲口令:</label>
|
||||||
|
<input id="keywords_playlocal" type="text" value="播放本地歌曲,本地播放歌曲"></input>
|
||||||
|
<label for="keywords_play">播放歌曲口令:</label>
|
||||||
|
<input id="keywords_play" type="text" value="播放歌曲,放歌曲"></input>
|
||||||
|
<label for="keywords_stop">停止口令:</label>
|
||||||
|
<input id="keywords_stop" type="text" value="关机,暂停,停止,停止播放"></input>
|
||||||
|
|
||||||
|
<label for="music_list_url">歌单地址:</label>
|
||||||
|
<input id="music_list_url" type="text" value="https://gist.githubusercontent.com/hanxi/dda82d964a28f8110f8fba81c3ff8314/raw/example.json"></input>
|
||||||
|
|
||||||
|
<label for="music_list_json">歌单内容:</label>
|
||||||
|
<textarea id="music_list_json" type="text"></textarea>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
<button onclick="location.href='/';">返回首页</button>
|
<button onclick="location.href='/';">返回首页</button>
|
||||||
|
@ -5,6 +5,17 @@ $(function(){
|
|||||||
$("#version").text(`${data.version}`);
|
$("#version").text(`${data.version}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 遍历所有的select元素,默认选中只有1个选项的
|
||||||
|
const autoSelectOne = () => {
|
||||||
|
$('select').each(function() {
|
||||||
|
// 如果select元素仅有一个option子元素
|
||||||
|
if ($(this).children('option').length === 1) {
|
||||||
|
// 选中这个option
|
||||||
|
$(this).find('option').prop('selected', true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const updateSelectOptions = (selectId, optionsList, selectedOption) => {
|
const updateSelectOptions = (selectId, optionsList, selectedOption) => {
|
||||||
const select = $(selectId);
|
const select = $(selectId);
|
||||||
select.empty();
|
select.empty();
|
||||||
@ -42,51 +53,37 @@ $(function(){
|
|||||||
// 拉取现有配置
|
// 拉取现有配置
|
||||||
$.get("/getsetting", function(data, status) {
|
$.get("/getsetting", function(data, status) {
|
||||||
console.log(data, status);
|
console.log(data, status);
|
||||||
|
|
||||||
updateSelectOptions("#mi_did", data.mi_did_list, data.mi_did);
|
updateSelectOptions("#mi_did", data.mi_did_list, data.mi_did);
|
||||||
updateSelectOptions("#mi_hardware", data.mi_hardware_list, data.mi_hardware);
|
updateSelectOptions("#hardware", data.mi_hardware_list, data.hardware);
|
||||||
|
|
||||||
// 初始化联动
|
// 初始化联动
|
||||||
linkSelects('#mi_did', data.mi_did_list, '#mi_hardware', data.mi_hardware_list);
|
linkSelects('#mi_did', data.mi_did_list, '#hardware', data.mi_hardware_list);
|
||||||
|
|
||||||
if (data.xiaomusic_search != "") {
|
// 初始化显示
|
||||||
$("#xiaomusic_search").val(data.xiaomusic_search);
|
for (const key in data) {
|
||||||
|
if (data.hasOwnProperty(key) && data[key] != "") {
|
||||||
|
const $element = $("#" + key);
|
||||||
|
if ($element.length) {
|
||||||
|
$element.val(data[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.xiaomusic_proxy != "") {
|
autoSelectOne();
|
||||||
$("#xiaomusic_proxy").val(data.xiaomusic_proxy);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.xiaomusic_music_list_url != "") {
|
|
||||||
$("#xiaomusic_music_list_url").val(data.xiaomusic_music_list_url);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data.xiaomusic_music_list_json != "") {
|
|
||||||
$("#xiaomusic_music_list_json").val(data.xiaomusic_music_list_json);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#save").on("click", () => {
|
$("#save").on("click", () => {
|
||||||
var mi_did = $("#mi_did").val();
|
var setting = $('#setting');
|
||||||
var mi_hardware = $("#mi_hardware").val();
|
var inputs = setting.find('input, select, textarea');
|
||||||
var xiaomusic_search = $("#xiaomusic_search").val();
|
var data = {};
|
||||||
var xiaomusic_proxy = $("#xiaomusic_proxy").val();
|
inputs.each(function() {
|
||||||
var xiaomusic_music_list_url = $("#xiaomusic_music_list_url").val();
|
var id = this.id;
|
||||||
var xiaomusic_music_list_json = $("#xiaomusic_music_list_json").val();
|
if (id) {
|
||||||
console.log("mi_did", mi_did);
|
data[id] = $(this).val();
|
||||||
console.log("mi_hardware", mi_hardware);
|
}
|
||||||
console.log("xiaomusic_search", xiaomusic_search);
|
});
|
||||||
console.log("xiaomusic_proxy", xiaomusic_proxy);
|
console.log(data)
|
||||||
console.log("xiaomusic_music_list_url", xiaomusic_music_list_url);
|
|
||||||
console.log("xiaomusic_music_list_json", xiaomusic_music_list_json);
|
|
||||||
var data = {
|
|
||||||
mi_did: mi_did,
|
|
||||||
mi_hardware: mi_hardware,
|
|
||||||
xiaomusic_search: xiaomusic_search,
|
|
||||||
xiaomusic_proxy: xiaomusic_proxy,
|
|
||||||
xiaomusic_music_list_url: xiaomusic_music_list_url,
|
|
||||||
xiaomusic_music_list_json: xiaomusic_music_list_json,
|
|
||||||
};
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
url: "/savesetting",
|
url: "/savesetting",
|
||||||
@ -102,10 +99,10 @@ $(function(){
|
|||||||
});
|
});
|
||||||
|
|
||||||
$("#get_music_list").on("click", () => {
|
$("#get_music_list").on("click", () => {
|
||||||
var xiaomusic_music_list_url = $("#xiaomusic_music_list_url").val();
|
var music_list_url = $("#music_list_url").val();
|
||||||
console.log("xiaomusic_music_list_url", xiaomusic_music_list_url);
|
console.log("music_list_url", music_list_url);
|
||||||
var data = {
|
var data = {
|
||||||
url: xiaomusic_music_list_url,
|
url: music_list_url,
|
||||||
};
|
};
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
@ -114,7 +111,7 @@ $(function(){
|
|||||||
data: JSON.stringify(data),
|
data: JSON.stringify(data),
|
||||||
success: (res) => {
|
success: (res) => {
|
||||||
if (res.ret == "OK") {
|
if (res.ret == "OK") {
|
||||||
$("#xiaomusic_music_list_json").val(res.content);
|
$("#music_list_json").val(res.content);
|
||||||
} else {
|
} else {
|
||||||
console.log(res);
|
console.log(res);
|
||||||
alert(res.ret);
|
alert(res.ret);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import copy
|
||||||
import difflib
|
import difflib
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
@ -240,3 +241,30 @@ def get_local_music_duration(filename):
|
|||||||
|
|
||||||
def get_random(length):
|
def get_random(length):
|
||||||
return "".join(random.sample(string.ascii_letters + string.digits, length))
|
return "".join(random.sample(string.ascii_letters + string.digits, length))
|
||||||
|
|
||||||
|
|
||||||
|
# 深拷贝把敏感数据设置位*
|
||||||
|
def deepcopy_data_no_sensitive_info(data, fields_to_anonymize=None):
|
||||||
|
if fields_to_anonymize is None:
|
||||||
|
fields_to_anonymize = [
|
||||||
|
"account",
|
||||||
|
"password",
|
||||||
|
"httpauth_username",
|
||||||
|
"httpauth_password",
|
||||||
|
]
|
||||||
|
|
||||||
|
copy_data = copy.deepcopy(data)
|
||||||
|
|
||||||
|
# 检查copy_data是否是字典或具有属性的对象
|
||||||
|
if isinstance(copy_data, dict):
|
||||||
|
# 对字典进行处理
|
||||||
|
for field in fields_to_anonymize:
|
||||||
|
if field in copy_data:
|
||||||
|
copy_data[field] = "******"
|
||||||
|
else:
|
||||||
|
# 对对象进行处理
|
||||||
|
for field in fields_to_anonymize:
|
||||||
|
if hasattr(copy_data, field):
|
||||||
|
setattr(copy_data, field, "******")
|
||||||
|
|
||||||
|
return copy_data
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
import asyncio
|
import asyncio
|
||||||
import copy
|
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
@ -31,6 +30,7 @@ from xiaomusic.const import (
|
|||||||
from xiaomusic.httpserver import StartHTTPServer
|
from xiaomusic.httpserver import StartHTTPServer
|
||||||
from xiaomusic.utils import (
|
from xiaomusic.utils import (
|
||||||
custom_sort_key,
|
custom_sort_key,
|
||||||
|
deepcopy_data_no_sensitive_info,
|
||||||
find_best_match,
|
find_best_match,
|
||||||
fuzzyfinder,
|
fuzzyfinder,
|
||||||
get_local_music_duration,
|
get_local_music_duration,
|
||||||
@ -61,20 +61,6 @@ class XiaoMusic:
|
|||||||
self.new_record_event = asyncio.Event()
|
self.new_record_event = asyncio.Event()
|
||||||
self.queue = queue.Queue()
|
self.queue = queue.Queue()
|
||||||
|
|
||||||
self.music_path = config.music_path
|
|
||||||
self.conf_path = config.conf_path
|
|
||||||
if not self.conf_path:
|
|
||||||
self.conf_path = config.music_path
|
|
||||||
|
|
||||||
self.hostname = config.hostname
|
|
||||||
self.port = config.port
|
|
||||||
self.proxy = config.proxy
|
|
||||||
self.search_prefix = config.search_prefix
|
|
||||||
self.ffmpeg_location = config.ffmpeg_location
|
|
||||||
self.active_cmd = config.active_cmd.split(",")
|
|
||||||
self.exclude_dirs = set(config.exclude_dirs.split(","))
|
|
||||||
self.music_path_depth = config.music_path_depth
|
|
||||||
|
|
||||||
# 下载对象
|
# 下载对象
|
||||||
self.download_proc = None
|
self.download_proc = None
|
||||||
# 单曲循环,全部循环
|
# 单曲循环,全部循环
|
||||||
@ -93,6 +79,9 @@ class XiaoMusic:
|
|||||||
# 关机定时器
|
# 关机定时器
|
||||||
self._stop_timer = None
|
self._stop_timer = None
|
||||||
|
|
||||||
|
# 初始化配置
|
||||||
|
self.init_config()
|
||||||
|
|
||||||
# 初始化日志
|
# 初始化日志
|
||||||
self.setup_logger()
|
self.setup_logger()
|
||||||
|
|
||||||
@ -105,6 +94,24 @@ class XiaoMusic:
|
|||||||
# 启动时初始化获取声音
|
# 启动时初始化获取声音
|
||||||
self.set_last_record("get_volume#")
|
self.set_last_record("get_volume#")
|
||||||
|
|
||||||
|
debug_config = deepcopy_data_no_sensitive_info(self.config)
|
||||||
|
self.log.info(f"Startup OK. {debug_config}")
|
||||||
|
|
||||||
|
def init_config(self):
|
||||||
|
self.music_path = self.config.music_path
|
||||||
|
self.conf_path = self.config.conf_path
|
||||||
|
if not self.conf_path:
|
||||||
|
self.conf_path = self.config.music_path
|
||||||
|
|
||||||
|
self.hostname = self.config.hostname
|
||||||
|
self.port = self.config.port
|
||||||
|
self.proxy = self.config.proxy
|
||||||
|
self.search_prefix = self.config.search_prefix
|
||||||
|
self.ffmpeg_location = self.config.ffmpeg_location
|
||||||
|
self.active_cmd = self.config.active_cmd.split(",")
|
||||||
|
self.exclude_dirs = set(self.config.exclude_dirs.split(","))
|
||||||
|
self.music_path_depth = self.config.music_path_depth
|
||||||
|
|
||||||
def setup_logger(self):
|
def setup_logger(self):
|
||||||
log_format = f"%(asctime)s [{__version__}] [%(levelname)s] %(message)s"
|
log_format = f"%(asctime)s [{__version__}] [%(levelname)s] %(message)s"
|
||||||
date_format = "[%X]"
|
date_format = "[%X]"
|
||||||
@ -127,12 +134,6 @@ class XiaoMusic:
|
|||||||
self.log = logging.getLogger("xiaomusic")
|
self.log = logging.getLogger("xiaomusic")
|
||||||
self.log.addHandler(handler)
|
self.log.addHandler(handler)
|
||||||
self.log.setLevel(logging.DEBUG if self.config.verbose else logging.INFO)
|
self.log.setLevel(logging.DEBUG if self.config.verbose else logging.INFO)
|
||||||
debug_config = copy.deepcopy(self.config)
|
|
||||||
debug_config.account = "******"
|
|
||||||
debug_config.password = "******"
|
|
||||||
debug_config.httpauth_username = "******"
|
|
||||||
debug_config.httpauth_password = "******"
|
|
||||||
self.log.info(debug_config)
|
|
||||||
|
|
||||||
async def poll_latest_ask(self):
|
async def poll_latest_ask(self):
|
||||||
async with ClientSession() as session:
|
async with ClientSession() as session:
|
||||||
@ -982,19 +983,23 @@ class XiaoMusic:
|
|||||||
await self.call_main_thread_function(self.reinit)
|
await self.call_main_thread_function(self.reinit)
|
||||||
|
|
||||||
def update_config_from_setting(self, data):
|
def update_config_from_setting(self, data):
|
||||||
self.config.mi_did = data.get("mi_did")
|
# 兼容旧配置:一段时间后清理这里的旧代码
|
||||||
self.config.hardware = data.get("mi_hardware")
|
self.config.hardware = data.get("mi_hardware")
|
||||||
self.config.search_prefix = data.get("xiaomusic_search")
|
self.config.search_prefix = data.get("xiaomusic_search")
|
||||||
self.config.proxy = data.get("xiaomusic_proxy")
|
self.config.proxy = data.get("xiaomusic_proxy")
|
||||||
self.config.music_list_url = data.get("xiaomusic_music_list_url")
|
self.config.music_list_url = data.get("xiaomusic_music_list_url")
|
||||||
self.config.music_list_json = data.get("xiaomusic_music_list_json")
|
self.config.music_list_json = data.get("xiaomusic_music_list_json")
|
||||||
|
|
||||||
self.search_prefix = self.config.search_prefix
|
# 自动赋值相同字段的配置
|
||||||
self.proxy = self.config.proxy
|
self.config.update_config(data)
|
||||||
self.log.debug("update_config_from_setting ok. data:%s", data)
|
|
||||||
|
self.init_config()
|
||||||
|
debug_config = deepcopy_data_no_sensitive_info(self.config)
|
||||||
|
self.log.info("update_config_from_setting ok. data:%s", debug_config)
|
||||||
|
|
||||||
# 重新初始化
|
# 重新初始化
|
||||||
async def reinit(self, **kwargs):
|
async def reinit(self, **kwargs):
|
||||||
|
self.setup_logger()
|
||||||
await self.init_all_data(self.session)
|
await self.init_all_data(self.session)
|
||||||
self._gen_all_music_list()
|
self._gen_all_music_list()
|
||||||
self.log.info("reinit success")
|
self.log.info("reinit success")
|
||||||
|
Loading…
Reference in New Issue
Block a user