diff --git a/apps/studio/src/ipc-handlers.ts b/apps/studio/src/ipc-handlers.ts index 592311509a..b94cdfdda1 100644 --- a/apps/studio/src/ipc-handlers.ts +++ b/apps/studio/src/ipc-handlers.ts @@ -71,7 +71,7 @@ import { setSentryWpcomUserIdMain } from 'src/lib/main-sentry-utils'; import * as oauthClient from 'src/lib/oauth'; import { getAiInstructionsPath } from 'src/lib/server-files-paths'; import { shellOpenExternalWrapper } from 'src/lib/shell-open-external-wrapper'; -import { keepSqliteIntegrationUpdated } from 'src/lib/sqlite-versions'; +import { installSqliteIntegration, keepSqliteIntegrationUpdated } from 'src/lib/sqlite-versions'; import * as windowsHelpers from 'src/lib/windows-helpers'; import { setupWordPressFilesOnly } from 'src/lib/wordpress-setup'; import { getLogsFilePath, writeLogToFile, type LogLevel } from 'src/logging'; @@ -364,6 +364,10 @@ export async function importSite( await setupWordPressFilesOnly( site.details.path ); } + if ( ! ( await site.hasSQLitePlugin() ) ) { + await installSqliteIntegration( site.details.path ); + } + const onEvent = ( data: ImportExportEventData ) => { const parentWindow = BrowserWindow.fromWebContents( event.sender ); sendIpcEventToRendererWithWindow( parentWindow, 'on-import', data, id ); diff --git a/apps/studio/src/lib/sqlite-versions.ts b/apps/studio/src/lib/sqlite-versions.ts index b108ac2180..40c30a46f8 100644 --- a/apps/studio/src/lib/sqlite-versions.ts +++ b/apps/studio/src/lib/sqlite-versions.ts @@ -19,3 +19,6 @@ export const getSqliteVersionFromInstallation = ( sqliteMuPluginPath: string ) = export const keepSqliteIntegrationUpdated = ( sitePath: string ) => provider.keepSqliteIntegrationUpdated( sitePath ); + +export const installSqliteIntegration = ( sitePath: string ) => + provider.installSqliteIntegration( sitePath ); diff --git a/apps/studio/src/stores/sync/sync-operations-slice.ts b/apps/studio/src/stores/sync/sync-operations-slice.ts index c1f0472e4b..d9a7642977 100644 --- a/apps/studio/src/stores/sync/sync-operations-slice.ts +++ b/apps/studio/src/stores/sync/sync-operations-slice.ts @@ -806,14 +806,17 @@ const pollPullBackupThunk = createTypedAsyncThunk( ); await getIpcApi().stopServer( selectedSiteId ); - await getIpcApi().importSite( { - id: selectedSiteId, - backupFile: { - path: filePath, - type: 'application/tar+gzip', - }, - } ); - await getIpcApi().startServer( selectedSiteId ); + try { + await getIpcApi().importSite( { + id: selectedSiteId, + backupFile: { + path: filePath, + type: 'application/tar+gzip', + }, + } ); + } finally { + await getIpcApi().startServer( selectedSiteId ); + } await getIpcApi().removeSyncBackup( remoteSiteId ); diff --git a/apps/studio/src/tests/ipc-handlers.test.ts b/apps/studio/src/tests/ipc-handlers.test.ts index d32cf757f7..e63ea31796 100644 --- a/apps/studio/src/tests/ipc-handlers.test.ts +++ b/apps/studio/src/tests/ipc-handlers.test.ts @@ -35,6 +35,10 @@ vi.mock( 'src/lib/wordpress-setup', () => ( { } ) ); vi.mock( 'src/main-window' ); vi.mock( 'src/lib/import-export/import/import-manager' ); +vi.mock( 'src/lib/sqlite-versions', () => ( { + keepSqliteIntegrationUpdated: vi.fn().mockResolvedValue( false ), + installSqliteIntegration: vi.fn().mockResolvedValue( undefined ), +} ) ); vi.mock( import( 'src/lib/bump-stats' ), async ( importOriginal ) => { const actual = await importOriginal(); return { @@ -195,6 +199,7 @@ describe( 'importSite', () => { start: vi.fn(), stop: vi.fn(), updateSiteDetails: vi.fn(), + hasSQLitePlugin: vi.fn().mockResolvedValue( true ), executeWpCliCommand: vi .fn() .mockResolvedValue( { stdout: 'New Site Title', stderr: '', exitCode: 0 } ), @@ -244,6 +249,7 @@ describe( 'importSite', () => { start: vi.fn(), stop: vi.fn(), updateSiteDetails: vi.fn(), + hasSQLitePlugin: vi.fn().mockResolvedValue( true ), executeWpCliCommand: vi .fn() .mockResolvedValue( { stdout: 'New Site Title', stderr: '', exitCode: 0 } ),