@@ -181,29 +181,44 @@ else {
181181 = ( store . preferences . get ( 'storage.vaultPath' ) as string | null )
182182 || path . join ( storagePath , 'markdown-vault' )
183183 ensureFlatSpacesLayout ( vaultPath )
184- const { hasMarkdownVaultData } = lazyRequire (
185- './storage/providers/markdown' ,
186- ) as typeof import ( './storage/providers/markdown' )
187- const vaultHasData = hasMarkdownVaultData ( vaultPath )
188-
189- if ( ! vaultHasData ) {
190- const { closeDB } = lazyRequire ( './db' ) as typeof import ( './db' )
191- const { migrateSqliteToMarkdownStorage } = lazyRequire (
192- './storage/providers/markdown' ,
193- ) as typeof import ( './storage/providers/markdown' )
194184
195- try {
196- migrationResult = migrateSqliteToMarkdownStorage ( )
185+ // Авто-миграция из SQLite выполняется только один раз. Флаг
186+ // storage.sqliteMigrated персистентно блокирует повтор, иначе ручная
187+ // очистка vault при сохранившемся massCode.db триггерила бы миграцию
188+ // заново и возвращала удалённые данные.
189+ const alreadyMigrated
190+ = store . preferences . get ( 'storage.sqliteMigrated' ) === true
197191
198- store . preferences . delete ( 'storage.engine' as any )
199- store . preferences . delete ( 'backup' as any )
200-
201- // eslint-disable-next-line no-console
202- console . log ( '[Auto-migration complete]' , migrationResult )
203- }
204- finally {
205- closeDB ( )
192+ if ( ! alreadyMigrated ) {
193+ const { hasMarkdownVaultData } = lazyRequire (
194+ './storage/providers/markdown' ,
195+ ) as typeof import ( './storage/providers/markdown' )
196+ const vaultHasData = hasMarkdownVaultData ( vaultPath )
197+
198+ if ( ! vaultHasData ) {
199+ const { closeDB } = lazyRequire ( './db' ) as typeof import ( './db' )
200+ const { migrateSqliteToMarkdownStorage } = lazyRequire (
201+ './storage/providers/markdown' ,
202+ ) as typeof import ( './storage/providers/markdown' )
203+
204+ try {
205+ migrationResult = migrateSqliteToMarkdownStorage ( )
206+
207+ store . preferences . delete ( 'storage.engine' as any )
208+ store . preferences . delete ( 'backup' as any )
209+
210+ // eslint-disable-next-line no-console
211+ console . log ( '[Auto-migration complete]' , migrationResult )
212+ }
213+ finally {
214+ closeDB ( )
215+ }
206216 }
217+
218+ // Помечаем миграцию как выполненную в обоих случаях: после успешной
219+ // миграции и как backfill для пользователей, уже мигрировавших в
220+ // прошлых версиях (vault с данными, но без флага).
221+ store . preferences . set ( 'storage.sqliteMigrated' , true )
207222 }
208223 }
209224 }
0 commit comments