Centralized scan settings into a dedicated ScanSettings table

This commit is contained in:
emeric
2018-05-20 14:38:04 +02:00
parent 702e3098a4
commit f1c12ebb4d
18 changed files with 290 additions and 410 deletions
+24 -21
View File
@@ -29,8 +29,6 @@
#include <Wt/WStringListModel.h>
#include "common/Validators.hpp"
#include "database/MediaDirectory.hpp"
#include "scanner/MediaScanner.hpp"
#include "utils/Logger.hpp"
#include "utils/Utils.hpp"
@@ -80,40 +78,45 @@ class DatabaseSettingsModel : public Wt::WFormModel
Wt::Dbo::Transaction transaction(LmsApp->getDboSession());
std::vector<MediaDirectory::pointer> mediaDirectories = MediaDirectory::getAll(LmsApp->getDboSession());
if (!mediaDirectories.empty())
setValue(MediaDirectoryField, mediaDirectories.front()->getPath().string());
auto scanSettings = ScanSettings::get(LmsApp->getDboSession());
auto periodRow = getUpdatePeriodModelRow( Scanner::getUpdatePeriod(LmsApp->getDboSession()) );
setValue(MediaDirectoryField, scanSettings->getMediaDirectory());
auto periodRow = getUpdatePeriodModelRow( scanSettings->getUpdatePeriod() );
if (periodRow)
setValue(UpdatePeriodField, updatePeriodString(*periodRow));
auto startTimeRow = getUpdateStartTimeModelRow( Scanner::getUpdateStartTime(LmsApp->getDboSession()) );
auto startTimeRow = getUpdateStartTimeModelRow( scanSettings->getUpdateStartTime() );
if (startTimeRow)
setValue(UpdateStartTimeField, updateStartTimeString(*startTimeRow) );
auto clusterTypes = Scanner::getClusterTypes(LmsApp->getDboSession());
auto clusterTypes = scanSettings->getClusterTypes();
if (!clusterTypes.empty())
setValue(TagsField, joinStrings(std::vector<std::string>(clusterTypes.begin(), clusterTypes.end()), " "));
{
std::vector<std::string> names;
std::transform(clusterTypes.begin(), clusterTypes.end(),std::back_inserter(names), [](auto clusterType) { return clusterType->getName(); });
setValue(TagsField, joinStrings(names, " "));
}
}
void saveData()
{
Wt::Dbo::Transaction transaction(LmsApp->getDboSession());
MediaDirectory::eraseAll(LmsApp->getDboSession());
MediaDirectory::create(LmsApp->getDboSession(), valueText(MediaDirectoryField).toUTF8());
auto scanSettings = ScanSettings::get(LmsApp->getDboSession());
scanSettings.modify()->setMediaDirectory(valueText(MediaDirectoryField).toUTF8());
auto updatePeriodRow = getUpdatePeriodModelRow( valueText(UpdatePeriodField));
assert(updatePeriodRow);
Scanner::setUpdatePeriod(LmsApp->getDboSession(), updatePeriod(*updatePeriodRow));
scanSettings.modify()->setUpdatePeriod(updatePeriod(*updatePeriodRow));
auto startTimeRow = getUpdateStartTimeModelRow( valueText(UpdateStartTimeField));
assert(startTimeRow);
Scanner::setUpdateStartTime(LmsApp->getDboSession(), updateStartTime(*startTimeRow));
scanSettings.modify()->setUpdateStartTime(updateStartTime(*startTimeRow));
auto clusterTypes = splitString(valueText(TagsField).toUTF8(), " ");
Scanner::setClusterTypes(LmsApp->getDboSession(), std::set<std::string>(clusterTypes.begin(), clusterTypes.end()));
scanSettings.modify()->setClusterTypes(std::set<std::string>(clusterTypes.begin(), clusterTypes.end()));
}
boost::optional<int> getUpdatePeriodModelRow(Wt::WString value)
@@ -127,7 +130,7 @@ class DatabaseSettingsModel : public Wt::WFormModel
return boost::none;
}
boost::optional<int> getUpdatePeriodModelRow(Scanner::UpdatePeriod period)
boost::optional<int> getUpdatePeriodModelRow(ScanSettings::UpdatePeriod period)
{
for (int i = 0; i < _updatePeriodModel->rowCount(); ++i)
{
@@ -138,9 +141,9 @@ class DatabaseSettingsModel : public Wt::WFormModel
return boost::none;
}
Scanner::UpdatePeriod updatePeriod(int row)
ScanSettings::UpdatePeriod updatePeriod(int row)
{
return Wt::cpp17::any_cast<Scanner::UpdatePeriod>
return Wt::cpp17::any_cast<ScanSettings::UpdatePeriod>
(_updatePeriodModel->data(_updatePeriodModel->index(row, 0), Wt::ItemDataRole::User));
}
@@ -200,16 +203,16 @@ class DatabaseSettingsModel : public Wt::WFormModel
_updatePeriodModel = std::make_shared<Wt::WStringListModel>();
_updatePeriodModel->addString(Wt::WString::tr("Lms.Admin.Database.never"));
_updatePeriodModel->setData(0, 0, Scanner::UpdatePeriod::Never, Wt::ItemDataRole::User);
_updatePeriodModel->setData(0, 0, ScanSettings::UpdatePeriod::Never, Wt::ItemDataRole::User);
_updatePeriodModel->addString(Wt::WString::tr("Lms.Admin.Database.daily"));
_updatePeriodModel->setData(1, 0, Scanner::UpdatePeriod::Daily, Wt::ItemDataRole::User);
_updatePeriodModel->setData(1, 0, ScanSettings::UpdatePeriod::Daily, Wt::ItemDataRole::User);
_updatePeriodModel->addString(Wt::WString::tr("Lms.Admin.Database.weekly"));
_updatePeriodModel->setData(2, 0, Scanner::UpdatePeriod::Weekly, Wt::ItemDataRole::User);
_updatePeriodModel->setData(2, 0, ScanSettings::UpdatePeriod::Weekly, Wt::ItemDataRole::User);
_updatePeriodModel->addString(Wt::WString::tr("Lms.Admin.Database.monthly"));
_updatePeriodModel->setData(3, 0, Scanner::UpdatePeriod::Monthly, Wt::ItemDataRole::User);
_updatePeriodModel->setData(3, 0, ScanSettings::UpdatePeriod::Monthly, Wt::ItemDataRole::User);
_updateStartTimeModel = std::make_shared<Wt::WStringListModel>();