refactor: 优化代码结构并修复多个问题

修复 ruleComponent.tsx 和 ruleBuilderUtils.ts 中 queryToAutoScoreRule 函数的参数问题
调整 database.rs 中 state_guard 的 drop 位置
优化 EventEmitter 和 Context 中的 once 方法实现
移除 Sidebar.tsx 和 OOBE.tsx 中未使用的代码
格式化 MCP 使用文档和规则文件
This commit is contained in:
Yukino_fox
2026-03-22 19:26:35 +08:00
parent 63dda3e043
commit 5be6bd09d2
11 changed files with 26 additions and 31 deletions
+3 -3
View File
@@ -228,10 +228,10 @@ jobs:
exit 1
fi
echo "使用 apksigner: $APKSIGNER"
# 创建临时密钥库文件
echo "$ANDROID_SIGNING_KEY" | base64 -d > /tmp/android_keystore.jks
# 找到所有未签名的 APK 文件
find src-tauri/gen/android/app/build/outputs -name "*-unsigned.apk" -type f | while read -r apk; do
# 生成签名后的文件名
@@ -255,7 +255,7 @@ jobs:
rm "$apk"
mv "$signed_apk" "${apk/-unsigned/}"
done
# 清理密钥库
rm -f /tmp/android_keystore.jks
+1 -4
View File
@@ -2,7 +2,4 @@
trigger: always_on
---
1.每次完成任务之前必须跑一遍测试(比如说npm系的typecheck/lint
2.每次完成任务之前必须跑一遍格式化(比如说npm系的prettier
3.任务完成时详细输出你所做的事情和需要用户确认的问题(如有)
4.每次规划任务必须按照步骤来,每个步骤结束后遵循第三条规定。
1.每次完成任务之前必须跑一遍测试(比如说npm系的typecheck/lint2.每次完成任务之前必须跑一遍格式化(比如说npm系的prettier)3.任务完成时详细输出你所做的事情和需要用户确认的问题(如有)4.每次规划任务必须按照步骤来,每个步骤结束后遵循第三条规定。
+7 -7
View File
@@ -25,19 +25,19 @@
你可以在前端通过 Tauri `invoke` 调用:
```ts
import { invoke } from '@tauri-apps/api/core';
import { invoke } from "@tauri-apps/api/core"
await invoke('mcp_server_start', {
await invoke("mcp_server_start", {
config: {
host: '127.0.0.1',
host: "127.0.0.1",
port: 3901,
},
});
})
const status = await invoke('mcp_server_status');
console.log(status);
const status = await invoke("mcp_server_status")
console.log(status)
await invoke('mcp_server_stop');
await invoke("mcp_server_stop")
```
说明:
+1 -1
View File
@@ -1061,7 +1061,6 @@ pub async fn db_switch_connection(
Some("database"),
None,
);
drop(state_guard);
let (db_type, saved_connection_string, saved_status, conn) = if connection_string
.starts_with("postgres://")
@@ -1170,6 +1169,7 @@ pub async fn db_switch_connection(
conn,
)
};
drop(state_guard);
{
let settings_db_path = sqlite_db_path(&app_handle)?;
+1 -2
View File
@@ -7,7 +7,7 @@ import { useTheme } from "../../contexts/ThemeContext"
import { changeLanguage, AppLanguage, languageOptions } from "../../i18n"
import type { themeConfig } from "../../preload/types"
import logoSvg from "../../assets/logoHD.svg"
import { useResponsive, useScreenSize } from "../../hooks/useResponsive"
import { useResponsive } from "../../hooks/useResponsive"
interface oobeProps {
visible: boolean
@@ -102,7 +102,6 @@ export const OOBE: React.FC<oobeProps> = ({ visible, onComplete }) => {
const { currentTheme, setTheme, themes, applyTheme } = useTheme()
const [messageApi, contextHolder] = message.useMessage()
const breakpoint = useResponsive()
const { width: screenWidth, height: screenHeight } = useScreenSize()
const isMobile = breakpoint === "xs" || breakpoint === "sm"
const [currentStep, setCurrentStep] = useState<oobeStep>("entry")
+3 -1
View File
@@ -1163,7 +1163,9 @@ export const Settings: React.FC<{ permission: permissionLevel }> = ({ permission
<div style={{ fontSize: "16px", fontWeight: 600, marginBottom: "8px" }}>
{t("settings.mcp.title")}
</div>
<div style={{ color: "var(--ss-text-secondary)", marginBottom: "12px", fontSize: "12px" }}>
<div
style={{ color: "var(--ss-text-secondary)", marginBottom: "12px", fontSize: "12px" }}
>
{t("settings.mcp.description")}
</div>
<Space style={{ marginBottom: "12px" }}>
-3
View File
@@ -14,7 +14,6 @@ import {
} from "@ant-design/icons"
import { useState, useEffect } from "react"
import { useTranslation } from "react-i18next"
import { useResponsive } from "../hooks/useResponsive"
import appLogo from "../assets/logoHD.svg"
const { Sider } = Layout
@@ -45,8 +44,6 @@ export function Sidebar({
onFloatingExpandedChange,
}: SidebarProps): React.JSX.Element {
const { t } = useTranslation()
const breakpoint = useResponsive()
const isMobile = breakpoint === "xs" || breakpoint === "sm"
const [dbStatus, setDbStatus] = useState<DbStatus>({ type: "sqlite", connected: true })
const [syncLoading, setSyncLoading] = useState(false)
const [messageApi, contextHolder] = message.useMessage()
+1 -1
View File
@@ -62,7 +62,7 @@ export const defaultQuery: RuleGroupType = {
rules: [{ field: "interval_time_passed", operator: "=", value: "1440" }],
}
export function queryToAutoScoreRule(_query: RuleGroupType): AutoScoreRuleData {
export function queryToAutoScoreRule(): AutoScoreRuleData {
const triggers: AutoScoreTrigger[] = []
/* const processRuleGroup = (group: RuleGroupType, relation: 'AND' | 'OR' = 'AND') => {
+1 -1
View File
@@ -37,7 +37,7 @@ export const RuleComponent: React.FC<RuleComponentProps> = ({ initialData, onCha
const handleQueryChange = (newQuery: RuleGroupType) => {
setQuery(newQuery)
if (onChange) {
const ruleData = queryToAutoScoreRule(newQuery)
const ruleData = queryToAutoScoreRule()
onChange(ruleData)
}
}
+4 -2
View File
@@ -309,8 +309,10 @@ const api = {
mcpServerStart: (config?: {
port?: number
host?: string
}): Promise<{ success: boolean; data?: { url: string; config: { port: number; host: string } } }> =>
invoke("mcp_server_start", { config }),
}): Promise<{
success: boolean
data?: { url: string; config: { port: number; host: string } }
}> => invoke("mcp_server_start", { config }),
mcpServerStop: (): Promise<{ success: boolean }> => invoke("mcp_server_stop"),
mcpServerStatus: (): Promise<{
success: boolean
+4 -6
View File
@@ -20,9 +20,8 @@ export class EventEmitter {
}
once(event: string | symbol, listener: eventListener): this {
const self = this
const onceListener: eventListener = function (...args) {
self.off(event, onceListener)
const onceListener: eventListener = (...args) => {
this.off(event, onceListener)
listener(...args)
}
return this.on(event, onceListener)
@@ -72,9 +71,8 @@ export class Context extends EventEmitter {
}
once(event: string | symbol, listener: eventListener): this {
const self = this
const onceListener: eventListener = function (...args) {
self.off(event, onceListener)
const onceListener: eventListener = (...args) => {
this.off(event, onceListener)
listener(...args)
}
super.on(event, onceListener)