- feat(vscode-sync): restore auto-sync logic and enable by default

- refactor(settings): remove the VS Code auto-sync toggle from Settings UI
- feat(provider-list): enable auto-sync after "Apply to VS Code"; disable after "Remove"
- chore(prettier): run Prettier on changed files
- verify: typecheck and renderer build pass

- Files
  - added: src/hooks/useVSCodeAutoSync.ts
  - modified: src/App.tsx
  - modified: src/components/ProviderList.tsx
  - modified: src/components/SettingsModal.tsx

- Notes
  - Auto-sync now defaults to enabled for new users (stored in localStorage; existing saved state is respected).
  - No settings toggle is shown; manual Apply/Remove in the list still works as before.
This commit is contained in:
Jason
2025-09-19 15:48:35 +08:00
parent 7522ba3e03
commit 31cdc2a5cf
3 changed files with 12 additions and 29 deletions

View File

@@ -114,7 +114,7 @@ function App() {
unlisten(); unlisten();
} }
}; };
}, [activeApp, isAutoSyncEnabled]); // 依赖自动同步状态,确保拿到最新开关 }, [activeApp, isAutoSyncEnabled]);
const loadProviders = async () => { const loadProviders = async () => {
const loadedProviders = await window.api.getProviders(activeApp); const loadedProviders = await window.api.getProviders(activeApp);
@@ -183,7 +183,7 @@ function App() {
}); });
}; };
// 同步Codex供应商到VS Code设置 // 同步Codex供应商到VS Code设置(静默覆盖)
const syncCodexToVSCode = async (providerId: string, silent = false) => { const syncCodexToVSCode = async (providerId: string, silent = false) => {
try { try {
const status = await window.api.getVSCodeSettingsStatus(); const status = await window.api.getVSCodeSettingsStatus();

View File

@@ -11,7 +11,6 @@ import { getVersion } from "@tauri-apps/api/app";
import "../lib/tauri-api"; import "../lib/tauri-api";
import { relaunchApp } from "../lib/updater"; import { relaunchApp } from "../lib/updater";
import { useUpdate } from "../contexts/UpdateContext"; import { useUpdate } from "../contexts/UpdateContext";
import { useVSCodeAutoSync } from "../hooks/useVSCodeAutoSync";
import type { Settings } from "../types"; import type { Settings } from "../types";
interface SettingsModalProps { interface SettingsModalProps {
@@ -29,7 +28,6 @@ export default function SettingsModal({ onClose }: SettingsModalProps) {
const [showUpToDate, setShowUpToDate] = useState(false); const [showUpToDate, setShowUpToDate] = useState(false);
const { hasUpdate, updateInfo, updateHandle, checkUpdate, resetDismiss } = const { hasUpdate, updateInfo, updateHandle, checkUpdate, resetDismiss } =
useUpdate(); useUpdate();
const { isAutoSyncEnabled, toggleAutoSync } = useVSCodeAutoSync();
useEffect(() => { useEffect(() => {
loadSettings(); loadSettings();
@@ -203,28 +201,7 @@ export default function SettingsModal({ onClose }: SettingsModalProps) {
</label> </label>
</div> */} </div> */}
{/* VS Code 自动同步设置 */} {/* VS Code 自动同步设置已移除 */}
<div>
<h3 className="text-sm font-medium text-gray-900 dark:text-gray-100 mb-3">
Codex
</h3>
<label className="flex items-center justify-between cursor-pointer">
<div className="flex-1">
<span className="text-sm text-gray-700 dark:text-gray-300">
VS Code
</span>
<p className="text-xs text-gray-500 dark:text-gray-400 mt-0.5">
Codex VS Code
</p>
</div>
<input
type="checkbox"
checked={isAutoSyncEnabled}
onChange={toggleAutoSync}
className="w-4 h-4 text-blue-500 rounded focus:ring-blue-500/20"
/>
</label>
</div>
{/* 配置文件位置 */} {/* 配置文件位置 */}
<div> <div>

View File

@@ -4,7 +4,8 @@ const VSCODE_AUTO_SYNC_KEY = "vscode-auto-sync-enabled";
const VSCODE_AUTO_SYNC_EVENT = "vscode-auto-sync-changed"; const VSCODE_AUTO_SYNC_EVENT = "vscode-auto-sync-changed";
export function useVSCodeAutoSync() { export function useVSCodeAutoSync() {
const [isAutoSyncEnabled, setIsAutoSyncEnabled] = useState<boolean>(false); // 默认开启自动同步;若本地存储存在记录,则以记录为准
const [isAutoSyncEnabled, setIsAutoSyncEnabled] = useState<boolean>(true);
// 从 localStorage 读取初始状态 // 从 localStorage 读取初始状态
useEffect(() => { useEffect(() => {
@@ -22,7 +23,9 @@ export function useVSCodeAutoSync() {
useEffect(() => { useEffect(() => {
const onCustom = (e: Event) => { const onCustom = (e: Event) => {
try { try {
const detail = (e as CustomEvent).detail as { enabled?: boolean } | undefined; const detail = (e as CustomEvent).detail as
| { enabled?: boolean }
| undefined;
if (detail && typeof detail.enabled === "boolean") { if (detail && typeof detail.enabled === "boolean") {
setIsAutoSyncEnabled(detail.enabled); setIsAutoSyncEnabled(detail.enabled);
} else { } else {
@@ -42,7 +45,10 @@ export function useVSCodeAutoSync() {
window.addEventListener(VSCODE_AUTO_SYNC_EVENT, onCustom as EventListener); window.addEventListener(VSCODE_AUTO_SYNC_EVENT, onCustom as EventListener);
window.addEventListener("storage", onStorage); window.addEventListener("storage", onStorage);
return () => { return () => {
window.removeEventListener(VSCODE_AUTO_SYNC_EVENT, onCustom as EventListener); window.removeEventListener(
VSCODE_AUTO_SYNC_EVENT,
onCustom as EventListener,
);
window.removeEventListener("storage", onStorage); window.removeEventListener("storage", onStorage);
}; };
}, []); }, []);