diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d8dfe9f..b2304f3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -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 diff --git a/.lingma/rules/rules.md b/.lingma/rules/rules.md index 202659c..215b511 100644 --- a/.lingma/rules/rules.md +++ b/.lingma/rules/rules.md @@ -2,7 +2,4 @@ trigger: always_on --- -1.每次完成任务之前必须跑一遍测试(比如说npm系的typecheck/lint) -2.每次完成任务之前必须跑一遍格式化(比如说npm系的prettier) -3.任务完成时详细输出你所做的事情和需要用户确认的问题(如有) -4.每次规划任务必须按照步骤来,每个步骤结束后遵循第三条规定。 \ No newline at end of file +1.每次完成任务之前必须跑一遍测试(比如说npm系的typecheck/lint)2.每次完成任务之前必须跑一遍格式化(比如说npm系的prettier)3.任务完成时详细输出你所做的事情和需要用户确认的问题(如有)4.每次规划任务必须按照步骤来,每个步骤结束后遵循第三条规定。 diff --git a/MCP-使用说明.md b/MCP-使用说明.md index 5e4bfb9..ddff1e0 100644 --- a/MCP-使用说明.md +++ b/MCP-使用说明.md @@ -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") ``` 说明: diff --git a/src-tauri/src/commands/database.rs b/src-tauri/src/commands/database.rs index 7933ff1..c6f3ce1 100644 --- a/src-tauri/src/commands/database.rs +++ b/src-tauri/src/commands/database.rs @@ -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)?; diff --git a/src/components/OOBE/OOBE.tsx b/src/components/OOBE/OOBE.tsx index 5fe5d9f..c6aeea4 100644 --- a/src/components/OOBE/OOBE.tsx +++ b/src/components/OOBE/OOBE.tsx @@ -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 = ({ 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("entry") diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx index afdfdee..bf3264a 100644 --- a/src/components/Settings.tsx +++ b/src/components/Settings.tsx @@ -1163,7 +1163,9 @@ export const Settings: React.FC<{ permission: permissionLevel }> = ({ permission
{t("settings.mcp.title")}
-
+
{t("settings.mcp.description")}
diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 70f7059..ade63ae 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -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({ type: "sqlite", connected: true }) const [syncLoading, setSyncLoading] = useState(false) const [messageApi, contextHolder] = message.useMessage() diff --git a/src/components/autoScore/ruleBuilderUtils.ts b/src/components/autoScore/ruleBuilderUtils.ts index 50620b5..4b9c01d 100644 --- a/src/components/autoScore/ruleBuilderUtils.ts +++ b/src/components/autoScore/ruleBuilderUtils.ts @@ -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') => { diff --git a/src/components/autoScore/ruleComponent.tsx b/src/components/autoScore/ruleComponent.tsx index d4b2d6b..b9da023 100644 --- a/src/components/autoScore/ruleComponent.tsx +++ b/src/components/autoScore/ruleComponent.tsx @@ -37,7 +37,7 @@ export const RuleComponent: React.FC = ({ initialData, onCha const handleQueryChange = (newQuery: RuleGroupType) => { setQuery(newQuery) if (onChange) { - const ruleData = queryToAutoScoreRule(newQuery) + const ruleData = queryToAutoScoreRule() onChange(ruleData) } } diff --git a/src/preload/types.ts b/src/preload/types.ts index 21278dc..29520f8 100644 --- a/src/preload/types.ts +++ b/src/preload/types.ts @@ -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 diff --git a/src/shared/kernel.ts b/src/shared/kernel.ts index 0e31ad5..ef229e3 100644 --- a/src/shared/kernel.ts +++ b/src/shared/kernel.ts @@ -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)