WIP. Improved database cleanup + various db fixes
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -12,6 +12,8 @@ class Settings : public Wt::WContainerWidget
|
||||
|
||||
private:
|
||||
|
||||
void handleDatabaseSettingsChanged();
|
||||
|
||||
SessionData& _sessionData;
|
||||
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user