Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions CHANGELOG/v2.2.1/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<img width="1800" height="766" alt="新版本" src="https://github.com/SECTL/SecRandom/blob/master/data/assets/icon/secrandom-release.png" />
v2.0 - Koharu(小鸟游星野) release 4

## 🚀 主要更新

- 无

## 💡 功能优化

- 无

## 🐛 修复问题

- 修复 **日志等级** 问题,防止 Sentry 爆炸。

## 🔧 其它变更

- 无

---

💝 **感谢所有贡献者为 SecRandom 项目付出的努力!**
2 changes: 1 addition & 1 deletion app/Language/obtain_language.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def run(self):
value = self._read_language_value()
self.finished.emit(value)
except Exception as e:
logger.exception(f"读取语言内容失败: {e}")
logger.warning(f"读取语言内容失败: {e}")
self.finished.emit(None)

def _read_language_value(self):
Expand Down
24 changes: 12 additions & 12 deletions app/common/IPC_URL/url_ipc_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def register_url_protocol(self) -> bool:
try:
return self.protocol_manager.register_protocol()
except Exception as e:
logger.exception(f"注册URL协议失败: {e}")
logger.warning(f"注册URL协议失败: {e}")
return False

def unregister_url_protocol(self) -> bool:
Expand All @@ -65,7 +65,7 @@ def unregister_url_protocol(self) -> bool:
try:
return self.protocol_manager.unregister_protocol()
except Exception as e:
logger.exception(f"注销URL协议失败: {e}")
logger.warning(f"注销URL协议失败: {e}")
return False

def is_protocol_registered(self) -> bool:
Expand Down Expand Up @@ -97,7 +97,7 @@ def start_ipc_server(self, port: int = 0) -> bool:
self.is_running = True
return True
except Exception as e:
logger.exception(f"启动IPC服务器失败: {e}")
logger.warning(f"启动IPC服务器失败: {e}")
return False

def stop_ipc_server(self):
Expand Down Expand Up @@ -140,11 +140,11 @@ def _run_server(self, port: int):
continue
except Exception as e:
if self.is_running:
logger.exception(f"IPC服务器错误: {e}")
logger.warning(f"IPC服务器错误: {e}")
break

except Exception as e:
logger.exception(f"IPC服务器启动错误: {e}")
logger.warning(f"IPC服务器启动错误: {e}")
finally:
if "server_socket" in locals():
server_socket.close()
Expand All @@ -158,7 +158,7 @@ def _handle_client(self, client_socket: socket.socket, address: tuple):
response = self._process_message(message)
client_socket.send(json.dumps(response).encode("utf-8"))
except Exception as e:
logger.exception(f"处理IPC消息错误: {e}")
logger.warning(f"处理IPC消息错误: {e}")
finally:
client_socket.close()

