WIP. Improved database cleanup + various db fixes

This commit is contained in:
emeric
2014-08-07 15:29:54 +02:00
parent 5bdabec325
commit 2fbb1a7260
15 changed files with 274 additions and 128 deletions
+28 -2
View File
@@ -9,6 +9,9 @@
#include "SettingsMediaDirectories.hpp"
#include "SettingsUsers.hpp"
#include "service/ServiceManager.hpp"
#include "service/DatabaseUpdateService.hpp"
#include "Settings.hpp"
namespace UserInterface {
@@ -35,8 +38,14 @@ _sessionData(sessionData)
menu->addItem("Audio", new AudioFormView(sessionData, Database::User::getId(user)));
if (user->isAdmin())
{
menu->addItem("Media Folders", new MediaDirectories(sessionData));
menu->addItem("Database Update", new DatabaseFormView(sessionData));
MediaDirectories* mediaDirectory = new MediaDirectories(sessionData);
mediaDirectory->changed().connect(this, &Settings::handleDatabaseSettingsChanged);
menu->addItem("Media Folders", mediaDirectory);
DatabaseFormView* databaseFormView = new DatabaseFormView(sessionData);
databaseFormView->changed().connect(this, &Settings::handleDatabaseSettingsChanged);
menu->addItem("Database Update", databaseFormView);
menu->addItem("Users", new Users(sessionData));
}
else
@@ -47,5 +56,22 @@ _sessionData(sessionData)
addWidget(contents);
}
void
Settings::handleDatabaseSettingsChanged()
{
// On settings change, request an immediate scan
{
Wt::Dbo::Transaction transaction(_sessionData.getDatabaseHandler().getSession());
Database::MediaDirectorySettings::get(_sessionData.getDatabaseHandler().getSession()).modify()->setManualScanRequested(true);
}
// Restarting the update service
boost::lock_guard<boost::mutex> serviceLock (ServiceManager::instance().mutex());
DatabaseUpdateService::pointer service = ServiceManager::instance().getService<DatabaseUpdateService>();
if (service)
service->restart();
}
} // namespace Settings
} // namespace UserInterface
+2
View File
@@ -12,6 +12,8 @@ class Settings : public Wt::WContainerWidget
private:
void handleDatabaseSettingsChanged();
SessionData& _sessionData;
};
+1 -11
View File
@@ -10,9 +10,6 @@
#include "database/MediaDirectory.hpp"
#include "service/ServiceManager.hpp"
#include "service/DatabaseUpdateService.hpp"
#include "common/DirectoryValidator.hpp"
#include "SettingsDatabaseFormView.hpp"
@@ -291,14 +288,7 @@ DatabaseFormView::processSave()
// Make the model to commit data into DB
model->saveData();
// Restarting the update service
{
boost::lock_guard<boost::mutex> serviceLock (ServiceManager::instance().mutex());
DatabaseUpdateService::pointer service = ServiceManager::instance().getService<DatabaseUpdateService>();
if (service)
service->restart();
}
_sigChanged.emit();
// uncheck the special button
model->setValue(DatabaseFormModel::UpdateRequestImmediateField, false);
+5
View File
@@ -4,6 +4,7 @@
#include <Wt/WContainerWidget>
#include <Wt/WTemplateFormView>
#include <Wt/WText>
#include <Wt/WSignal>
#include "common/SessionData.hpp"
@@ -17,8 +18,12 @@ class DatabaseFormView : public Wt::WTemplateFormView
public:
DatabaseFormView(SessionData& sessionData, Wt::WContainerWidget *parent = 0);
Wt::Signal<void>& changed() { return _sigChanged; }
private:
Wt::Signal<void> _sigChanged;
void processSave();
void processDiscard();
+12 -4
View File
@@ -75,14 +75,14 @@ MediaDirectories::refresh(void)
Wt::WPushButton* delBtn = new Wt::WPushButton("Delete");
delBtn->setStyleClass("btn-danger");
_table->elementAt(id, 3)->addWidget(delBtn);
delBtn->clicked().connect(boost::bind( &MediaDirectories::handleDelMediaDirectory, this, mediaDirectory->getPath() ) );
delBtn->clicked().connect(boost::bind( &MediaDirectories::handleDelMediaDirectory, this, mediaDirectory->getPath(), mediaDirectory->getType() ) );
++id;
}
}
void
MediaDirectories::handleDelMediaDirectory(boost::filesystem::path p)
MediaDirectories::handleDelMediaDirectory(boost::filesystem::path p, Database::MediaDirectory::Type type)
{
Wt::WMessageBox *messageBox = new Wt::WMessageBox
("Delete Folder",
@@ -98,12 +98,15 @@ MediaDirectories::handleDelMediaDirectory(boost::filesystem::path p)
Wt::Dbo::Transaction transaction(_db.getSession());
// Delete the media diretory
Database::MediaDirectory::pointer mediaDirectory = Database::MediaDirectory::getByPath(_db.getSession(), p);
Database::MediaDirectory::pointer mediaDirectory = Database::MediaDirectory::get(_db.getSession(), p, type);
if (mediaDirectory)
mediaDirectory.remove();
}
refresh();
// Emit something changed in the settings
_sigChanged.emit();
}
delete messageBox;
@@ -129,10 +132,15 @@ MediaDirectories::handleMediaDirectoryFormCompleted(bool changed)
{
_stack->setCurrentIndex(0);
// Refresh the user table if a change has been made
if (changed)
{
// Refresh the user table if a change has been made
refresh();
// Emit something changed in the settings
_sigChanged.emit();
}
// Delete the form view
delete _stack->widget(1);
+8 -1
View File
@@ -4,6 +4,9 @@
#include <Wt/WStackedWidget>
#include <Wt/WContainerWidget>
#include <Wt/WTable>
#include <Wt/WSignal>
#include "database/MediaDirectory.hpp"
#include "common/SessionData.hpp"
@@ -17,11 +20,15 @@ class MediaDirectories : public Wt::WContainerWidget
void refresh();
Wt::Signal<void>& changed() { return _sigChanged; }
private:
Wt::Signal<void> _sigChanged;
void handleMediaDirectoryFormCompleted(bool changed);
void handleDelMediaDirectory(boost::filesystem::path p);
void handleDelMediaDirectory(boost::filesystem::path p, Database::MediaDirectory::Type type);
void handleCreateMediaDirectory(void);
Database::Handler& _db;
@@ -51,6 +51,12 @@ class MediaDirectoryFormModel : public Wt::WFormModel
Database::MediaDirectory::Type type
= (valueText(TypeField) == "Audio") ? Database::MediaDirectory::Audio : Database::MediaDirectory::Video;
if (Database::MediaDirectory::get(_db.getSession(), valueText(PathField).toUTF8(), type))
{
error = "This Path/Type already exists!";
return false;
}
Database::MediaDirectory::create(_db.getSession(), valueText(PathField).toUTF8(), type);
}