diff --git a/src/MediaLibrary.cpp b/src/MediaLibrary.cpp index 7aa7a1c25edf8e68ebefb4daa3b39b7b22c4309e..b14a99d220570f1a0fe4ef9eb1ef288de5c7d711 100644 --- a/src/MediaLibrary.cpp +++ b/src/MediaLibrary.cpp @@ -139,9 +139,8 @@ MediaLibrary::~MediaLibrary() m_parser->stop(); } -void MediaLibrary::createAllTables() +void MediaLibrary::createAllTables( uint32_t dbModelVersion ) { - auto dbModelVersion = m_settings.dbModelVersion(); // We need to create the tables in order of triggers creation // Device is the "root of all evil". When a device is modified, // we will trigger an update on folder, which will trigger @@ -177,9 +176,8 @@ void MediaLibrary::createAllTables() Bookmark::createTable( m_dbConnection.get() ); } -void MediaLibrary::createAllTriggers() +void MediaLibrary::createAllTriggers(uint32_t dbModelVersion) { - auto dbModelVersion = m_settings.dbModelVersion(); Folder::createTriggers( m_dbConnection.get(), dbModelVersion ); Album::createTriggers( m_dbConnection.get() ); AlbumTrack::createTriggers( m_dbConnection.get() ); @@ -352,17 +350,22 @@ InitializeResult MediaLibrary::initialize( const std::string& dbPath, LOG_ERROR( "Failed to load settings" ); return InitializeResult::Failed; } - createAllTables(); - createAllTriggers(); - t->commit(); - - if ( m_settings.dbModelVersion() != Settings::DbModelVersion ) + auto dbModel = m_settings.dbModelVersion(); + if ( dbModel != Settings::DbModelVersion ) { - res = updateDatabaseModel( m_settings.dbModelVersion(), dbPath ); - if ( res == InitializeResult::Failed ) + if ( dbModel == 0 ) + dbModel = Settings::DbModelVersion; + createAllTables( dbModel ); + createAllTriggers( dbModel ); + t->commit(); + if ( dbModel != Settings::DbModelVersion ) { - LOG_ERROR( "Failed to update database model" ); - return res; + res = updateDatabaseModel( dbModel, dbPath ); + if ( res == InitializeResult::Failed ) + { + LOG_ERROR( "Failed to update database model" ); + return res; + } } } } @@ -1028,7 +1031,8 @@ bool MediaLibrary::recreateDatabase( const std::string& dbPath ) unlink( dbPath.c_str() ); m_dbConnection = sqlite::Connection::connect( dbPath ); Settings::createTable( m_dbConnection.get() ); - createAllTables(); + createAllTables( Settings::DbModelVersion ); + createAllTriggers( Settings::DbModelVersion ); // We dropped the database, there is no setting to be read anymore return m_settings.load(); } diff --git a/src/MediaLibrary.h b/src/MediaLibrary.h index 2fd3f7d827955a20a126e0573c5bf200803f4749..7577755b623c93e66a6255ea01d8744599f182ae 100644 --- a/src/MediaLibrary.h +++ b/src/MediaLibrary.h @@ -223,8 +223,8 @@ private: void migrateModel15to16(); void migrateModel16to17( uint32_t originalPreviousVersion ); void migrateModel17to18(uint32_t originalPreviousVersion); - void createAllTables(); - void createAllTriggers(); + void createAllTables( uint32_t dbModelVersion ); + void createAllTriggers( uint32_t dbModelVersion ); void registerEntityHooks(); static bool validateSearchPattern( const std::string& pattern ); bool createThumbnailFolder( const std::string& thumbnailPath ) const; diff --git a/src/Settings.cpp b/src/Settings.cpp index 1137eae5ed101f5680daa665aa0cd1f20ba73c5c..d609818a25bf900690f7727f02d81915d1821945 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -50,7 +50,7 @@ bool Settings::load() { if ( sqlite::Tools::executeInsert( m_ml->getConn(), "INSERT INTO Settings VALUES(?)", DbModelVersion ) == false ) return false; - m_dbModelVersion = DbModelVersion; + m_dbModelVersion = 0; } else {