From 018fdf5516f12e48c6a05c817150223475147041 Mon Sep 17 00:00:00 2001 From: fegger Date: Sun, 21 Jun 2026 22:01:28 +0200 Subject: [PATCH] Refactor Database and File modules to improve data handling Update the Database class to include explicit methods for fetching various entity types, managing relationships, and querying file paths. Implement hashing logic in the File module to facilitate tracking by unique identifiers. Add C++20 support in configuration files. --- .clangd | 2 + .idea/.gitignore | 10 ++ .idea/editor.xml | 345 +++++++++++++++++++++++++++++++++++++++++++ .idea/misc.xml | 18 +++ .idea/vcs.xml | 6 + .zed/settings.json | 0 include/Containers.h | 1 + include/Database.h | 22 ++- include/File.h | 4 +- main.o | Bin 116488 -> 0 bytes soundServe | Bin 97456 -> 0 bytes sound_serve.db | Bin 45056 -> 45056 bytes src/Database.cpp | 190 +++++++++++++++++++++++- src/File.cpp | 58 +++++++- src/File.o | Bin 86480 -> 0 bytes src/Tag.o | Bin 45064 -> 0 bytes 16 files changed, 642 insertions(+), 14 deletions(-) create mode 100644 .clangd create mode 100644 .idea/.gitignore create mode 100644 .idea/editor.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 .zed/settings.json delete mode 100644 main.o delete mode 100755 soundServe delete mode 100644 src/File.o delete mode 100644 src/Tag.o diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..6d1b2ba --- /dev/null +++ b/.clangd @@ -0,0 +1,2 @@ +CompileFlags: + Add: ["-std=c++20"] diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..30cf57e --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/editor.xml b/.idea/editor.xml new file mode 100644 index 0000000..8d0e15e --- /dev/null +++ b/.idea/editor.xml @@ -0,0 +1,345 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..53624c9 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,18 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.zed/settings.json b/.zed/settings.json new file mode 100644 index 0000000..e69de29 diff --git a/include/Containers.h b/include/Containers.h index 36fe15f..8647576 100644 --- a/include/Containers.h +++ b/include/Containers.h @@ -34,6 +34,7 @@ struct Track { std::string artwork; TagLib::String genre; std::string format; + uint64_t hash; }; using trackPtr = std::shared_ptr; diff --git a/include/Database.h b/include/Database.h index 6306627..5e740da 100644 --- a/include/Database.h +++ b/include/Database.h @@ -2,18 +2,34 @@ #include "Containers.h" +#include +#include +#include #include using queue = std::vector; class Database { public: - Database( const char* filename, sqlite3** db ); + Database( const char* filename ); ~Database(); void fetch( const std::string& query ) const; void fetchAlbum( const std::string& album ) const; - void fetchAll() const; - void addTrack(); + void fetchAll( std::vector& entries ) const; + void fetchAll( std::map& entries ) const; + void fetchHashes( std::set& hashes ); + std::set fetchFilePaths(); + std::optional getArtistId( const std::string& artistName ); + std::optional getAlbumId( const std::string& albumTitle ); + std::optional getGenreId( const std::string& genre ); + void addTrack( Track t); + void addArtist( const std::string& artistName ); + void addAlbum( Track t); + void addGenre( std::string& genre ); + void setActive( bool active ); + void updateFilePath( const std::string& filePath ); + + sqlite3* getDb() { return db_; }; private: sqlite3* db_; sqlite3_stmt* stmnt; diff --git a/include/File.h b/include/File.h index 90af39d..86df0a0 100644 --- a/include/File.h +++ b/include/File.h @@ -10,10 +10,12 @@ namespace fs = std::filesystem; class File { public: - void importFile( std::string fileName ); + Track importFile( const std::string& filePath ); void importFolder( const std::string& folderPath, std::vector& tracks ); void readFileTag( Track& t ); std::string parseFiletype( const std::string& path ); + void updateLibrary(); + uint64_t hashString( Track t ); private: std::string path_; diff --git a/main.o b/main.o deleted file mode 100644 index c1fa833cce68eb31820f86695251c5f117b27b9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116488 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 diff --git a/soundServe b/soundServe deleted file mode 100755 index ecf7453c2be308c9fa199863476dfbf53209e0aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97456 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 A1ONa4 diff --git a/sound_serve.db b/sound_serve.db index ba442c8a64002f791adf2a4ecf6ada21f60e30a9..08668b69849087e4596056d0d65b05e2f0bab57c 100644 GIT binary patch delta 126 zcmZp8z|`=7X@ayMHvX#mm2pfrIM+GaoPCF5cZ-2ly}Z zOY*exz2ut3HEUy|0~c4b6BoOzOn%SZy}6aAdNBZsZzDwj delta 104 zcmZp8z|`=7X@ayM7Xt$WHxPqpCLk7^sAH_i#h};wi)7*tvuC>0ludg A^8f$< diff --git a/src/Database.cpp b/src/Database.cpp index 2659510..16be66c 100644 --- a/src/Database.cpp +++ b/src/Database.cpp @@ -1,12 +1,16 @@ #include "../include/Database.h" #include "../include/Player.h" +#include #include #include +#include +#include using db = Database; using queue = std::vector; -db::Database( const char* filename, sqlite3** db ) : db_( *db ){ +db::Database( const char* filename){ + sqlite3** db = &db_; if ( sqlite3_open( filename, db ) != SQLITE_OK ) { throw std::runtime_error( std::string ("Database connection failed!" ) ); }; @@ -74,7 +78,7 @@ void db::fetchAlbum( const std::string& album ) const { sqlite3_finalize( stmt ); } -void db::fetchAll() const { +void db::fetchAll( std::vector& entries ) const { sqlite3_stmt* stmt; const char* sql = "SELECT * FROM music"; @@ -83,7 +87,6 @@ void db::fetchAll() const { if ( rc != SQLITE_OK ) { throw std::runtime_error( sqlite3_errmsg( db_ )); } - while ( (rc = sqlite3_step( stmt )) == SQLITE_ROW ) { Track t; Player p; @@ -95,8 +98,185 @@ void db::fetchAll() const { t.filePath = sqlite3_column_text( stmt, 4 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 4 )) : ""; t.length = sqlite3_column_int( stmt, 5 ) ? sqlite3_column_int ( stmt, 5 ) : 0; t.artwork = sqlite3_column_text( stmt, 6 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 6 )) : ""; - t.genre = sqlite3_column_text( stmt, 7 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 7 )) : ""; - t.format = sqlite3_column_text( stmt, 8 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 8 )) : ""; + t.genre = sqlite3_column_text( stmt, 7 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 7 )) : ""; + t.format = sqlite3_column_text( stmt, 8 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 8 )) : ""; + + entries.push_back(t); } sqlite3_finalize( stmt ); } + +void db::fetchAll( std::map& dbEntries ) const { + sqlite3_stmt* stmt; + const char* sql = "SELECT * FROM music"; + + int rc = sqlite3_prepare_v2( db_, sql, -1, &stmt, nullptr ); + + if ( rc != SQLITE_OK ) { + throw std::runtime_error( sqlite3_errmsg( db_ )); + } + while ( (rc = sqlite3_step( stmt )) == SQLITE_ROW ) { + Track t; + Player p; + + t.artist = sqlite3_column_text( stmt, 0 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 0 )) : ""; + t.title = sqlite3_column_text( stmt, 1 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 1 )) : ""; + t.album = sqlite3_column_text( stmt, 1 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 1 )) : ""; + t.trackNr = sqlite3_column_int( stmt, 3 ) ? sqlite3_column_int( stmt, 3 ) : 0; + t.filePath = sqlite3_column_text( stmt, 4 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 4 )) : ""; + t.length = sqlite3_column_int( stmt, 5 ) ? sqlite3_column_int ( stmt, 5 ) : 0; + t.artwork = sqlite3_column_text( stmt, 6 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 6 )) : ""; + t.genre = sqlite3_column_text( stmt, 7 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 7 )) : ""; + t.format = sqlite3_column_text( stmt, 8 ) ? reinterpret_cast ( sqlite3_column_text( stmt, 8 )) : ""; + + dbEntries.insert( {t.filePath, t} ); + } + sqlite3_finalize( stmt ); +} + +void db::setActive( bool active ){ + sqlite3_stmt* stmt; + const char* sql = "INSERT INTO sound_serve.tracks (tracks.active) { active } WHERE tracks.id == id"; + + int rc = sqlite3_prepare_v2( db_, sql, -1, &stmt, nullptr ); + + if ( rc != SQLITE_OK ) { + throw std::runtime_error( sqlite3_errmsg( db_ )); +} +} + +void db::updateFilePath( const std::string& filePath ) { + sqlite3_stmt* stmt; + std::string fp = ( filePath.empty() ) ? NULL : filePath; + const char* sql = "INSERT INTO tracks ( tracks.filePath ) VALUES ( {fp}) WHERE track.id == id;"; + + int rc = sqlite3_prepare_v2( db_, sql, -1, &stmt, nullptr ); + if ( rc != SQLITE_OK ) { + throw std::runtime_error( sqlite3_errmsg( db_ )); + } + sqlite3_finalize( stmt ); +} + +std::set db::fetchFilePaths() { + std::set filePaths; + sqlite3_stmt* stmt; + const char* sql = "SELECT DISTINCT filePath from tracks;"; + int rc = sqlite3_prepare_v2( db_, sql, -1, &stmt, nullptr ); + + if ( rc != SQLITE_OK ) { + throw std::runtime_error( sqlite3_errmsg( db_ )); + } + while ( (rc = sqlite3_step( stmt )) == SQLITE_ROW ) { + filePaths.insert( reinterpret_cast(sqlite3_column_text( stmt, 0 ))); + } + sqlite3_finalize( stmt ); + return filePaths; +} + +void db::fetchHashes( std::set& hashes ) { + + sqlite3_stmt* stmt; + const char* sql = "SELECT DISTINCT hash from tracks;"; + int rc = sqlite3_prepare_v2( db_, sql, -1, &stmt, nullptr ); + + if ( rc != SQLITE_OK ) { + throw std::runtime_error( sqlite3_errmsg( db_ )); + } + while ( (rc = sqlite3_step( stmt )) == SQLITE_ROW ) { + hashes.insert( static_cast (sqlite3_column_int( stmt, 0 ))); + } + sqlite3_finalize( stmt ); +} + +void db::addTrack( Track t) { + sqlite3_stmt* stmt; + const char* sql = "INSERT INTO tracks (artist, title, album, trackNr, length, filePath, artwork, genre, format, hash) VALUE (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"; + + int rc = sqlite3_prepare_v2( db_, sql, -1, &stmt, nullptr ); + if ( rc != SQLITE_OK ) throw std::runtime_error( sqlite3_errmsg( db_ )); + + auto albumId = getAlbumId( t.album.toCString() ); + if ( !albumId ) addAlbum( t ); + + sqlite3_bind_text( stmt, 1,t.artist.toCString(), -1, SQLITE_STATIC ); + sqlite3_bind_text( stmt, 2,t.title.toCString(), -1, SQLITE_STATIC ); + sqlite3_bind_int( stmt, 3, )); + sqlite3_bind_int( stmt, 4, t.trackNr ); + sqlite3_bind_int( stmt, 5, t.length ); + sqlite3_bind_text( stmt, 6,t.filePath.c_str(), -1, SQLITE_STATIC ); + sqlite3_bind_text( stmt, 7,t.artwork.c_str(), -1, SQLITE_STATIC ); + sqlite3_bind_text( stmt, 8,t.genre.toCString(), -1, SQLITE_STATIC ); + sqlite3_bind_text( stmt, 9, t.format.c_str(), -1, SQLITE_STATIC ); + sqlite3_bind_int( stmt, 10, t.hash ); + + rc = sqlite3_step( stmt ); + if ( rc != SQLITE_DONE ) throw std::runtime_error( sqlite3_errmsg( db_ )); + + sqlite3_finalize( stmt ); +} + +void db::addAlbum( Track t ) { + auto albumId = getAlbumId( t.album.toCString()); + + if ( !albumId ) { + sqlite3_stmt* stmt; + const char* sql = "INSERT INTO albums (title, artist, year, genre, artwork) VALUE ( ?, ?, ?, ?, ? );"; + + int rc = sqlite3_prepare_v2( db_, sql, -1, &stmt, nullptr ); + sqlite3_bind_text( stmt, 0, t.album.toCString(), -1, SQLITE_TRANSIENT ); + sqlite3_bind_int( stmt, 1, artistId, -1, SQLITE_TRANSIENT ); + + if ( rc != SQLITE_OK ) throw std::runtime_error( sqlite3_errmsg( db_ )); + } +} + +void db::addArtist( const std::string& artistName ) { + if ( !getArtistId( artistName )) { + sqlite3_stmt* stmt; + const char* sql = "INSERT INTO artists ( name ) VALUE ( ? );"; + int rc = sqlite3_prepare_v2( db_, sql, -1, &stmt, nullptr ); + sqlite3_bind_text( stmt, 0, artistName.c_str(), -1, SQLITE_TRANSIENT ); + + if ( rc != SQLITE_OK ) throw std::runtime_error( sqlite3_errmsg( db_ )); + } +} + +std::optional db::getAlbumId( const std::string& albumTitle ) { + const char* sql = "SELECT id FROM tracks WHERE album = ?;"; + sqlite3_stmt* stmt; + + sqlite3_prepare_v2( db_, sql, -1, &stmt, nullptr ); + sqlite3_bind_text( stmt, 1, albumTitle.c_str(), -1, SQLITE_TRANSIENT ); + + std::optional id; + if (sqlite3_step( stmt ) == SQLITE_ROW ) { + id = sqlite3_column_int( stmt, 0 ); + } + +} + +std::optional db::getArtistId( const std::string& artistName ) { + const char* sql = "SELECT id FROM artists WHERE name = ?;"; + sqlite3_stmt* stmt; + + sqlite3_prepare_v2( db_, sql, -1, &stmt, nullptr ); + sqlite3_bind_text( stmt, 1, artistName.c_str(), -1, SQLITE_TRANSIENT ); + + std::optional id; + if (sqlite3_step( stmt ) == SQLITE_ROW ) { + id = sqlite3_column_int( stmt, 0 ); + } +} + +std::optional db::getGenreId( const std::string& genre ) { + const char* sql = "SELECT id FROM genres WHERE name = ?;"; + sqlite3_stmt* stmt; + + sqlite3_prepare_v2( db_, sql, -1, &stmt, nullptr ); + sqlite3_bind_text( stmt, 1, genre.c_str(), -1, SQLITE_TRANSIENT ); + + std::optional id; + if (sqlite3_step( stmt ) == SQLITE_ROW ) { + id = sqlite3_column_int( stmt, 0 ); + } +} diff --git a/src/File.cpp b/src/File.cpp index d46b5cc..f617e79 100644 --- a/src/File.cpp +++ b/src/File.cpp @@ -1,23 +1,42 @@ #include "../include/File.h" +#include "../include/Database.h" #include "../include/miniaudio.h" + +#include #include +#include #include +#include #include namespace fs = std::filesystem; -void File::importFolder(const std::string& folderPath, std::vector& tracks ) { +Track File::importFile( const std::string& filePath ) { + Track t; + t.filePath = filePath; + t.artwork = "./cover.png"; + readFileTag( t ); + return t; +} +void File::importFolder(const std::string& folderPath, std::vector& tracks ) { for ( const auto& audioFile : fs::directory_iterator{ folderPath }) { - Track t; - t.filePath = static_cast(audioFile.path()); - t.artwork = folderPath + "/" + "cover.png"; - readFileTag( t ); + Track t = importFile( audioFile.path()); tracks.push_back( t ); } } +uint64_t hashString( Track t ) { + std::string s = (t.artist + t.title + t.album).toCString(); + uint64_t hash = 14695981039346656037ULL; + for ( char c : s ) { + hash ^= static_cast ( c ); + hash *= 1099511628211ULL; + } + return hash; +} + void File::readFileTag( Track& t ) { TagLib::FileRef f( reinterpret_cast(&t.filePath )); if ( !f.isNull() ) { @@ -29,6 +48,7 @@ void File::readFileTag( Track& t ) { t.genre = ( f.tag()->genre().isEmpty() ) ? "" : ( f.tag()->genre() ); t.format = parseFiletype( t.filePath ); t.length = ( f.audioProperties()->lengthInSeconds() ) ? f.audioProperties()->lengthInSeconds() : 0; + t.hash = hashString( t ); } } @@ -39,3 +59,31 @@ std::string File::parseFiletype( const std::string& path ){ return path.substr( dot + 1, length - dot ); } + +void File::updateLibrary() { + Database database( "sound_serve.db"); + std::vector musicFolder; + std::vector db; + std::set db_filePaths; + std::set hashes; + + importFolder( musicFolder_, musicFolder); + database.fetchFilePaths(); + database.fetchHashes( hashes ); + + //---- Missing Files ___ + // find missing files and set filePath to NULL; + for ( auto& fp : db_filePaths ) { + if (! fs::exists( fp ) ) { + database.updateFilePath( fp ); + } + } + // --- Add new Files --- + for ( auto file : musicFolder ) { + // compare hash values + if ( !hashes.contains( file.hash )) { + importFile( file.filePath ); + } + } + +} diff --git a/src/File.o b/src/File.o deleted file mode 100644 index 9c0da177430a7a55dd8ee12006338dfae1192aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86480 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 G|NmdaUow9H