Added 'hourly' scan period in the scanner setings. fixes #109
This commit is contained in:
@@ -37,6 +37,7 @@
|
|||||||
<!--Administration-->
|
<!--Administration-->
|
||||||
<message id="Lms.Admin.Database.daily">Daily</message>
|
<message id="Lms.Admin.Database.daily">Daily</message>
|
||||||
<message id="Lms.Admin.Database.database">Music collection</message>
|
<message id="Lms.Admin.Database.database">Music collection</message>
|
||||||
|
<message id="Lms.Admin.Database.hourly">Hourly</message>
|
||||||
<message id="Lms.Admin.Database.immediate-scan">Scan now!</message>
|
<message id="Lms.Admin.Database.immediate-scan">Scan now!</message>
|
||||||
<message id="Lms.Admin.Database.monthly">Monthly</message>
|
<message id="Lms.Admin.Database.monthly">Monthly</message>
|
||||||
<message id="Lms.Admin.Database.menu-database"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Music collection</message>
|
<message id="Lms.Admin.Database.menu-database"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Music collection</message>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
<!--Administration-->
|
<!--Administration-->
|
||||||
<message id="Lms.Admin.Database.daily">Tous les jours</message>
|
<message id="Lms.Admin.Database.daily">Tous les jours</message>
|
||||||
<message id="Lms.Admin.Database.database">Collection de musiques</message>
|
<message id="Lms.Admin.Database.database">Collection de musiques</message>
|
||||||
|
<message id="Lms.Admin.Database.hourly">Toutes les heures</message>
|
||||||
<message id="Lms.Admin.Database.immediate-scan">Scanner maintenant !</message>
|
<message id="Lms.Admin.Database.immediate-scan">Scanner maintenant !</message>
|
||||||
<message id="Lms.Admin.Database.monthly">Tous les mois</message>
|
<message id="Lms.Admin.Database.monthly">Tous les mois</message>
|
||||||
<message id="Lms.Admin.Database.menu-database"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Collection de musiques</message>
|
<message id="Lms.Admin.Database.menu-database"><i class="fa fa-fw fa-database" aria-hidden="true"></i> Collection de musiques</message>
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ class ScanSettings : public Wt::Dbo::Dbo<ScanSettings>
|
|||||||
Never = 0,
|
Never = 0,
|
||||||
Daily,
|
Daily,
|
||||||
Weekly,
|
Weekly,
|
||||||
Monthly
|
Monthly,
|
||||||
|
Hourly,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Do not modify values (just add)
|
// Do not modify values (just add)
|
||||||
|
|||||||
@@ -368,28 +368,32 @@ Scanner::scheduleNextScan()
|
|||||||
|
|
||||||
const Wt::WDateTime now {Wt::WLocalDateTime::currentServerDateTime().toUTC()};
|
const Wt::WDateTime now {Wt::WLocalDateTime::currentServerDateTime().toUTC()};
|
||||||
|
|
||||||
Wt::WDate nextScanDate;
|
Wt::WDateTime nextScanDateTime;
|
||||||
switch (_updatePeriod)
|
switch (_updatePeriod)
|
||||||
{
|
{
|
||||||
case ScanSettings::UpdatePeriod::Daily:
|
case ScanSettings::UpdatePeriod::Daily:
|
||||||
if (now.time() < _startTime)
|
if (now.time() < _startTime)
|
||||||
nextScanDate = now.date();
|
nextScanDateTime = {now.date(), _startTime};
|
||||||
else
|
else
|
||||||
nextScanDate = now.date().addDays(1);
|
nextScanDateTime = {now.date().addDays(1), _startTime};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ScanSettings::UpdatePeriod::Weekly:
|
case ScanSettings::UpdatePeriod::Weekly:
|
||||||
if (now.time() < _startTime && now.date().dayOfWeek() == 1)
|
if (now.time() < _startTime && now.date().dayOfWeek() == 1)
|
||||||
nextScanDate = now.date();
|
nextScanDateTime = {now.date(), _startTime};
|
||||||
else
|
else
|
||||||
nextScanDate = getNextMonday(now.date());
|
nextScanDateTime = {getNextMonday(now.date()), _startTime};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ScanSettings::UpdatePeriod::Monthly:
|
case ScanSettings::UpdatePeriod::Monthly:
|
||||||
if (now.time() < _startTime && now.date().day() == 1)
|
if (now.time() < _startTime && now.date().day() == 1)
|
||||||
nextScanDate = now.date();
|
nextScanDateTime = {now.date(), _startTime};
|
||||||
else
|
else
|
||||||
nextScanDate = getNextFirstOfMonth(now.date());
|
nextScanDateTime = {getNextFirstOfMonth(now.date()), _startTime};
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ScanSettings::UpdatePeriod::Hourly:
|
||||||
|
nextScanDateTime = {now.date(), now.time().addSecs(3600)};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ScanSettings::UpdatePeriod::Never:
|
case ScanSettings::UpdatePeriod::Never:
|
||||||
@@ -397,13 +401,8 @@ Scanner::scheduleNextScan()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Wt::WDateTime nextScanDateTime;
|
if (nextScanDateTime.isValid())
|
||||||
|
|
||||||
if (nextScanDate.isValid())
|
|
||||||
{
|
|
||||||
nextScanDateTime = Wt::WDateTime {nextScanDate, _startTime};
|
|
||||||
scheduleScan(false, nextScanDateTime);
|
scheduleScan(false, nextScanDateTime);
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
std::unique_lock lock {_statusMutex};
|
std::unique_lock lock {_statusMutex};
|
||||||
|
|||||||
@@ -48,11 +48,13 @@ class DatabaseSettingsModel : public Wt::WFormModel
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Associate each field with a unique string literal.
|
// Associate each field with a unique string literal.
|
||||||
static inline const Field MediaDirectoryField {"media-directory"};
|
static inline constexpr Field MediaDirectoryField {"media-directory"};
|
||||||
static inline const Field UpdatePeriodField {"update-period"};
|
static inline constexpr Field UpdatePeriodField {"update-period"};
|
||||||
static inline const Field UpdateStartTimeField {"update-start-time"};
|
static inline constexpr Field UpdateStartTimeField {"update-start-time"};
|
||||||
static inline const Field RecommendationEngineTypeField {"recommendation-engine-type"};
|
static inline constexpr Field RecommendationEngineTypeField {"recommendation-engine-type"};
|
||||||
static inline const Field TagsField {"tags"};
|
static inline constexpr Field TagsField {"tags"};
|
||||||
|
|
||||||
|
using UpdatePeriodModel = ValueStringModel<ScanSettings::UpdatePeriod>;
|
||||||
|
|
||||||
DatabaseSettingsModel()
|
DatabaseSettingsModel()
|
||||||
{
|
{
|
||||||
@@ -77,7 +79,7 @@ class DatabaseSettingsModel : public Wt::WFormModel
|
|||||||
loadData();
|
loadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<Wt::WAbstractItemModel> updatePeriodModel() { return _updatePeriodModel; }
|
std::shared_ptr<UpdatePeriodModel> updatePeriodModel() { return _updatePeriodModel; }
|
||||||
std::shared_ptr<Wt::WAbstractItemModel> updateStartTimeModel() { return _updateStartTimeModel; }
|
std::shared_ptr<Wt::WAbstractItemModel> updateStartTimeModel() { return _updateStartTimeModel; }
|
||||||
std::shared_ptr<Wt::WAbstractItemModel> recommendationEngineTypeModel() { return _recommendationEngineTypeModel; }
|
std::shared_ptr<Wt::WAbstractItemModel> recommendationEngineTypeModel() { return _recommendationEngineTypeModel; }
|
||||||
|
|
||||||
@@ -97,6 +99,12 @@ class DatabaseSettingsModel : public Wt::WFormModel
|
|||||||
if (startTimeRow)
|
if (startTimeRow)
|
||||||
setValue(UpdateStartTimeField, _updateStartTimeModel->getString(*startTimeRow));
|
setValue(UpdateStartTimeField, _updateStartTimeModel->getString(*startTimeRow));
|
||||||
|
|
||||||
|
if (scanSettings->getUpdatePeriod() == ScanSettings::UpdatePeriod::Hourly
|
||||||
|
|| scanSettings->getUpdatePeriod() == ScanSettings::UpdatePeriod::Never)
|
||||||
|
{
|
||||||
|
setReadOnly(DatabaseSettingsModel::UpdateStartTimeField, true);
|
||||||
|
}
|
||||||
|
|
||||||
auto recommendationEngineTypeRow {_recommendationEngineTypeModel->getRowFromValue(scanSettings->getRecommendationEngineType())};
|
auto recommendationEngineTypeRow {_recommendationEngineTypeModel->getRowFromValue(scanSettings->getRecommendationEngineType())};
|
||||||
if (recommendationEngineTypeRow)
|
if (recommendationEngineTypeRow)
|
||||||
setValue(RecommendationEngineTypeField, _recommendationEngineTypeModel->getString(*recommendationEngineTypeRow));
|
setValue(RecommendationEngineTypeField, _recommendationEngineTypeModel->getString(*recommendationEngineTypeRow));
|
||||||
@@ -145,6 +153,7 @@ class DatabaseSettingsModel : public Wt::WFormModel
|
|||||||
{
|
{
|
||||||
_updatePeriodModel = std::make_shared<ValueStringModel<ScanSettings::UpdatePeriod>>();
|
_updatePeriodModel = std::make_shared<ValueStringModel<ScanSettings::UpdatePeriod>>();
|
||||||
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.never"), ScanSettings::UpdatePeriod::Never);
|
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.never"), ScanSettings::UpdatePeriod::Never);
|
||||||
|
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.hourly"), ScanSettings::UpdatePeriod::Hourly);
|
||||||
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.daily"), ScanSettings::UpdatePeriod::Daily);
|
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.daily"), ScanSettings::UpdatePeriod::Daily);
|
||||||
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.weekly"), ScanSettings::UpdatePeriod::Weekly);
|
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.weekly"), ScanSettings::UpdatePeriod::Weekly);
|
||||||
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.monthly"), ScanSettings::UpdatePeriod::Monthly);
|
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.monthly"), ScanSettings::UpdatePeriod::Monthly);
|
||||||
@@ -161,7 +170,7 @@ class DatabaseSettingsModel : public Wt::WFormModel
|
|||||||
_recommendationEngineTypeModel->add(Wt::WString::tr("Lms.Admin.Database.recommendation-engine-type.features"), ScanSettings::RecommendationEngineType::Features);
|
_recommendationEngineTypeModel->add(Wt::WString::tr("Lms.Admin.Database.recommendation-engine-type.features"), ScanSettings::RecommendationEngineType::Features);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<ValueStringModel<ScanSettings::UpdatePeriod>> _updatePeriodModel;
|
std::shared_ptr<UpdatePeriodModel> _updatePeriodModel;
|
||||||
std::shared_ptr<ValueStringModel<Wt::WTime>> _updateStartTimeModel;
|
std::shared_ptr<ValueStringModel<Wt::WTime>> _updateStartTimeModel;
|
||||||
std::shared_ptr<ValueStringModel<ScanSettings::RecommendationEngineType>> _recommendationEngineTypeModel;
|
std::shared_ptr<ValueStringModel<ScanSettings::RecommendationEngineType>> _recommendationEngineTypeModel;
|
||||||
};
|
};
|
||||||
@@ -193,6 +202,13 @@ DatabaseSettingsView::refreshView()
|
|||||||
// Update Period
|
// Update Period
|
||||||
auto updatePeriod {std::make_unique<Wt::WComboBox>()};
|
auto updatePeriod {std::make_unique<Wt::WComboBox>()};
|
||||||
updatePeriod->setModel(model->updatePeriodModel());
|
updatePeriod->setModel(model->updatePeriodModel());
|
||||||
|
updatePeriod->activated().connect([=](int row)
|
||||||
|
{
|
||||||
|
const ScanSettings::UpdatePeriod period {model->updatePeriodModel()->getValue(row)};
|
||||||
|
model->setReadOnly(DatabaseSettingsModel::UpdateStartTimeField, period == ScanSettings::UpdatePeriod::Hourly || period == ScanSettings::UpdatePeriod::Never);
|
||||||
|
t->updateModel(model.get());
|
||||||
|
t->updateView(model.get());
|
||||||
|
});
|
||||||
t->setFormWidget(DatabaseSettingsModel::UpdatePeriodField, std::move(updatePeriod));
|
t->setFormWidget(DatabaseSettingsModel::UpdatePeriodField, std::move(updatePeriod));
|
||||||
|
|
||||||
// Update Start Time
|
// Update Start Time
|
||||||
|
|||||||
Reference in New Issue
Block a user