From 5bdabec32572fcf863fd65681791f39e586348e6 Mon Sep 17 00:00:00 2001 From: emeric Date: Tue, 5 Aug 2014 22:35:10 +0200 Subject: [PATCH] WIP. Handling multiple media directories --- Makefile.am | 2 + database-updater/DatabaseUpdater.cpp | 8 +- database/MediaDirectory.cpp | 5 + database/MediaDirectory.hpp | 1 + ui/approot/templates.xml | 26 ++- ui/audio/AudioWidget.cpp | 1 + ui/settings/Settings.cpp | 4 +- ui/settings/SettingsDatabaseFormView.cpp | 35 +--- ui/settings/SettingsMediaDirectories.cpp | 144 ++++++++++++++++ ui/settings/SettingsMediaDirectories.hpp | 37 ++++ .../SettingsMediaDirectoryFormView.cpp | 160 ++++++++++++++++++ .../SettingsMediaDirectoryFormView.hpp | 37 ++++ 12 files changed, 426 insertions(+), 34 deletions(-) create mode 100644 ui/settings/SettingsMediaDirectories.cpp create mode 100644 ui/settings/SettingsMediaDirectories.hpp create mode 100644 ui/settings/SettingsMediaDirectoryFormView.cpp create mode 100644 ui/settings/SettingsMediaDirectoryFormView.hpp diff --git a/Makefile.am b/Makefile.am index 61091eef..006c5ba2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -69,6 +69,8 @@ lms_SOURCES = \ $(top_srcdir)/ui/settings/SettingsAccountFormView.cpp \ $(top_srcdir)/ui/settings/SettingsAudioFormView.cpp \ $(top_srcdir)/ui/settings/SettingsDatabaseFormView.cpp \ + $(top_srcdir)/ui/settings/SettingsMediaDirectories.cpp \ + $(top_srcdir)/ui/settings/SettingsMediaDirectoryFormView.cpp \ $(top_srcdir)/ui/settings/SettingsUserFormView.cpp \ $(top_srcdir)/ui/settings/SettingsUsers.cpp diff --git a/database-updater/DatabaseUpdater.cpp b/database-updater/DatabaseUpdater.cpp index a1ae3d75..ea196df4 100644 --- a/database-updater/DatabaseUpdater.cpp +++ b/database-updater/DatabaseUpdater.cpp @@ -89,13 +89,18 @@ Updater::process(boost::system::error_code err) removeMissingAudioFiles(_result.audioStats); // TODO video files + // TODO remove files that do not belong to a root directory + std::vector pathes; { Wt::Dbo::Transaction transaction(_db.getSession()); std::vector mediaDirectories = MediaDirectory::getAll(_db.getSession()); BOOST_FOREACH(MediaDirectory::pointer directory, mediaDirectories) - pathes.push_back(directory->getPath()); + { + if (directory->getType() == Database::MediaDirectory::Audio) + pathes.push_back(directory->getPath()); + } } BOOST_FOREACH( boost::filesystem::path p, pathes) @@ -311,6 +316,7 @@ Updater::refreshAudioDirectory( const boost::filesystem::path& p, Stats& stats) typedef std::vector Paths; // store paths, + // TODO use a recursive directory iterator instead Paths files; std::copy(boost::filesystem::directory_iterator(p), boost::filesystem::directory_iterator(), std::back_inserter(files)); diff --git a/database/MediaDirectory.cpp b/database/MediaDirectory.cpp index 39b0de37..63c42b03 100644 --- a/database/MediaDirectory.cpp +++ b/database/MediaDirectory.cpp @@ -44,5 +44,10 @@ MediaDirectory::getAll(Wt::Dbo::Session& session) return std::vector(res.begin(), res.end()); } +MediaDirectory::pointer +MediaDirectory::getByPath(Wt::Dbo::Session& session, boost::filesystem::path p) +{ + return session.find().where("path = ?").bind( p.string() ); +} } // namespace Database diff --git a/database/MediaDirectory.hpp b/database/MediaDirectory.hpp index f49b153e..0fafb925 100644 --- a/database/MediaDirectory.hpp +++ b/database/MediaDirectory.hpp @@ -76,6 +76,7 @@ class MediaDirectory // Accessors static pointer create(Wt::Dbo::Session& session, boost::filesystem::path p, Type type); static std::vector getAll(Wt::Dbo::Session& session); + static pointer getByPath(Wt::Dbo::Session& session, boost::filesystem::path p); static void eraseAll(Wt::Dbo::Session& session); diff --git a/ui/approot/templates.xml b/ui/approot/templates.xml index 96fd2262..e5300643 100644 --- a/ui/approot/templates.xml +++ b/ui/approot/templates.xml @@ -184,12 +184,12 @@ - + ${title}
${path} @@ -198,7 +198,29 @@ ${path-info}
+
+ +
+ ${type} +
+
+ ${type-info} +
+
+
+
+ ${save-button} ${cancel-button} +
+
+ ${apply-info} +
+
+ + ${title} +