Expand Down Expand Up @@ -188,7 +188,7 @@ def _process_message(self, message: Dict[str, Any]) -> Dict[str, Any]:
"type": message_type,
"error": str(e),
}
logger.exception(f"消息处理失败 - 类型: {message_type}, 错误: {e}")
logger.warning(f"消息处理失败 - 类型: {message_type}, 错误: {e}")
return error_response
else:
unknown_response = {
Expand Down Expand Up @@ -224,7 +224,7 @@ def _handle_url_message(self, payload: Dict[str, Any]) -> Dict[str, Any]:
logger.info(f"URL命令执行成功: {url}, 结果: {result}")
return {"success": True, "result": result}
except Exception as e:
logger.exception(f"URL命令执行失败: {url}, 错误: {e}")
logger.warning(f"URL命令执行失败: {url}, 错误: {e}")
return {"success": False, "error": str(e)}

def register_message_handler(self, message_type: str, handler: Callable):
Expand Down Expand Up @@ -262,7 +262,7 @@ def send_ipc_message(
return json.loads(response_data)

except Exception as e:
logger.exception(f"发送IPC消息失败: {e}")
logger.warning(f"发送IPC消息失败: {e}")
return None

def _save_port_config(self, port: int):
Expand All @@ -286,7 +286,7 @@ def load_port_config(self) -> Optional[int]:
config = json.load(f)
return config.get("port")
except Exception as e:
logger.exception(f"加载端口配置失败: {e}")
logger.warning(f"加载端口配置失败: {e}")

return None

Expand Down Expand Up @@ -328,7 +328,7 @@ def handle_url_args(self, url: str) -> Dict[str, Any]:
return result

except Exception as e:
logger.exception(f"URL参数解析失败: {url}, 错误: {e}")
logger.warning(f"URL参数解析失败: {url}, 错误: {e}")
return {"success": False, "error": str(e)}

def execute_url_command(
Expand Down Expand Up @@ -361,7 +361,7 @@ def execute_url_command(
logger.info(f"URL命令执行成功: {url}, 结果: {result}")
return {"success": True, "result": result}
except Exception as e:
logger.exception(f"URL命令执行失败: {url}, 错误: {e}")
logger.warning(f"URL命令执行失败: {url}, 错误: {e}")
return {"success": False, "error": str(e)}

def get_available_commands(self) -> Dict[str, Any]:
Expand Down
16 changes: 8 additions & 8 deletions app/common/extraction/cses_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ def _validate_schedule(self) -> bool:
bool: 数据有效返回True,否则返回False
"""
if not self.schedule_data:
logger.exception("课程表数据为空")
logger.warning("课程表数据为空")
return False

schedule = self.schedule_data.get("schedule")
Expand All @@ -293,7 +293,7 @@ def _validate_schedule(self) -> bool:
logger.warning("缺少'timeslots'字段,将使用空课程表数据")
return True
if not isinstance(timeslots, list):
logger.exception("'timeslots'字段必须是列表类型")
logger.warning("'timeslots'字段必须是列表类型")
return False
for i, timeslot in enumerate(timeslots):
if not self._validate_timeslot(timeslot, i):
Expand Down Expand Up @@ -343,25 +343,25 @@ def _validate_timeslot(self, timeslot: dict, index: int) -> bool:
bool: 有效返回True,否则返回False
"""
if not isinstance(timeslot, dict):
logger.exception(f"时间段{index}必须是字典类型")
logger.warning(f"时间段{index}必须是字典类型")
return False

required_fields = ["name", "start_time", "end_time"]
for field in required_fields:
if field not in timeslot:
logger.exception(f"时间段{index}缺少'{field}'字段")
logger.warning(f"时间段{index}缺少'{field}'字段")
return False

try:
start_time = self._parse_time(timeslot["start_time"])
end_time = self._parse_time(timeslot["end_time"])

if start_time >= end_time:
logger.exception(f"时间段{index}的开始时间必须早于结束时间")
logger.warning(f"时间段{index}的开始时间必须早于结束时间")
return False

except ValueError as e:
logger.exception(f"时间段{index}时间格式错误: {e}")
logger.warning(f"时间段{index}时间格式错误: {e}")
return False

return True
Expand All @@ -387,7 +387,7 @@ def _parse_time(self, time_str: str) -> time:
return time(int(parts[0]), int(parts[1]), int(parts[2]))
raise ValueError(f"无效的时间格式: {time_str}")
except (ValueError, IndexError):
logger.exception(f"无法解析时间: {time_str}")
logger.warning(f"无法解析时间: {time_str}")
raise ValueError(f"无法解析时间: {time_str}") from None

def _parse_time_string_to_seconds(self, time_val: str | int) -> int:
Expand Down Expand Up @@ -416,7 +416,7 @@ def _parse_time_string_to_seconds(self, time_val: str | int) -> int:
return int(parts[0]) * 3600 + int(parts[1]) * 60 + int(parts[2])
return int(time_str)
except (ValueError, IndexError):
logger.exception(f"无法解析时间字符串: {time_val}")
logger.warning(f"无法解析时间字符串: {time_val}")
raise ValueError(f"无法解析时间字符串: {time_val}") from None

def _format_time_for_secrandom(self, time_val: str | int) -> str:
Expand Down
16 changes: 8 additions & 8 deletions app/common/music/music_player.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,10 @@ def play_music(

music_path = get_audio_path(f"music/{music_file}")
if not music_path.exists():
logger.exception(f"音乐文件不存在: {music_path}")
logger.warning(f"音乐文件不存在: {music_path}")
return False
except Exception as e:
logger.exception(f"获取音乐文件路径失败: {e}")
logger.warning(f"获取音乐文件路径失败: {e}")
return False

# 从设置中获取音量和渐入渐出时长
Expand All @@ -125,7 +125,7 @@ def play_music(
)
self._fade_out_duration = fade_out_ms / 1000.0
except Exception as e:
logger.exception(f"获取音乐设置失败: {e}")
logger.warning(f"获取音乐设置失败: {e}")
self._volume = 1.0
self._fade_in_duration = 0.0
self._fade_out_duration = 0.0
Expand Down Expand Up @@ -208,7 +208,7 @@ def _play_music_worker(self, music_path: str, loop: bool) -> None:
data = np.mean(data, axis=1)
data = data.astype(np.float32)
except Exception as e:
logger.exception(f"读取音乐文件失败: {e}")
logger.warning(f"读取音乐文件失败: {e}")
return

# 初始化音频流(只初始化一次)
Expand All @@ -221,7 +221,7 @@ def _play_music_worker(self, music_path: str, loop: bool) -> None:
)
stream.start()
except Exception as e:
logger.exception(f"初始化音频流失败: {e}")
logger.warning(f"初始化音频流失败: {e}")
return

# 计算渐入步数
Expand Down Expand Up @@ -254,23 +254,23 @@ def _play_music_worker(self, music_path: str, loop: bool) -> None:
try:
stream.write(chunk)
except Exception as e:
logger.exception(f"写入音频流失败: {e}")
logger.warning(f"写入音频流失败: {e}")
break

# 如果不循环或者收到停止信号,退出循环
if not loop or self._stop_flag.is_set():
break

except Exception as e:
logger.exception(f"音乐播放工作线程异常: {e}")
logger.warning(f"音乐播放工作线程异常: {e}")
finally:
# 确保音频流关闭
if stream:
try:
stream.stop()
stream.close()
except Exception as e:
logger.exception(f"关闭音频流失败: {e}")
logger.warning(f"关闭音频流失败: {e}")
self._is_playing = False
logger.debug("音乐播放工作线程结束")

Expand Down
2 changes: 1 addition & 1 deletion app/common/safety/secure_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ def write_behind_scenes_settings(d: dict) -> None:
except Exception as e2:
logger.warning(f"降级写入明文JSON也失败:{e2}")
except Exception as e:
logger.exception(f"写入内幕设置失败:{p}, 错误:{e}")
logger.warning(f"写入内幕设置失败:{p}, 错误:{e}")
try:
with open(p, "w", encoding="utf-8") as f:
json.dump(d, f, ensure_ascii=False, indent=4)
Expand Down
14 changes: 7 additions & 7 deletions app/common/shortcut/shortcut_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,10 @@ def on_pressed():
else:
logger.debug(f"快捷键热键为空: {config_key} = {shortcut_str}")
except Exception as e:
logger.exception(f"注册快捷键失败 {config_key}: {e}")
logger.warning(f"注册快捷键失败 {config_key}: {e}")
import traceback

logger.exception(traceback.format_exc())
logger.warning(traceback.format_exc())
else:
logger.debug(f"快捷键未设置: {config_key}")

Expand Down Expand Up @@ -129,7 +129,7 @@ def reload_shortcuts(self):
try:
keyboard.remove_hotkey(hotkey)
except Exception as e:
logger.exception(f"注销快捷键失败 {config_key}: {e}")
logger.warning(f"注销快捷键失败 {config_key}: {e}")

self.shortcuts.clear()

Expand All @@ -149,7 +149,7 @@ def update_shortcut(self, config_key: str, shortcut_str: str):
keyboard.remove_hotkey(old_hotkey)
del self.shortcuts[config_key]
except Exception as e:
logger.exception(f"注销快捷键失败 {config_key}: {e}")
logger.warning(f"注销快捷键失败 {config_key}: {e}")

if shortcut_str and self._enabled:
try:
Expand All @@ -168,7 +168,7 @@ def on_pressed():
f"快捷键已更新: {config_key} = {shortcut_str}, 热键: {hotkey}"
)
except Exception as e:
logger.exception(f"更新快捷键失败 {config_key}: {e}")
logger.warning(f"更新快捷键失败 {config_key}: {e}")

def _get_signal_for_key(self, config_key: str) -> Signal:
"""根据配置键获取对应的信号
Expand Down Expand Up @@ -207,7 +207,7 @@ def set_enabled(self, enabled: bool):
try:
keyboard.remove_hotkey(hotkey)
except Exception as e:
logger.exception(f"注销快捷键失败 {config_key}: {e}")
logger.warning(f"注销快捷键失败 {config_key}: {e}")
self.shortcuts.clear()
logger.info("快捷键已禁用")

Expand All @@ -227,5 +227,5 @@ def cleanup(self):
keyboard.unhook_all()
logger.debug("已清理所有 keyboard 钩子")
except Exception as e:
logger.exception(f"清理 keyboard 钩子失败: {e}")
logger.warning(f"清理 keyboard 钩子失败: {e}")
self.shortcuts.clear()
4 changes: 2 additions & 2 deletions app/common/voice/edge_tts_worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def run(self):
voices = self.get_voices()
self.voices_fetched.emit(voices)
except Exception as e:
logger.exception(f"获取Edge TTS语音列表失败: {e}")
logger.warning(f"获取Edge TTS语音列表失败: {e}")
self.error_occurred.emit(str(e))

def get_voices(self):
Expand Down Expand Up @@ -94,7 +94,7 @@ def get_voices(self):

return filtered_voices
except Exception as e:
logger.exception(f"获取Edge TTS语音列表失败: {e}")
logger.warning(f"获取Edge TTS语音列表失败: {e}")
# 返回默认语音列表
return self.get_default_voices()

Expand Down
Loading
Loading