feat(browser): 被搁置的导入提供「重启并完成导入」一键按钮

This commit is contained in:
Rick Ye
2026-09-11 18:33:40 +08:00
parent 6259a2bba6
commit d0b97f16b2
6 changed files with 22 additions and 0 deletions
@@ -338,6 +338,7 @@ export async function importBrowserProfile(sourceId: string, profileDir: string)
log.warn('partition locked, import deferred to next launch', { source: sourceId, profile: dirName })
return {
ok: true,
deferred: true,
cookies: collected.cookies,
localStorage: collected.localStorage,
cookieNote: deferredNote,
+6
View File
@@ -274,6 +274,12 @@ export function registerIpc(): AgentService {
return Promise.resolve()
})
// 应用自重启(浏览器数据导入被搁置时的一键完成入口)
handle('app:relaunch', () => {
app.relaunch()
app.exit(0)
})
handle('app:versions', () => ({
app: process.env.npm_package_version ?? '0.0.0',
electron: process.versions.electron,
+1
View File
@@ -55,6 +55,7 @@ const api = {
getState: (): Promise<SessionState> => ipcRenderer.invoke('agent:state'),
versions: (): Promise<{ app: string; electron: string; node: string; chrome: string; user: string }> =>
ipcRenderer.invoke('app:versions'),
appRelaunch: (): Promise<void> => ipcRenderer.invoke('app:relaunch'),
listSessions: (): Promise<SessionMeta[]> => ipcRenderer.invoke('sessions:list'),
newSession: (): Promise<void> => ipcRenderer.invoke('sessions:new'),
openSession: (path: string): Promise<void> => ipcRenderer.invoke('sessions:open', path),
@@ -118,6 +118,17 @@ export function BrowserImportForm(): JSX.Element {
{error && (
<div className="mt-3 rounded border border-red/40 bg-red-tint px-2.5 py-2 text-[11.5px] text-red">{error}</div>
)}
{result?.deferred && (
<div className="mt-3 flex items-center justify-end">
<button
type="button"
onClick={() => void window.api.appRelaunch()}
className="rounded bg-accent px-3.5 py-1.5 text-[12px] font-medium text-page transition-opacity hover:opacity-90"
>
重启并完成导入
</button>
</div>
)}
{result && (
<div
className={`mt-3 rounded border px-2.5 py-2 text-[11.5px] leading-relaxed ${
+1
View File
@@ -58,6 +58,7 @@ declare global {
stop: () => Promise<void>
getState: () => Promise<SessionState>
versions: () => Promise<{ app: string; electron: string; node: string; chrome: string; user: string }>
appRelaunch: () => Promise<void>
listSessions: () => Promise<SessionMeta[]>
newSession: () => Promise<void>
openSession: (path: string) => Promise<void>
+2
View File
@@ -333,6 +333,8 @@ export interface BrowserImportResult {
localStorage: boolean
cookieNote?: string
message: string
/** true = 分区被占用,已转待办:重启应用后自动完成导入 */
deferred?: boolean
}
export type AgentUiEvent =