feat: OTA 自更新(Gitea Release 为更新源)
- update.rs:检查最新 Release(latest 端点+列表回退)、版本比较、 平台产物挑选(含 .sha256 侧车)、下载进度、sha256 校验、 自替换(改名 .old → 换入新 exe → 拉起新进程)、启动清理遗留 - 设置 → 关于:检查更新按钮、发现新版本提示、下载进度条(Progress)、 失败重试;自动检查更新开关真正生效(启动后台检查并弹通知) - 版本 1.0.0 → 1.0.1(首个带 OTA 的发布版本) - 顺手修 clippy 遗留警告(is_none_or、合并 if)
This commit is contained in:
@@ -1546,7 +1546,7 @@ impl ConnectionView {
|
||||
|| contains_ignore_case(&r.payload, &query);
|
||||
let sub_ok = sub_filter
|
||||
.as_deref()
|
||||
.map_or(true, |f| topic_matches(f, &r.topic));
|
||||
.is_none_or(|f| topic_matches(f, &r.topic));
|
||||
if dir_ok && query_ok && sub_ok {
|
||||
matched += 1;
|
||||
if records.len() < MAX_RENDERED_MESSAGES {
|
||||
@@ -2513,15 +2513,13 @@ fn extract_placeholder_keys(topic: &str, payload: &str) -> Vec<String> {
|
||||
let bytes = text.as_bytes();
|
||||
let mut i = 0;
|
||||
while i + 1 < bytes.len() {
|
||||
if bytes[i] == b'{' && bytes[i + 1] == b'{' {
|
||||
if let Some(rel_end) = text[i + 2..].find("}}") {
|
||||
let key = text[i + 2..i + 2 + rel_end].trim();
|
||||
if !key.is_empty() && !key.starts_with('$') && !out.iter().any(|k| k == key) {
|
||||
out.push(key.to_string());
|
||||
}
|
||||
i = i + 2 + rel_end + 2;
|
||||
continue;
|
||||
if bytes[i] == b'{' && bytes[i + 1] == b'{' && let Some(rel_end) = text[i + 2..].find("}}") {
|
||||
let key = text[i + 2..i + 2 + rel_end].trim();
|
||||
if !key.is_empty() && !key.starts_with('$') && !out.iter().any(|k| k == key) {
|
||||
out.push(key.to_string());
|
||||
}
|
||||
i = i + 2 + rel_end + 2;
|
||||
continue;
|
||||
}
|
||||
// 按字符推进,避免把多字节 UTF-8 拆开
|
||||
let ch = text[i..].chars().next().unwrap();
|
||||
|
||||
Reference in New Issue
Block a user