From 050a4867b7829903b7a2738a4cc731ba2444b983 Mon Sep 17 00:00:00 2001 From: MBucari Date: Mon, 24 Nov 2025 20:45:55 -0700 Subject: [PATCH] Fix database lock from -wal and -whm files Delete LibationContext.db-shm and LibationContext.db-wal files as part of startup routine. --- Source/AppScaffolding/LibationScaffolding.cs | 14 ++++++++++++++ Source/LibationFileManager/SqliteStorage.cs | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Source/AppScaffolding/LibationScaffolding.cs b/Source/AppScaffolding/LibationScaffolding.cs index 3e1d0696..b6ee8b1e 100644 --- a/Source/AppScaffolding/LibationScaffolding.cs +++ b/Source/AppScaffolding/LibationScaffolding.cs @@ -90,6 +90,7 @@ namespace AppScaffolding { config.LoadPersistentSettings(config.LibationFiles.SettingsFilePath); } + DeleteOpenSqliteFiles(config); AudibleApiStorage.EnsureAccountsSettingsFileExists(); // @@ -102,6 +103,19 @@ namespace AppScaffolding Migrations.migrate_to_v12_0_1(config); } + /// + /// Delete shared memory and write-ahead log SQLite database files which may prevent access to the database. + /// + private static void DeleteOpenSqliteFiles(Configuration config) + { + var walFile = SqliteStorage.DatabasePath + "-wal"; + var shmFile = SqliteStorage.DatabasePath + "-shm"; + if (File.Exists(walFile)) + FileManager.FileUtility.SaferDelete(walFile); + if (File.Exists(shmFile)) + FileManager.FileUtility.SaferDelete(shmFile); + } + /// Initialize logging. Wire-up events. Run after migration public static void RunPostMigrationScaffolding(Variety variety, Configuration config) { diff --git a/Source/LibationFileManager/SqliteStorage.cs b/Source/LibationFileManager/SqliteStorage.cs index 88fae1f1..e324f9b2 100644 --- a/Source/LibationFileManager/SqliteStorage.cs +++ b/Source/LibationFileManager/SqliteStorage.cs @@ -5,7 +5,7 @@ namespace LibationFileManager public static class SqliteStorage { // not customizable. don't move to config - private static string databasePath => Path.Combine(Configuration.Instance.LibationFiles.Location, "LibationContext.db"); - public static string ConnectionString => $"Data Source={databasePath};Foreign Keys=False;Pooling=False;"; + public static string DatabasePath => Path.Combine(Configuration.Instance.LibationFiles.Location, "LibationContext.db"); + public static string ConnectionString => $"Data Source={DatabasePath};Foreign Keys=False;Pooling=False;"; } }