import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { useRepoStore } from '../store' import { useState, useEffect } from 'react' import { get, set } from 'idb-keyval' import { gitea } from '@/agents/app'; import { toast } from 'sonner' const SYNC_REPO_STORAGE_KEY = 'sync-repo-mapping' export function SyncRepoDialog() { const { syncDialogOpen, setSyncDialogOpen, selectedSyncRepo, buildSync } = useRepoStore() const [toRepo, setToRepo] = useState('') useEffect(() => { const loadSavedMapping = async () => { if (syncDialogOpen && selectedSyncRepo) { const currentPath = selectedSyncRepo.path || '' // 从 idb-keyval 获取存储的映射 const mapping = await get>(SYNC_REPO_STORAGE_KEY) // 如果有存储的值,使用存储的值,否则使用当前仓库路径 setToRepo(mapping?.[currentPath] || currentPath) } } loadSavedMapping() }, [syncDialogOpen, selectedSyncRepo]) const handleSync = async () => { if (!selectedSyncRepo || !toRepo.trim()) { return } // 保存映射到 idb-keyval const currentPath = selectedSyncRepo.path || '' const mapping = await get>(SYNC_REPO_STORAGE_KEY) || {} mapping[currentPath] = toRepo await set(SYNC_REPO_STORAGE_KEY, mapping) await buildSync(selectedSyncRepo, { toRepo }) setSyncDialogOpen(false) } const onCreateRepo = async () => { if (!toRepo.trim()) { return } try { const res = await gitea.repo.createRepo({ name: toRepo }) if (res.code !== 200 && res.code !== 409) { // 409 表示仓库已存在,可以继续同步 throw new Error(`${res.message}`) } if (res.code === 200) { toast.success('仓库创建成功,正在同步...') } else { toast.warning('仓库已存在,正在同步...') } handleSync() } catch (error) { console.error('创建仓库失败:', error) } } return ( 同步仓库到 Gitea 将仓库 {selectedSyncRepo?.path} 同步到目标仓库
setToRepo(e.target.value)} />

格式: owner/repo-name

) }