From 16d1194d613171b3b8839663cca3e9dabbda6821 Mon Sep 17 00:00:00 2001 From: emeric Date: Tue, 1 Jul 2014 23:43:49 +0200 Subject: [PATCH] WIP. Database updater now has its own namespace and dedicated directory --- Makefile.am | 7 +- {database => database-updater}/Checksum.cpp | 0 {database => database-updater}/Checksum.hpp | 0 .../DatabaseUpdater.cpp | 67 ++++++-------- database-updater/DatabaseUpdater.hpp | 44 +++++++++ database/Database.hpp | 69 -------------- database/DatabaseHandler.cpp | 7 +- database/DatabaseHandler.hpp | 7 +- database/MediaDirectory.cpp | 26 ++++++ database/MediaDirectory.hpp | 91 +++++++++++++++++++ main/DatabaseRefreshService.cpp | 37 -------- main/DatabaseRefreshService.hpp | 31 ------- main/DatabaseUpdateService.cpp | 33 +++++++ main/DatabaseUpdateService.hpp | 31 +++++++ main/main.cpp | 4 +- .../server/AudioCollectionRequestHandler.cpp | 2 +- .../server/AudioCollectionRequestHandler.hpp | 4 +- remote/server/MediaRequestHandler.cpp | 2 +- remote/server/MediaRequestHandler.hpp | 4 +- remote/server/RequestHandler.hpp | 2 +- test/CheckDatabaseBasics.cpp | 8 +- test/DatabaseIntegrity.cpp | 2 +- test/Makefile.am | 10 +- test/RemoteClientServer.cpp | 16 ++-- test/TestDatabase.cpp | 4 +- test/TestDatabase.hpp | 2 +- ui/audio/AudioDatabaseWidget.cpp | 2 +- ui/audio/AudioDatabaseWidget.hpp | 2 +- ui/audio/TableFilterWidget.cpp | 2 +- ui/audio/TableFilterWidget.hpp | 4 +- ui/audio/TrackWidget.cpp | 2 +- ui/audio/TrackWidget.hpp | 8 +- ui/common/SessionData.hpp | 8 +- ui/video/VideoDatabaseWidget.cpp | 2 +- ui/video/VideoDatabaseWidget.hpp | 4 +- 35 files changed, 320 insertions(+), 224 deletions(-) rename {database => database-updater}/Checksum.cpp (100%) rename {database => database-updater}/Checksum.hpp (100%) rename database/Database.cpp => database-updater/DatabaseUpdater.cpp (90%) create mode 100644 database-updater/DatabaseUpdater.hpp delete mode 100644 database/Database.hpp create mode 100644 database/MediaDirectory.cpp create mode 100644 database/MediaDirectory.hpp delete mode 100644 main/DatabaseRefreshService.cpp delete mode 100644 main/DatabaseRefreshService.hpp create mode 100644 main/DatabaseUpdateService.cpp create mode 100644 main/DatabaseUpdateService.hpp diff --git a/Makefile.am b/Makefile.am index 97c91197..5b5c8c6f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -8,7 +8,7 @@ bin_PROGRAMS = lms lms_SOURCES = \ $(top_srcdir)/main/main.cpp \ $(top_srcdir)/main/ServiceManager.cpp \ - $(top_srcdir)/main/DatabaseRefreshService.cpp \ + $(top_srcdir)/main/DatabaseUpdateService.cpp \ $(top_srcdir)/main/UserInterfaceService.cpp \ $(top_srcdir)/av/CodecContext.cpp \ $(top_srcdir)/av/Common.cpp \ @@ -34,13 +34,14 @@ lms_SOURCES = \ $(top_srcdir)/database/Artist.cpp \ $(top_srcdir)/database/Genre.cpp \ $(top_srcdir)/database/Release.cpp \ + $(top_srcdir)/database/MediaDirectory.cpp \ $(top_srcdir)/database/Track.cpp \ - $(top_srcdir)/database/Database.cpp \ $(top_srcdir)/database/DatabaseHandler.cpp \ - $(top_srcdir)/database/Checksum.cpp \ $(top_srcdir)/database/SqlQuery.cpp \ $(top_srcdir)/database/Path.cpp \ $(top_srcdir)/database/Video.cpp \ + $(top_srcdir)/database-updater/DatabaseUpdater.cpp \ + $(top_srcdir)/database-updater/Checksum.cpp \ $(top_srcdir)/transcode/AvConvTranscoder.cpp \ $(top_srcdir)/transcode/Format.cpp \ $(top_srcdir)/transcode/Parameters.cpp \ diff --git a/database/Checksum.cpp b/database-updater/Checksum.cpp similarity index 100% rename from database/Checksum.cpp rename to database-updater/Checksum.cpp diff --git a/database/Checksum.hpp b/database-updater/Checksum.hpp similarity index 100% rename from database/Checksum.hpp rename to database-updater/Checksum.hpp diff --git a/database/Database.cpp b/database-updater/DatabaseUpdater.cpp similarity index 90% rename from database/Database.cpp rename to database-updater/DatabaseUpdater.cpp index 0a298803..74549089 100644 --- a/database/Database.cpp +++ b/database-updater/DatabaseUpdater.cpp @@ -3,16 +3,19 @@ #include #include -#include "Database.hpp" -#include "Checksum.hpp" - -#include "AudioTypes.hpp" +#include "database/MediaDirectory.hpp" +#include "database/AudioTypes.hpp" #include "transcode/InputMediaFile.hpp" -namespace Database { +#include "Checksum.hpp" +#include "DatabaseUpdater.hpp" -Database::Database(boost::filesystem::path dbPath, MetaData::Parser& parser) +namespace DatabaseUpdater { + +using namespace Database; + +Updater::Updater(boost::filesystem::path dbPath, MetaData::Parser& parser) : _db(dbPath), _metadataParser(parser) { @@ -20,42 +23,30 @@ Database::Database(boost::filesystem::path dbPath, MetaData::Parser& parser) } void -Database::watchDirectory(WatchedDirectory directory) -{ - _directories.push_back(directory); -} - - -void -Database::unwatchDirectory(WatchedDirectory directory) -{ - std::list::iterator it = std::find(_directories.begin(), _directories.end(), directory); - if (it != _directories.end()) - _directories.erase(it); -} - - -void -Database::refresh(void) +Updater::process(void) { removeMissingAudioFiles(); + // TODO video files - BOOST_FOREACH( const WatchedDirectory& directory, _directories) { - switch (directory.getType()) { - case WatchedDirectory::Audio: - refreshAudioDirectory(directory.getPath()); + Wt::Dbo::Transaction transaction(_db.getSession()); + + std::vector mediaDirectories = MediaDirectory::getAll(_db.getSession()); + + BOOST_FOREACH( MediaDirectory::pointer directory, mediaDirectories) + { + switch (directory->getType()) { + case MediaDirectory::Audio: + refreshAudioDirectory(directory->getPath()); break; - case WatchedDirectory::Video: - refreshVideoDirectory(directory.getPath()); + case MediaDirectory::Video: + refreshVideoDirectory(directory->getPath()); break; - default: - assert(0); } } } void -Database::processAudioFile( const boost::filesystem::path& file) +Updater::processAudioFile( const boost::filesystem::path& file) { try { @@ -231,7 +222,7 @@ Database::processAudioFile( const boost::filesystem::path& file) void -Database::refreshAudioDirectory( const boost::filesystem::path& p) +Updater::refreshAudioDirectory( const boost::filesystem::path& p) { std::cout << "Refreshing audio directory " << p << std::endl; if (boost::filesystem::exists(p) && boost::filesystem::is_directory(p)) { @@ -265,7 +256,7 @@ Database::refreshAudioDirectory( const boost::filesystem::path& p) } void -Database::removeMissingAudioFiles( void ) +Updater::removeMissingAudioFiles( void ) { std::cerr << "Removing missing files..." << std::endl; Wt::Dbo::Transaction transaction(_db.getSession()); @@ -291,7 +282,7 @@ Database::removeMissingAudioFiles( void ) } Path::pointer -Database::getAddPath(const boost::filesystem::path& path) +Updater::getAddPath(const boost::filesystem::path& path) { Path::pointer res; Path::pointer parentDirectory; @@ -314,7 +305,7 @@ Database::getAddPath(const boost::filesystem::path& path) void -Database::refreshVideoDirectory( const boost::filesystem::path& path) +Updater::refreshVideoDirectory( const boost::filesystem::path& path) { std::cout << "Refreshing video directory " << path << std::endl; if (boost::filesystem::exists(path) && boost::filesystem::is_directory(path)) @@ -353,7 +344,7 @@ Database::refreshVideoDirectory( const boost::filesystem::path& path) } void -Database::processVideoFile( const boost::filesystem::path& file) +Updater::processVideoFile( const boost::filesystem::path& file) { try { @@ -430,4 +421,4 @@ Database::processVideoFile( const boost::filesystem::path& file) } } -} // namespace Database +} // namespace DatabaseUpdater diff --git a/database-updater/DatabaseUpdater.hpp b/database-updater/DatabaseUpdater.hpp new file mode 100644 index 00000000..3b1bf3fe --- /dev/null +++ b/database-updater/DatabaseUpdater.hpp @@ -0,0 +1,44 @@ +#ifndef DB_UPDATER_UPDATER_HPP +#define DB_UPDATER_UPDATER_HPP + + +#include "metadata/MetaData.hpp" +#include "database/DatabaseHandler.hpp" + +#include "database/FileTypes.hpp" +#include "database/DatabaseHandler.hpp" + +namespace DatabaseUpdater { + +class Updater +{ + public: + + Updater(boost::filesystem::path db, MetaData::Parser& parser); + + // Update database + void process(); + + private: + +// void refresh(const WatchedDirectory& directory); + + // Video + void refreshVideoDirectory( const boost::filesystem::path& directory ); + void processVideoFile( const boost::filesystem::path& file); + + // Audio + void removeMissingAudioFiles( void ); + void refreshAudioDirectory( const boost::filesystem::path& directory); + void processAudioFile( const boost::filesystem::path& file); + + Database::Path::pointer getAddPath(const boost::filesystem::path& path); + + Database::Handler _db; + + MetaData::Parser& _metadataParser; +}; // class Updater + +} // DatabaseUpdater + +#endif diff --git a/database/Database.hpp b/database/Database.hpp deleted file mode 100644 index a9fadf4b..00000000 --- a/database/Database.hpp +++ /dev/null @@ -1,69 +0,0 @@ - -#include "metadata/MetaData.hpp" - -#include "DatabaseHandler.hpp" - -#include "FileTypes.hpp" - -namespace Database { - -class WatchedDirectory { - - public: - - enum Type { - Audio, - Video, - }; - - WatchedDirectory( boost::filesystem::path path, Type type) : _path(path), _type(type) { - if (!boost::filesystem::is_directory(path)) - throw std::runtime_error( "path '" + path.string() + "' is not a directory!"); - } - - bool operator==(WatchedDirectory const& other) { return _path == other._path && _type == other._type; } - - const boost::filesystem::path& getPath() const { return _path; } - Type getType() const { return _type; } - - private: - - boost::filesystem::path _path; - Type _type; -}; - - -class Database -{ - public: - - Database(boost::filesystem::path db, MetaData::Parser& parser); - - void watchDirectory(WatchedDirectory dir); - void unwatchDirectory(WatchedDirectory dir); - - // Rescan media folders - void refresh(); - - private: - - void refresh(const WatchedDirectory& directory); - - // Video - void refreshVideoDirectory( const boost::filesystem::path& directory ); - void processVideoFile( const boost::filesystem::path& file); - - // Audio - void removeMissingAudioFiles( void ); - void refreshAudioDirectory( const boost::filesystem::path& directory); - void processAudioFile( const boost::filesystem::path& file); - - Path::pointer getAddPath(const boost::filesystem::path& path); - - DatabaseHandler _db; - - std::list _directories; - MetaData::Parser& _metadataParser; -}; - -} // Database diff --git a/database/DatabaseHandler.cpp b/database/DatabaseHandler.cpp index 4137a077..8572786f 100644 --- a/database/DatabaseHandler.cpp +++ b/database/DatabaseHandler.cpp @@ -2,9 +2,11 @@ #include "AudioTypes.hpp" #include "FileTypes.hpp" +#include "MediaDirectory.hpp" +namespace Database { -DatabaseHandler::DatabaseHandler(boost::filesystem::path db) +Handler::Handler(boost::filesystem::path db) : _path(db), _dbBackend( db.string() ) @@ -17,6 +19,8 @@ _dbBackend( db.string() ) _session.mapClass("release"); _session.mapClass("path"); _session.mapClass("video"); + _session.mapClass("media_directory"); + _session.mapClass("media_directory_settings"); try { _session.createTables(); @@ -28,3 +32,4 @@ _dbBackend( db.string() ) _dbBackend.executeSql("pragma journal_mode=WAL"); } +} // namespace Database diff --git a/database/DatabaseHandler.hpp b/database/DatabaseHandler.hpp index ba2e1baf..083a70fc 100644 --- a/database/DatabaseHandler.hpp +++ b/database/DatabaseHandler.hpp @@ -6,11 +6,13 @@ #include #include +namespace Database { + // Long living class handling the database -class DatabaseHandler +class Handler { public: - DatabaseHandler(boost::filesystem::path db); + Handler(boost::filesystem::path db); Wt::Dbo::Session& getSession() { return _session; } @@ -25,6 +27,7 @@ class DatabaseHandler }; +} // namespace Database #endif diff --git a/database/MediaDirectory.cpp b/database/MediaDirectory.cpp new file mode 100644 index 00000000..73392f9c --- /dev/null +++ b/database/MediaDirectory.cpp @@ -0,0 +1,26 @@ +#include "MediaDirectory.hpp" + +namespace Database { + + +MediaDirectorySettings::pointer +MediaDirectorySettings::get(Wt::Dbo::Session& session) +{ + MediaDirectorySettings::pointer res; + + res = session.find().where("id = ?").bind(1); + if (!res) + res = session.add( new MediaDirectorySettings()); + + return res; +} + +std::vector +MediaDirectory::getAll(Wt::Dbo::Session& session) +{ + Wt::Dbo::collection< MediaDirectory::pointer > res = session.find(); + + return std::vector(res.begin(), res.end()); +} + +} // namespace Database diff --git a/database/MediaDirectory.hpp b/database/MediaDirectory.hpp new file mode 100644 index 00000000..943842ac --- /dev/null +++ b/database/MediaDirectory.hpp @@ -0,0 +1,91 @@ +#ifndef DATABASE_MEDIA_DIRECTORY_HPP +#define DATABASE_MEDIA_DIRECTORY_HPP + +#include + +#include + +#include +#include + +namespace Database { + +class MediaDirectory; + +class MediaDirectorySettings +{ + public: + + typedef Wt::Dbo::ptr pointer; + + MediaDirectorySettings() {} + + // accessors + static pointer get(Wt::Dbo::Session& session); + + // write accessors + void addMediaDirectory(Wt::Dbo::ptr mediaDirectory); + void setLastUpdate(boost::posix_time::ptime time) { _lastUpdate = time; } + void setLastScan(boost::posix_time::ptime time) { _lastScan = time; } + + // Read accessors + boost::posix_time::ptime getLastUpdated(void) const { return _lastUpdate; } + + template + void persist(Action& a) + { + Wt::Dbo::field(a, _lastUpdate, "last_update"); + Wt::Dbo::field(a, _lastScan, "last_scan"); + Wt::Dbo::hasMany(a, _mediaDirectories, Wt::Dbo::ManyToOne, "media_directory_settings"); + } + + private: + + boost::posix_time::time_duration _updatePeriod; // TODO + boost::posix_time::ptime _lastUpdate; // last time the database has changed + boost::posix_time::ptime _lastScan; // last time the database has been scanned + Wt::Dbo::collection< Wt::Dbo::ptr > _mediaDirectories; // list of media directories +}; + + +class MediaDirectory +{ + public: + + typedef Wt::Dbo::ptr pointer; + + enum Type { + Audio = 1, + Video = 2, + }; + + MediaDirectory() {} + MediaDirectory(boost::filesystem::path p, Type type); + + // Accessors + static std::vector getAll(Wt::Dbo::Session& session); + + Type getType(void) const { return _type; } + boost::filesystem::path getPath(void) const { return boost::filesystem::path(_path); } + + template + void persist(Action& a) + { + Wt::Dbo::field(a, _type, "type"); + Wt::Dbo::field(a, _path, "path"); + Wt::Dbo::belongsTo(a, _settings, "media_directory_settings", Wt::Dbo::OnDeleteCascade); + } + + private: + + Type _type; + std::string _path; + + MediaDirectorySettings::pointer _settings; // back pointer + +}; + +} // namespace Database + +#endif + diff --git a/main/DatabaseRefreshService.cpp b/main/DatabaseRefreshService.cpp deleted file mode 100644 index 4ef8e039..00000000 --- a/main/DatabaseRefreshService.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include - -#include "DatabaseRefreshService.hpp" - -DatabaseRefreshService::DatabaseRefreshService(boost::asio::io_service& ioService, const boost::filesystem::path& p) -: _metadataParser(), - _database( p, _metadataParser) -{ - // TODO read from the database itself! - // Move this code in the database class - _database.watchDirectory( Database::WatchedDirectory("/storage/common/Media/Son/Metal", Database::WatchedDirectory::Audio) ); - _database.watchDirectory( Database::WatchedDirectory("/storage/common/Media/Video", Database::WatchedDirectory::Video) ); - -} - -void -DatabaseRefreshService::start(void) -{ -// _thread = boost::thread(boost::bind(&Database::refresh, &_database)); -} - -void -DatabaseRefreshService::stop(void) -{ - std::cout << "DatabaseRefreshService::stop, processing..." << std::endl; - _thread.interrupt(); - _thread.join(); - std::cout << "DatabaseRefreshService::stop, process done" << std::endl; -} - -void -DatabaseRefreshService::restart(void) -{ - std::cout << "DatabaseRefreshService::restart, not implemented" << std::endl; -} - - diff --git a/main/DatabaseRefreshService.hpp b/main/DatabaseRefreshService.hpp deleted file mode 100644 index 72a18a5a..00000000 --- a/main/DatabaseRefreshService.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef DB_REFRESH_SERVICE_HPP -#define DB_REFRESH_SERVICE_HPP - -#include -#include - -#include "metadata/AvFormat.hpp" -#include "database/Database.hpp" - -#include "Service.hpp" - -class DatabaseRefreshService : public Service -{ - public: - - DatabaseRefreshService(boost::asio::io_service& ioService, const boost::filesystem::path& p); - - void start(void); - void stop(void); - void restart(void); - - private: - - boost::thread _thread; - - MetaData::AvFormat _metadataParser; - Database::Database _database; // Todo use handler -}; - -#endif - diff --git a/main/DatabaseUpdateService.cpp b/main/DatabaseUpdateService.cpp new file mode 100644 index 00000000..68176066 --- /dev/null +++ b/main/DatabaseUpdateService.cpp @@ -0,0 +1,33 @@ +#include + +#include "DatabaseUpdateService.hpp" + +DatabaseUpdateService::DatabaseUpdateService(boost::asio::io_service& ioService, const boost::filesystem::path& p) +: _metadataParser(), + _databaseUpdater( p, _metadataParser) +{ + +} + +void +DatabaseUpdateService::start(void) +{ +// _thread = boost::thread(boost::bind(&Database::refresh, &_databaseUpdater.); +} + +void +DatabaseUpdateService::stop(void) +{ + std::cout << "DatabaseUpdateService::stop, processing..." << std::endl; + _thread.interrupt(); + _thread.join(); + std::cout << "DatabaseUpdateService::stop, process done" << std::endl; +} + +void +DatabaseUpdateService::restart(void) +{ + std::cout << "DatabaseUpdateService::restart, not implemented" << std::endl; +} + + diff --git a/main/DatabaseUpdateService.hpp b/main/DatabaseUpdateService.hpp new file mode 100644 index 00000000..4f34f4fa --- /dev/null +++ b/main/DatabaseUpdateService.hpp @@ -0,0 +1,31 @@ +#ifndef DB_UPDATE_SERVICE_HPP +#define DB_UPDATE_SERVICE_HPP + +#include +#include + +#include "metadata/AvFormat.hpp" +#include "database-updater/DatabaseUpdater.hpp" + +#include "Service.hpp" + +class DatabaseUpdateService : public Service +{ + public: + + DatabaseUpdateService(boost::asio::io_service& ioService, const boost::filesystem::path& p); + + void start(void); + void stop(void); + void restart(void); + + private: + + boost::thread _thread; + + MetaData::AvFormat _metadataParser; + DatabaseUpdater::Updater _databaseUpdater; // Todo use handler +}; + +#endif + diff --git a/main/main.cpp b/main/main.cpp index ba2829cb..eba76da9 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -7,7 +7,7 @@ #include "av/Common.hpp" #include "ServiceManager.hpp" -#include "DatabaseRefreshService.hpp" +#include "DatabaseUpdateService.hpp" #include "UserInterfaceService.hpp" #include "RemoteServerService.hpp" @@ -32,7 +32,7 @@ int main(int argc, char* argv[]) std::cout << "Starting services..." << std::endl; - serviceManager.startService( std::make_shared( serviceManager.getIoService(), dbPath) ); + serviceManager.startService( std::make_shared( serviceManager.getIoService(), dbPath) ); serviceManager.startService( std::make_shared( serviceManager.getIoService(), remoteListenEndpoint, dbPath) ); serviceManager.startService( std::make_shared(argc, argv, dbPath) ); diff --git a/remote/server/AudioCollectionRequestHandler.cpp b/remote/server/AudioCollectionRequestHandler.cpp index 10220f3e..096ec8fe 100644 --- a/remote/server/AudioCollectionRequestHandler.cpp +++ b/remote/server/AudioCollectionRequestHandler.cpp @@ -12,7 +12,7 @@ namespace Remote { namespace Server { -AudioCollectionRequestHandler::AudioCollectionRequestHandler(DatabaseHandler& db) +AudioCollectionRequestHandler::AudioCollectionRequestHandler(Database::Handler& db) : _db(db) {} diff --git a/remote/server/AudioCollectionRequestHandler.hpp b/remote/server/AudioCollectionRequestHandler.hpp index 24f16b91..74d99102 100644 --- a/remote/server/AudioCollectionRequestHandler.hpp +++ b/remote/server/AudioCollectionRequestHandler.hpp @@ -11,7 +11,7 @@ namespace Server { class AudioCollectionRequestHandler { public: - AudioCollectionRequestHandler(DatabaseHandler& db); + AudioCollectionRequestHandler(Database::Handler& db); bool process(const AudioCollectionRequest& request, AudioCollectionResponse& response); @@ -23,7 +23,7 @@ class AudioCollectionRequestHandler bool processGetTracks(const AudioCollectionRequest::GetTrackList& request, AudioCollectionResponse::TrackList& response); bool processGetCoverArt(const AudioCollectionRequest::GetCoverArt& request, AudioCollectionResponse& response); - DatabaseHandler& _db; + Database::Handler& _db; static const std::size_t _maxListArtists = 256; static const std::size_t _maxListGenres = 256; diff --git a/remote/server/MediaRequestHandler.cpp b/remote/server/MediaRequestHandler.cpp index ef9a0fa1..d2db9fdf 100644 --- a/remote/server/MediaRequestHandler.cpp +++ b/remote/server/MediaRequestHandler.cpp @@ -5,7 +5,7 @@ namespace Remote { namespace Server { -MediaRequestHandler::MediaRequestHandler(DatabaseHandler& db) +MediaRequestHandler::MediaRequestHandler(Database::Handler& db) : _db(db) {} diff --git a/remote/server/MediaRequestHandler.hpp b/remote/server/MediaRequestHandler.hpp index fc17ee15..df39c894 100644 --- a/remote/server/MediaRequestHandler.hpp +++ b/remote/server/MediaRequestHandler.hpp @@ -14,7 +14,7 @@ namespace Server { class MediaRequestHandler { public: - MediaRequestHandler(DatabaseHandler& db); + MediaRequestHandler(Database::Handler& db); bool process(const MediaRequest& request, MediaResponse& response); @@ -28,7 +28,7 @@ class MediaRequestHandler std::shared_ptr _transcoder; - DatabaseHandler& _db; + Database::Handler& _db; static const std::size_t _maxPartSize = 65536 - 128; }; diff --git a/remote/server/RequestHandler.hpp b/remote/server/RequestHandler.hpp index 3ae15e5c..69a978e0 100644 --- a/remote/server/RequestHandler.hpp +++ b/remote/server/RequestHandler.hpp @@ -25,7 +25,7 @@ class RequestHandler private: - DatabaseHandler _db; + Database::Handler _db; AudioCollectionRequestHandler _audioCollectionRequestHandler; MediaRequestHandler _mediaRequestHandler; diff --git a/test/CheckDatabaseBasics.cpp b/test/CheckDatabaseBasics.cpp index 03b2c7fb..f3d0e37a 100644 --- a/test/CheckDatabaseBasics.cpp +++ b/test/CheckDatabaseBasics.cpp @@ -4,6 +4,7 @@ #include "database/DatabaseHandler.hpp" #include "database/FileTypes.hpp" +#include "database/MediaDirectory.hpp" int main(void) { @@ -13,7 +14,7 @@ int main(void) boost::filesystem::remove("test2.db"); // Set up the long living database session - DatabaseHandler database("test2.db"); + Database::Handler database("test2.db"); Wt::Dbo::Transaction transaction(database.getSession()); @@ -70,6 +71,11 @@ int main(void) std::cout << "Parent's = " << path->getParent()->getPath() << std::endl; } + // Update last update + Database::MediaDirectorySettings::pointer settings = Database::MediaDirectorySettings::get(database.getSession()); + settings.modify()->setLastUpdate(boost::posix_time::second_clock::local_time()); + + std::cout << "last update = " << settings->getLastUpdated() << std::endl; // make some empty root dirs diff --git a/test/DatabaseIntegrity.cpp b/test/DatabaseIntegrity.cpp index a2d35444..51a03d5d 100644 --- a/test/DatabaseIntegrity.cpp +++ b/test/DatabaseIntegrity.cpp @@ -15,7 +15,7 @@ int main(void) std::cout << "Starting test!" << std::endl; // Set up the long living database session - DatabaseHandler database("test.db"); + Database::Handler database("test.db"); Wt::Dbo::Transaction transaction(database.getSession()); diff --git a/test/Makefile.am b/test/Makefile.am index f0b37681..d494fc63 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -36,8 +36,7 @@ remote_SOURCES = \ $(top_srcdir)/database/DatabaseHandler.cpp \ $(top_srcdir)/database/SqlQuery.cpp \ $(top_srcdir)/database/Path.cpp \ - $(top_srcdir)/database/Video.cpp \ - $(top_srcdir)/database/Checksum.cpp + $(top_srcdir)/database/Video.cpp remote_CXXFLAGS=-std=c++11 -Wall -Wextra -I$(top_srcdir) -I$(top_srcdir)/remote -I$(top_srcdir)/boost @@ -50,8 +49,7 @@ database_integrity_SOURCES = \ $(top_srcdir)/database/DatabaseHandler.cpp \ $(top_srcdir)/database/SqlQuery.cpp \ $(top_srcdir)/database/Path.cpp \ - $(top_srcdir)/database/Video.cpp \ - $(top_srcdir)/database/Checksum.cpp + $(top_srcdir)/database/Video.cpp database_integrity_CXXFLAGS=-std=c++11 -Wall -Wextra -I$(top_srcdir) @@ -62,10 +60,10 @@ database_basics_SOURCES = \ $(top_srcdir)/database/Release.cpp \ $(top_srcdir)/database/Track.cpp \ $(top_srcdir)/database/DatabaseHandler.cpp \ + $(top_srcdir)/database/MediaDirectory.cpp \ $(top_srcdir)/database/SqlQuery.cpp \ $(top_srcdir)/database/Path.cpp \ - $(top_srcdir)/database/Video.cpp \ - $(top_srcdir)/database/Checksum.cpp + $(top_srcdir)/database/Video.cpp database_basics_CXXFLAGS=-std=c++11 -Wall -Wextra -I$(top_srcdir) diff --git a/test/RemoteClientServer.cpp b/test/RemoteClientServer.cpp index a5fdc05a..ce9e4b63 100644 --- a/test/RemoteClientServer.cpp +++ b/test/RemoteClientServer.cpp @@ -651,6 +651,7 @@ int main() { try { bool extendedTests = true; + bool writeCovers = false; std::cout << "Running test... extendedTests = " << std::boolalpha << extendedTests << std::endl; @@ -709,13 +710,16 @@ int main() std::vector coverArts; client.getCoverRelease(coverArts, release.id); - boost::filesystem::create_directory("cover"); - BOOST_FOREACH(const Cover coverArt, coverArts) + if (writeCovers) { - std::ostringstream oss; oss << "cover/" << release.id << "." << release.name << ".jpeg"; - std::ofstream out(oss.str().c_str()); - BOOST_FOREACH(unsigned char c, coverArt.data) - out.put(c); + boost::filesystem::create_directory("cover"); + BOOST_FOREACH(const Cover coverArt, coverArts) + { + std::ostringstream oss; oss << "cover/" << release.id << "." << release.name << ".jpeg"; + std::ofstream out(oss.str().c_str()); + BOOST_FOREACH(unsigned char c, coverArt.data) + out.put(c); + } } std::cout << "Release '" << release << "', spotted " << coverArts.size() << " covers!" << std::endl; diff --git a/test/TestDatabase.cpp b/test/TestDatabase.cpp index 1c1ff5d8..44f30ea1 100644 --- a/test/TestDatabase.cpp +++ b/test/TestDatabase.cpp @@ -3,7 +3,7 @@ namespace TestDatabase { -DatabaseHandler* create() + Database::Handler* create() { boost::filesystem::path p ("test_db"); @@ -11,7 +11,7 @@ DatabaseHandler* create() // Remove previous db // boost::filesystem::remove(p); - DatabaseHandler* db = new DatabaseHandler(p); + Database::Handler* db = new Database::Handler(p); // Populate DB diff --git a/test/TestDatabase.hpp b/test/TestDatabase.hpp index 732fcb0a..b984c76e 100644 --- a/test/TestDatabase.hpp +++ b/test/TestDatabase.hpp @@ -3,6 +3,6 @@ namespace TestDatabase { - DatabaseHandler* create(); + Database::Handler* create(); } // namespace TestDatabase diff --git a/ui/audio/AudioDatabaseWidget.cpp b/ui/audio/AudioDatabaseWidget.cpp index 7deb4480..c8b3ede1 100644 --- a/ui/audio/AudioDatabaseWidget.cpp +++ b/ui/audio/AudioDatabaseWidget.cpp @@ -11,7 +11,7 @@ namespace UserInterface { -AudioDatabaseWidget::AudioDatabaseWidget( DatabaseHandler& db, Wt::WContainerWidget *parent) +AudioDatabaseWidget::AudioDatabaseWidget( Database::Handler& db, Wt::WContainerWidget *parent) : Wt::WContainerWidget(parent), _refreshingFilters(false) { diff --git a/ui/audio/AudioDatabaseWidget.hpp b/ui/audio/AudioDatabaseWidget.hpp index 06d950a7..1271867c 100644 --- a/ui/audio/AudioDatabaseWidget.hpp +++ b/ui/audio/AudioDatabaseWidget.hpp @@ -15,7 +15,7 @@ namespace UserInterface { class AudioDatabaseWidget : public Wt::WContainerWidget { public: - AudioDatabaseWidget( DatabaseHandler& db, Wt::WContainerWidget *parent = 0); + AudioDatabaseWidget( Database::Handler& db, Wt::WContainerWidget *parent = 0); void search(const std::string& text); diff --git a/ui/audio/TableFilterWidget.cpp b/ui/audio/TableFilterWidget.cpp index ab370293..792c302d 100644 --- a/ui/audio/TableFilterWidget.cpp +++ b/ui/audio/TableFilterWidget.cpp @@ -4,7 +4,7 @@ namespace UserInterface { -TableFilterWidget::TableFilterWidget(DatabaseHandler& db, std::string table, std::string field, Wt::WContainerWidget* parent) +TableFilterWidget::TableFilterWidget(Database::Handler& db, std::string table, std::string field, Wt::WContainerWidget* parent) : FilterWidget( parent ), _db(db), _table(table), diff --git a/ui/audio/TableFilterWidget.hpp b/ui/audio/TableFilterWidget.hpp index bb07b898..7d664d4e 100644 --- a/ui/audio/TableFilterWidget.hpp +++ b/ui/audio/TableFilterWidget.hpp @@ -14,7 +14,7 @@ class TableFilterWidget : public FilterWidget { public: - TableFilterWidget(DatabaseHandler& db, std::string table, std::string field, Wt::WContainerWidget* parent = 0); + TableFilterWidget(Database::Handler& db, std::string table, std::string field, Wt::WContainerWidget* parent = 0); // Set constraints on this filter virtual void refresh(const Constraint& constraint); @@ -24,7 +24,7 @@ class TableFilterWidget : public FilterWidget protected: - DatabaseHandler& _db; + Database::Handler& _db; const std::string _table; const std::string _field; diff --git a/ui/audio/TrackWidget.cpp b/ui/audio/TrackWidget.cpp index 9bba5169..256c2dd1 100644 --- a/ui/audio/TrackWidget.cpp +++ b/ui/audio/TrackWidget.cpp @@ -8,7 +8,7 @@ namespace UserInterface { -TrackWidget::TrackWidget( DatabaseHandler& db, Wt::WContainerWidget* parent) +TrackWidget::TrackWidget( Database::Handler& db, Wt::WContainerWidget* parent) : FilterWidget( parent ), _db(db), _tableView(nullptr), diff --git a/ui/audio/TrackWidget.hpp b/ui/audio/TrackWidget.hpp index e39c88eb..2a6df6cd 100644 --- a/ui/audio/TrackWidget.hpp +++ b/ui/audio/TrackWidget.hpp @@ -15,7 +15,7 @@ class TrackWidget : public FilterWidget { public: - TrackWidget( DatabaseHandler& db, Wt::WContainerWidget* parent = 0); + TrackWidget( Database::Handler& db, Wt::WContainerWidget* parent = 0); // Set constraints created by parent filters void refresh(const Constraint& constraint); @@ -34,11 +34,11 @@ class TrackWidget : public FilterWidget Wt::Signal< boost::filesystem::path > _trackSelected; - DatabaseHandler& _db; + Database::Handler& _db; typedef boost::tuple ResultType; - Wt::Dbo::QueryModel< ResultType > _queryModel; - Wt::WTableView* _tableView; + Wt::Dbo::QueryModel< ResultType > _queryModel; + Wt::WTableView* _tableView; void updateStats(void); diff --git a/ui/common/SessionData.hpp b/ui/common/SessionData.hpp index 3836a415..81c04622 100644 --- a/ui/common/SessionData.hpp +++ b/ui/common/SessionData.hpp @@ -18,14 +18,14 @@ class SessionData void setAuthenticatedUser(std::string user); - DatabaseHandler& getDatabaseHandler() { return _db;} - const DatabaseHandler& getDatabaseHandler() const { return _db;} + Database::Handler& getDatabaseHandler() { return _db;} + const Database::Handler& getDatabaseHandler() const { return _db;} private: - DatabaseHandler _db; - std::string _authenticatedUser; + Database::Handler _db; + std::string _authenticatedUser; }; diff --git a/ui/video/VideoDatabaseWidget.cpp b/ui/video/VideoDatabaseWidget.cpp index 25a5abda..07f48f8f 100644 --- a/ui/video/VideoDatabaseWidget.cpp +++ b/ui/video/VideoDatabaseWidget.cpp @@ -13,7 +13,7 @@ namespace UserInterface { -VideoDatabaseWidget::VideoDatabaseWidget(DatabaseHandler& db, Wt::WContainerWidget *parent) +VideoDatabaseWidget::VideoDatabaseWidget(Database::Handler& db, Wt::WContainerWidget *parent) : Wt::WContainerWidget(parent), _db(db) { diff --git a/ui/video/VideoDatabaseWidget.hpp b/ui/video/VideoDatabaseWidget.hpp index 027db093..bc5b9aee 100644 --- a/ui/video/VideoDatabaseWidget.hpp +++ b/ui/video/VideoDatabaseWidget.hpp @@ -12,7 +12,7 @@ namespace UserInterface { class VideoDatabaseWidget : public Wt::WContainerWidget { public: - VideoDatabaseWidget( DatabaseHandler& db, Wt::WContainerWidget *parent = 0); + VideoDatabaseWidget( Database::Handler& db, Wt::WContainerWidget *parent = 0); // Signals Wt::Signal< boost::filesystem::path >& playVideo() { return _playVideo; } @@ -28,7 +28,7 @@ class VideoDatabaseWidget : public Wt::WContainerWidget void addDirectory(const std::string& name, const boost::filesystem::path& path); void addVideo(const std::string& name, const boost::posix_time::time_duration& duration, const boost::filesystem::path& path); - DatabaseHandler& _db; + Database::Handler& _db; Wt::Signal< boost::filesystem::path > _playVideo;