Removed some global using namespace (not that useful + problems with blobs)

This commit is contained in:
emeric
2025-08-08 19:23:02 +02:00
parent 637e40b2cb
commit d529f4cb98
17 changed files with 189 additions and 224 deletions
+26 -28
View File
@@ -87,8 +87,6 @@ namespace lms::ui
}; };
} // namespace } // namespace
using namespace db;
class SettingsModel : public Wt::WFormModel class SettingsModel : public Wt::WFormModel
{ {
public: public:
@@ -192,7 +190,7 @@ namespace lms::ui
{ {
auto transaction{ LmsApp->getDbSession().createWriteTransaction() }; auto transaction{ LmsApp->getDbSession().createWriteTransaction() };
User::pointer user{ LmsApp->getUser() }; db::User::pointer user{ LmsApp->getUser() };
{ {
const auto artistReleaseSortMethodRow{ _artistReleaseSortMethodModel->getRowFromString(valueText(ArtistReleaseSortMethodField)) }; const auto artistReleaseSortMethodRow{ _artistReleaseSortMethodModel->getRowFromString(valueText(ArtistReleaseSortMethodField)) };
@@ -307,7 +305,7 @@ namespace lms::ui
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
const User::pointer user{ LmsApp->getUser() }; const db::User::pointer user{ LmsApp->getUser() };
// UI // UI
{ {
@@ -396,7 +394,7 @@ namespace lms::ui
setValue(ListenBrainzTokenField, Wt::WString::fromUTF8(std::string{ listenBrainzToken->getAsString() })); setValue(ListenBrainzTokenField, Wt::WString::fromUTF8(std::string{ listenBrainzToken->getAsString() }));
{ {
const bool usesListenBrainz{ user->getScrobblingBackend() == ScrobblingBackend::ListenBrainz || user->getFeedbackBackend() == FeedbackBackend::ListenBrainz }; const bool usesListenBrainz{ user->getScrobblingBackend() == db::ScrobblingBackend::ListenBrainz || user->getFeedbackBackend() == db::FeedbackBackend::ListenBrainz };
setReadOnly(SettingsModel::ListenBrainzTokenField, !usesListenBrainz); setReadOnly(SettingsModel::ListenBrainzTokenField, !usesListenBrainz);
validator(SettingsModel::ListenBrainzTokenField)->setMandatory(usesListenBrainz); validator(SettingsModel::ListenBrainzTokenField)->setMandatory(usesListenBrainz);
} }
@@ -472,17 +470,17 @@ namespace lms::ui
_transcodingModeModeModel->add(Wt::WString::tr("Lms.Settings.transcoding-mode.never"), MediaPlayer::Settings::Transcoding::Mode::Never); _transcodingModeModeModel->add(Wt::WString::tr("Lms.Settings.transcoding-mode.never"), MediaPlayer::Settings::Transcoding::Mode::Never);
_transcodingModeModeModel->add(Wt::WString::tr("Lms.Settings.transcoding-mode.if-format-not-supported"), MediaPlayer::Settings::Transcoding::Mode::IfFormatNotSupported); _transcodingModeModeModel->add(Wt::WString::tr("Lms.Settings.transcoding-mode.if-format-not-supported"), MediaPlayer::Settings::Transcoding::Mode::IfFormatNotSupported);
_transcodingOutputBitrateModel = std::make_shared<ValueStringModel<Bitrate>>(); _transcodingOutputBitrateModel = std::make_shared<ValueStringModel<db::Bitrate>>();
visitAllowedAudioBitrates([&](const Bitrate bitrate) { db::visitAllowedAudioBitrates([&](const db::Bitrate bitrate) {
_transcodingOutputBitrateModel->add(Wt::WString::fromUTF8(std::to_string(bitrate / 1000)), bitrate); _transcodingOutputBitrateModel->add(Wt::WString::fromUTF8(std::to_string(bitrate / 1000)), bitrate);
}); });
_transcodingOutputFormatModel = std::make_shared<ValueStringModel<TranscodingOutputFormat>>(); _transcodingOutputFormatModel = std::make_shared<ValueStringModel<db::TranscodingOutputFormat>>();
_transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.mp3"), TranscodingOutputFormat::MP3); _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.mp3"), db::TranscodingOutputFormat::MP3);
_transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.ogg_opus"), TranscodingOutputFormat::OGG_OPUS); _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.ogg_opus"), db::TranscodingOutputFormat::OGG_OPUS);
_transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.matroska_opus"), TranscodingOutputFormat::MATROSKA_OPUS); _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.matroska_opus"), db::TranscodingOutputFormat::MATROSKA_OPUS);
_transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.ogg_vorbis"), TranscodingOutputFormat::OGG_VORBIS); _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.ogg_vorbis"), db::TranscodingOutputFormat::OGG_VORBIS);
_transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.webm_vorbis"), TranscodingOutputFormat::WEBM_VORBIS); _transcodingOutputFormatModel->add(Wt::WString::tr("Lms.Settings.transcoding-output-format.webm_vorbis"), db::TranscodingOutputFormat::WEBM_VORBIS);
_replayGainModeModel = std::make_shared<ReplayGainModeModel>(); _replayGainModeModel = std::make_shared<ReplayGainModeModel>();
_replayGainModeModel->add(Wt::WString::tr("Lms.Settings.replaygain-mode.none"), MediaPlayer::Settings::ReplayGain::Mode::None); _replayGainModeModel->add(Wt::WString::tr("Lms.Settings.replaygain-mode.none"), MediaPlayer::Settings::ReplayGain::Mode::None);
@@ -490,18 +488,18 @@ namespace lms::ui
_replayGainModeModel->add(Wt::WString::tr("Lms.Settings.replaygain-mode.track"), MediaPlayer::Settings::ReplayGain::Mode::Track); _replayGainModeModel->add(Wt::WString::tr("Lms.Settings.replaygain-mode.track"), MediaPlayer::Settings::ReplayGain::Mode::Track);
_replayGainModeModel->add(Wt::WString::tr("Lms.Settings.replaygain-mode.release"), MediaPlayer::Settings::ReplayGain::Mode::Release); _replayGainModeModel->add(Wt::WString::tr("Lms.Settings.replaygain-mode.release"), MediaPlayer::Settings::ReplayGain::Mode::Release);
_subsonicArtistListModeModel = std::make_shared<ValueStringModel<SubsonicArtistListMode>>(); _subsonicArtistListModeModel = std::make_shared<ValueStringModel<db::SubsonicArtistListMode>>();
_subsonicArtistListModeModel->add(Wt::WString::tr("Lms.Settings.subsonic-artist-list-mode.all-artists"), SubsonicArtistListMode::AllArtists); _subsonicArtistListModeModel->add(Wt::WString::tr("Lms.Settings.subsonic-artist-list-mode.all-artists"), db::SubsonicArtistListMode::AllArtists);
_subsonicArtistListModeModel->add(Wt::WString::tr("Lms.Settings.subsonic-artist-list-mode.release-artists"), SubsonicArtistListMode::ReleaseArtists); _subsonicArtistListModeModel->add(Wt::WString::tr("Lms.Settings.subsonic-artist-list-mode.release-artists"), db::SubsonicArtistListMode::ReleaseArtists);
_subsonicArtistListModeModel->add(Wt::WString::tr("Lms.Settings.subsonic-artist-list-mode.track-artists"), SubsonicArtistListMode::TrackArtists); _subsonicArtistListModeModel->add(Wt::WString::tr("Lms.Settings.subsonic-artist-list-mode.track-artists"), db::SubsonicArtistListMode::TrackArtists);
_feedbackBackendModel = std::make_shared<ValueStringModel<FeedbackBackend>>(); _feedbackBackendModel = std::make_shared<ValueStringModel<db::FeedbackBackend>>();
_feedbackBackendModel->add(Wt::WString::tr("Lms.Settings.backend.internal"), FeedbackBackend::Internal); _feedbackBackendModel->add(Wt::WString::tr("Lms.Settings.backend.internal"), db::FeedbackBackend::Internal);
_feedbackBackendModel->add(Wt::WString::tr("Lms.Settings.backend.listenbrainz"), FeedbackBackend::ListenBrainz); _feedbackBackendModel->add(Wt::WString::tr("Lms.Settings.backend.listenbrainz"), db::FeedbackBackend::ListenBrainz);
_scrobblingBackendModel = std::make_shared<ValueStringModel<ScrobblingBackend>>(); _scrobblingBackendModel = std::make_shared<ValueStringModel<db::ScrobblingBackend>>();
_scrobblingBackendModel->add(Wt::WString::tr("Lms.Settings.backend.internal"), ScrobblingBackend::Internal); _scrobblingBackendModel->add(Wt::WString::tr("Lms.Settings.backend.internal"), db::ScrobblingBackend::Internal);
_scrobblingBackendModel->add(Wt::WString::tr("Lms.Settings.backend.listenbrainz"), ScrobblingBackend::ListenBrainz); _scrobblingBackendModel->add(Wt::WString::tr("Lms.Settings.backend.listenbrainz"), db::ScrobblingBackend::ListenBrainz);
} }
auth::IPasswordService* _authPasswordService{}; auth::IPasswordService* _authPasswordService{};
@@ -512,10 +510,10 @@ namespace lms::ui
std::shared_ptr<ArtistReleaseSortMethodModel> _artistReleaseSortMethodModel; std::shared_ptr<ArtistReleaseSortMethodModel> _artistReleaseSortMethodModel;
std::shared_ptr<ArtistRelationshipsModel> _artistRelationshipsModel; std::shared_ptr<ArtistRelationshipsModel> _artistRelationshipsModel;
std::shared_ptr<TranscodingModeModel> _transcodingModeModeModel; std::shared_ptr<TranscodingModeModel> _transcodingModeModeModel;
std::shared_ptr<ValueStringModel<Bitrate>> _transcodingOutputBitrateModel; std::shared_ptr<ValueStringModel<db::Bitrate>> _transcodingOutputBitrateModel;
std::shared_ptr<ValueStringModel<TranscodingOutputFormat>> _transcodingOutputFormatModel; std::shared_ptr<ValueStringModel<db::TranscodingOutputFormat>> _transcodingOutputFormatModel;
std::shared_ptr<ReplayGainModeModel> _replayGainModeModel; std::shared_ptr<ReplayGainModeModel> _replayGainModeModel;
std::shared_ptr<ValueStringModel<SubsonicArtistListMode>> _subsonicArtistListModeModel; std::shared_ptr<ValueStringModel<db::SubsonicArtistListMode>> _subsonicArtistListModeModel;
std::shared_ptr<FeedbackBackendModel> _feedbackBackendModel; std::shared_ptr<FeedbackBackendModel> _feedbackBackendModel;
std::shared_ptr<ScrobblingBackendModel> _scrobblingBackendModel; std::shared_ptr<ScrobblingBackendModel> _scrobblingBackendModel;
}; };
@@ -740,8 +738,8 @@ namespace lms::ui
} }
auto updateListenBrainzTokenField{ [=] { auto updateListenBrainzTokenField{ [=] {
const bool enable{ model->getFeedbackBackendModel()->getValue(feedbackBackendRaw->currentIndex()) == FeedbackBackend::ListenBrainz const bool enable{ model->getFeedbackBackendModel()->getValue(feedbackBackendRaw->currentIndex()) == db::FeedbackBackend::ListenBrainz
|| model->getScrobblingBackendModel()->getValue(scrobblingBackendRaw->currentIndex()) == ScrobblingBackend::ListenBrainz }; || model->getScrobblingBackendModel()->getValue(scrobblingBackendRaw->currentIndex()) == db::ScrobblingBackend::ListenBrainz };
model->setReadOnly(SettingsModel::ListenBrainzTokenField, !enable); model->setReadOnly(SettingsModel::ListenBrainzTokenField, !enable);
model->validator(SettingsModel::ListenBrainzTokenField)->setMandatory(enable); model->validator(SettingsModel::ListenBrainzTokenField)->setMandatory(enable);
+1 -3
View File
@@ -83,8 +83,6 @@ namespace lms::ui
void MediaLibrariesView::showDeleteLibraryModal(db::MediaLibraryId mediaLibraryId, Wt::WTemplate* libraryEntry) void MediaLibrariesView::showDeleteLibraryModal(db::MediaLibraryId mediaLibraryId, Wt::WTemplate* libraryEntry)
{ {
using namespace db;
auto modal{ std::make_unique<Wt::WTemplate>(Wt::WString::tr("Lms.Admin.MediaLibraries.template.delete-library")) }; auto modal{ std::make_unique<Wt::WTemplate>(Wt::WString::tr("Lms.Admin.MediaLibraries.template.delete-library")) };
modal->addFunction("tr", &Wt::WTemplate::Functions::tr); modal->addFunction("tr", &Wt::WTemplate::Functions::tr);
Wt::WWidget* modalPtr{ modal.get() }; Wt::WWidget* modalPtr{ modal.get() };
@@ -94,7 +92,7 @@ namespace lms::ui
{ {
auto transaction{ LmsApp->getDbSession().createWriteTransaction() }; auto transaction{ LmsApp->getDbSession().createWriteTransaction() };
db::MediaLibrary::pointer mediaLibrary{ MediaLibrary::find(LmsApp->getDbSession(), mediaLibraryId) }; db::MediaLibrary::pointer mediaLibrary{ db::MediaLibrary::find(LmsApp->getDbSession(), mediaLibraryId) };
if (mediaLibrary) if (mediaLibrary)
mediaLibrary.remove(); mediaLibrary.remove();
} }
+12 -14
View File
@@ -33,14 +33,12 @@
namespace lms::ui namespace lms::ui
{ {
using namespace db;
namespace namespace
{ {
class LibraryNameValidator : public Wt::WValidator class LibraryNameValidator : public Wt::WValidator
{ {
public: public:
LibraryNameValidator(MediaLibraryId libraryId) LibraryNameValidator(db::MediaLibraryId libraryId)
: _libraryId{ libraryId } {} : _libraryId{ libraryId } {}
private: private:
@@ -66,13 +64,13 @@ namespace lms::ui
return result; return result;
} }
const MediaLibraryId _libraryId; const db::MediaLibraryId _libraryId;
}; };
class LibraryRootPathValidator : public Wt::WValidator class LibraryRootPathValidator : public Wt::WValidator
{ {
public: public:
LibraryRootPathValidator(MediaLibraryId libraryId) LibraryRootPathValidator(db::MediaLibraryId libraryId)
: _libraryId{ libraryId } {} : _libraryId{ libraryId } {}
private: private:
@@ -115,7 +113,7 @@ namespace lms::ui
return result; return result;
} }
const MediaLibraryId _libraryId; const db::MediaLibraryId _libraryId;
}; };
class MediaLibraryModel : public Wt::WFormModel class MediaLibraryModel : public Wt::WFormModel
@@ -124,7 +122,7 @@ namespace lms::ui
static inline constexpr Field NameField{ "name" }; static inline constexpr Field NameField{ "name" };
static inline constexpr Field DirectoryField{ "directory" }; static inline constexpr Field DirectoryField{ "directory" };
MediaLibraryModel(MediaLibraryId libraryId) MediaLibraryModel(db::MediaLibraryId libraryId)
: _libraryId{ libraryId } : _libraryId{ libraryId }
{ {
addField(NameField); addField(NameField);
@@ -146,7 +144,7 @@ namespace lms::ui
loadData(); loadData();
} }
MediaLibraryId saveData() db::MediaLibraryId saveData()
{ {
auto& session{ LmsApp->getDbSession() }; auto& session{ LmsApp->getDbSession() };
auto transaction{ LmsApp->getDbSession().createWriteTransaction() }; auto transaction{ LmsApp->getDbSession().createWriteTransaction() };
@@ -154,10 +152,10 @@ namespace lms::ui
std::string name{ valueText(NameField).toUTF8() }; std::string name{ valueText(NameField).toUTF8() };
std::string path{ valueText(DirectoryField).toUTF8() }; std::string path{ valueText(DirectoryField).toUTF8() };
MediaLibrary::pointer library; db::MediaLibrary::pointer library;
if (_libraryId.isValid()) if (_libraryId.isValid())
{ {
library = MediaLibrary::find(session, _libraryId); library = db::MediaLibrary::find(session, _libraryId);
if (library) if (library)
{ {
library.modify()->setName(name); library.modify()->setName(name);
@@ -166,7 +164,7 @@ namespace lms::ui
} }
else else
{ {
library = session.create<MediaLibrary>(name, path); library = session.create<db::MediaLibrary>(name, path);
} }
return library->getId(); return library->getId();
@@ -178,17 +176,17 @@ namespace lms::ui
auto& session{ LmsApp->getDbSession() }; auto& session{ LmsApp->getDbSession() };
auto transaction{ session.createReadTransaction() }; auto transaction{ session.createReadTransaction() };
const MediaLibrary::pointer library{ MediaLibrary::find(session, _libraryId) }; const db::MediaLibrary::pointer library{ db::MediaLibrary::find(session, _libraryId) };
setValue(NameField, std::string{ library->getName() }); setValue(NameField, std::string{ library->getName() });
setValue(DirectoryField, library->getPath().string()); setValue(DirectoryField, library->getPath().string());
} }
const MediaLibraryId _libraryId; const db::MediaLibraryId _libraryId;
}; };
} // namespace } // namespace
MediaLibraryModal::MediaLibraryModal(MediaLibraryId mediaLibraryId) MediaLibraryModal::MediaLibraryModal(db::MediaLibraryId mediaLibraryId)
: Wt::WTemplateFormView{ Wt::WString::tr("Lms.Admin.MediaLibrary.template") } : Wt::WTemplateFormView{ Wt::WString::tr("Lms.Admin.MediaLibrary.template") }
{ {
auto model{ std::make_shared<MediaLibraryModel>(mediaLibraryId) }; auto model{ std::make_shared<MediaLibraryModel>(mediaLibraryId) };
+1 -1
View File
@@ -29,7 +29,7 @@ namespace lms::ui
class MediaLibraryModal : public Wt::WTemplateFormView class MediaLibraryModal : public Wt::WTemplateFormView
{ {
public: public:
MediaLibraryModal(db::MediaLibraryId mediaLibaryId); MediaLibraryModal(db::MediaLibraryId mediaLibraryId);
Wt::Signal<db::MediaLibraryId>& saved() { return _saved; }; Wt::Signal<db::MediaLibraryId>& saved() { return _saved; };
Wt::Signal<>& cancelled() { return _cancelled; } Wt::Signal<>& cancelled() { return _cancelled; }
+17 -19
View File
@@ -42,8 +42,6 @@
namespace lms::ui namespace lms::ui
{ {
using namespace db;
namespace namespace
{ {
class TagDelimitersValidator : public Wt::WValidator class TagDelimitersValidator : public Wt::WValidator
@@ -75,7 +73,7 @@ namespace lms::ui
static inline constexpr Field ArtistImageFallbackToReleaseField{ "artist-image-fallback-to-release" }; static inline constexpr Field ArtistImageFallbackToReleaseField{ "artist-image-fallback-to-release" };
static inline constexpr Field ArtistsToNotSplitField{ "artists-to-not-split" }; static inline constexpr Field ArtistsToNotSplitField{ "artists-to-not-split" };
using UpdatePeriodModel = ValueStringModel<ScanSettings::UpdatePeriod>; using UpdatePeriodModel = ValueStringModel<db::ScanSettings::UpdatePeriod>;
DatabaseSettingsModel() DatabaseSettingsModel()
{ {
@@ -105,7 +103,7 @@ namespace lms::ui
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
const ScanSettings::pointer scanSettings{ ScanSettings::find(LmsApp->getDbSession()) }; const db::ScanSettings::pointer scanSettings{ db::ScanSettings::find(LmsApp->getDbSession()) };
auto periodRow{ _updatePeriodModel->getRowFromValue(scanSettings->getUpdatePeriod()) }; auto periodRow{ _updatePeriodModel->getRowFromValue(scanSettings->getUpdatePeriod()) };
if (periodRow) if (periodRow)
@@ -115,8 +113,8 @@ namespace lms::ui
if (startTimeRow) if (startTimeRow)
setValue(UpdateStartTimeField, _updateStartTimeModel->getString(*startTimeRow)); setValue(UpdateStartTimeField, _updateStartTimeModel->getString(*startTimeRow));
if (scanSettings->getUpdatePeriod() == ScanSettings::UpdatePeriod::Hourly if (scanSettings->getUpdatePeriod() == db::ScanSettings::UpdatePeriod::Hourly
|| scanSettings->getUpdatePeriod() == ScanSettings::UpdatePeriod::Never) || scanSettings->getUpdatePeriod() == db::ScanSettings::UpdatePeriod::Never)
{ {
setReadOnly(UpdateStartTimeField, true); setReadOnly(UpdateStartTimeField, true);
} }
@@ -147,7 +145,7 @@ namespace lms::ui
{ {
auto transaction{ LmsApp->getDbSession().createWriteTransaction() }; auto transaction{ LmsApp->getDbSession().createWriteTransaction() };
ScanSettings::pointer scanSettings{ ScanSettings::find(LmsApp->getDbSession()) }; db::ScanSettings::pointer scanSettings{ db::ScanSettings::find(LmsApp->getDbSession()) };
{ {
const auto updatePeriodRow{ _updatePeriodModel->getRowFromString(valueText(UpdatePeriodField)) }; const auto updatePeriodRow{ _updatePeriodModel->getRowFromString(valueText(UpdatePeriodField)) };
@@ -197,12 +195,12 @@ namespace lms::ui
void void
initializeModels() initializeModels()
{ {
_updatePeriodModel = std::make_shared<ValueStringModel<ScanSettings::UpdatePeriod>>(); _updatePeriodModel = std::make_shared<ValueStringModel<db::ScanSettings::UpdatePeriod>>();
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.never"), ScanSettings::UpdatePeriod::Never); _updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.never"), db::ScanSettings::UpdatePeriod::Never);
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.hourly"), ScanSettings::UpdatePeriod::Hourly); _updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.hourly"), db::ScanSettings::UpdatePeriod::Hourly);
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.daily"), ScanSettings::UpdatePeriod::Daily); _updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.daily"), db::ScanSettings::UpdatePeriod::Daily);
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.weekly"), ScanSettings::UpdatePeriod::Weekly); _updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.weekly"), db::ScanSettings::UpdatePeriod::Weekly);
_updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.monthly"), ScanSettings::UpdatePeriod::Monthly); _updatePeriodModel->add(Wt::WString::tr("Lms.Admin.Database.monthly"), db::ScanSettings::UpdatePeriod::Monthly);
_updateStartTimeModel = std::make_shared<ValueStringModel<Wt::WTime>>(); _updateStartTimeModel = std::make_shared<ValueStringModel<Wt::WTime>>();
for (std::size_t i = 0; i < 24; ++i) for (std::size_t i = 0; i < 24; ++i)
@@ -211,14 +209,14 @@ namespace lms::ui
_updateStartTimeModel->add(time.toString(), time); _updateStartTimeModel->add(time.toString(), time);
} }
_similarityEngineTypeModel = std::make_shared<ValueStringModel<ScanSettings::SimilarityEngineType>>(); _similarityEngineTypeModel = std::make_shared<ValueStringModel<db::ScanSettings::SimilarityEngineType>>();
_similarityEngineTypeModel->add(Wt::WString::tr("Lms.Admin.Database.similarity-engine-type.clusters"), ScanSettings::SimilarityEngineType::Clusters); _similarityEngineTypeModel->add(Wt::WString::tr("Lms.Admin.Database.similarity-engine-type.clusters"), db::ScanSettings::SimilarityEngineType::Clusters);
_similarityEngineTypeModel->add(Wt::WString::tr("Lms.Admin.Database.similarity-engine-type.none"), ScanSettings::SimilarityEngineType::None); _similarityEngineTypeModel->add(Wt::WString::tr("Lms.Admin.Database.similarity-engine-type.none"), db::ScanSettings::SimilarityEngineType::None);
} }
std::shared_ptr<UpdatePeriodModel> _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::SimilarityEngineType>> _similarityEngineTypeModel; std::shared_ptr<ValueStringModel<db::ScanSettings::SimilarityEngineType>> _similarityEngineTypeModel;
}; };
class LineEditEntryModel : public Wt::WFormModel class LineEditEntryModel : public Wt::WFormModel
@@ -362,8 +360,8 @@ namespace lms::ui
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) { updatePeriod->activated().connect([=](int row) {
const ScanSettings::UpdatePeriod period{ model->updatePeriodModel()->getValue(row) }; const db::ScanSettings::UpdatePeriod period{ model->updatePeriodModel()->getValue(row) };
model->setReadOnly(DatabaseSettingsModel::UpdateStartTimeField, period == ScanSettings::UpdatePeriod::Hourly || period == ScanSettings::UpdatePeriod::Never); model->setReadOnly(DatabaseSettingsModel::UpdateStartTimeField, period == db::ScanSettings::UpdatePeriod::Hourly || period == db::ScanSettings::UpdatePeriod::Never);
t->updateModel(model.get()); t->updateModel(model.get());
t->updateView(model.get()); t->updateView(model.get());
}); });
+15 -17
View File
@@ -42,8 +42,6 @@
namespace lms::ui namespace lms::ui
{ {
using namespace db;
class UserModel : public Wt::WFormModel class UserModel : public Wt::WFormModel
{ {
public: public:
@@ -51,7 +49,7 @@ namespace lms::ui
static inline const Field PasswordField{ "password" }; static inline const Field PasswordField{ "password" };
static inline const Field DemoField{ "demo" }; static inline const Field DemoField{ "demo" };
UserModel(std::optional<UserId> userId, auth::IPasswordService* authPasswordService, auth::IAuthTokenService& authTokenService) UserModel(std::optional<db::UserId> userId, auth::IPasswordService* authPasswordService, auth::IAuthTokenService& authTokenService)
: _userId{ userId } : _userId{ userId }
, _authPasswordService{ authPasswordService } , _authPasswordService{ authPasswordService }
, _authTokenService{ authTokenService } , _authTokenService{ authTokenService }
@@ -81,7 +79,7 @@ namespace lms::ui
if (_userId) if (_userId)
{ {
// Update user // Update user
User::pointer user{ User::find(LmsApp->getDbSession(), *_userId) }; db::User::pointer user{ db::User::find(LmsApp->getDbSession(), *_userId) };
if (!user) if (!user)
throw UserNotFoundException{}; throw UserNotFoundException{};
@@ -94,16 +92,16 @@ namespace lms::ui
else else
{ {
// Check races with other endpoints (subsonic API...) // Check races with other endpoints (subsonic API...)
User::pointer user{ User::find(LmsApp->getDbSession(), valueText(LoginField).toUTF8()) }; db::User::pointer user{ db::User::find(LmsApp->getDbSession(), valueText(LoginField).toUTF8()) };
if (user) if (user)
throw UserNotAllowedException{}; throw UserNotAllowedException{};
// Create user // Create user
user = LmsApp->getDbSession().create<User>(valueText(LoginField).toUTF8()); user = LmsApp->getDbSession().create<db::User>(valueText(LoginField).toUTF8());
if (Wt::asNumber(value(DemoField))) if (Wt::asNumber(value(DemoField)))
{ {
user.modify()->setType(UserType::DEMO); user.modify()->setType(db::UserType::DEMO);
// For demo user, we create the subsonic API auth token now as we have no other mean to create it later // For demo user, we create the subsonic API auth token now as we have no other mean to create it later
core::Service<auth::IAuthTokenService>::get()->createAuthToken("subsonic", user->getId(), core::UUID::generate().getAsString()); core::Service<auth::IAuthTokenService>::get()->createAuthToken("subsonic", user->getId(), core::UUID::generate().getAsString());
@@ -122,24 +120,24 @@ namespace lms::ui
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
const User::pointer user{ User::find(LmsApp->getDbSession(), *_userId) }; const db::User::pointer user{ db::User::find(LmsApp->getDbSession(), *_userId) };
if (!user) if (!user)
throw UserNotFoundException{}; throw UserNotFoundException{};
if (user == LmsApp->getUser()) if (user == LmsApp->getUser())
throw UserNotAllowedException{}; throw UserNotAllowedException{};
} }
UserType getUserType() const db::UserType getUserType() const
{ {
if (_userId) if (_userId)
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
const User::pointer user{ User::find(LmsApp->getDbSession(), *_userId) }; const db::User::pointer user{ db::User::find(LmsApp->getDbSession(), *_userId) };
return user->getType(); return user->getType();
} }
return Wt::asNumber(value(DemoField)) ? UserType::DEMO : UserType::REGULAR; return Wt::asNumber(value(DemoField)) ? db::UserType::DEMO : db::UserType::REGULAR;
} }
std::string getLoginName() const std::string getLoginName() const
@@ -148,7 +146,7 @@ namespace lms::ui
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
const User::pointer user{ User::find(LmsApp->getDbSession(), *_userId) }; const db::User::pointer user{ db::User::find(LmsApp->getDbSession(), *_userId) };
return user->getLoginName(); return user->getLoginName();
} }
@@ -163,7 +161,7 @@ namespace lms::ui
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
const User::pointer user{ User::find(LmsApp->getDbSession(), valueText(LoginField).toUTF8()) }; const db::User::pointer user{ db::User::find(LmsApp->getDbSession(), valueText(LoginField).toUTF8()) };
if (user) if (user)
error = Wt::WString::tr("Lms.Admin.User.user-already-exists"); error = Wt::WString::tr("Lms.Admin.User.user-already-exists");
} }
@@ -171,7 +169,7 @@ namespace lms::ui
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
if (Wt::asNumber(value(DemoField)) && User::findDemoUser(LmsApp->getDbSession())) if (Wt::asNumber(value(DemoField)) && db::User::findDemoUser(LmsApp->getDbSession()))
error = Wt::WString::tr("Lms.Admin.User.demo-account-already-exists"); error = Wt::WString::tr("Lms.Admin.User.demo-account-already-exists");
} }
@@ -183,7 +181,7 @@ namespace lms::ui
return false; return false;
} }
std::optional<UserId> _userId; std::optional<db::UserId> _userId;
auth::IPasswordService* _authPasswordService{}; auth::IPasswordService* _authPasswordService{};
auth::IAuthTokenService& _authTokenService; auth::IAuthTokenService& _authTokenService;
}; };
@@ -202,7 +200,7 @@ namespace lms::ui
if (!wApp->internalPathMatches("/admin/user")) if (!wApp->internalPathMatches("/admin/user"))
return; return;
const std::optional<UserId> userId{ core::stringUtils::readAs<UserId::ValueType>(wApp->internalPathNextPart("/admin/user/")) }; const std::optional<db::UserId> userId{ core::stringUtils::readAs<db::UserId::ValueType>(wApp->internalPathNextPart("/admin/user/")) };
clear(); clear();
@@ -220,7 +218,7 @@ namespace lms::ui
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
const User::pointer user{ User::find(LmsApp->getDbSession(), *userId) }; const db::User::pointer user{ db::User::find(LmsApp->getDbSession(), *userId) };
if (!user) if (!user)
throw UserNotFoundException{}; throw UserNotFoundException{};
+4 -9
View File
@@ -23,19 +23,14 @@
#include <Wt/WPushButton.h> #include <Wt/WPushButton.h>
#include <Wt/WTemplate.h> #include <Wt/WTemplate.h>
#include "core/ILogger.hpp"
#include "core/Service.hpp"
#include "database/Session.hpp" #include "database/Session.hpp"
#include "database/objects/User.hpp" #include "database/objects/User.hpp"
#include "services/auth/IPasswordService.hpp"
#include "LmsApplication.hpp" #include "LmsApplication.hpp"
#include "ModalManager.hpp" #include "ModalManager.hpp"
namespace lms::ui namespace lms::ui
{ {
using namespace db;
UsersView::UsersView() UsersView::UsersView()
: Wt::WTemplate{ Wt::WString::tr("Lms.Admin.Users.template") } : Wt::WTemplate{ Wt::WString::tr("Lms.Admin.Users.template") }
{ {
@@ -69,9 +64,9 @@ namespace lms::ui
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
const UserId currentUserId{ LmsApp->getUserId() }; const db::UserId currentUserId{ LmsApp->getUserId() };
User::find(LmsApp->getDbSession(), User::FindParameters{}, [&](const User::pointer& user) { db::User::find(LmsApp->getDbSession(), db::User::FindParameters{}, [&](const db::User::pointer& user) {
const UserId userId{ user->getId() }; const db::UserId userId{ user->getId() };
Wt::WTemplate* entry{ _container->addNew<Wt::WTemplate>(Wt::WString::tr("Lms.Admin.Users.template.entry")) }; Wt::WTemplate* entry{ _container->addNew<Wt::WTemplate>(Wt::WString::tr("Lms.Admin.Users.template.entry")) };
@@ -107,7 +102,7 @@ namespace lms::ui
{ {
auto transaction{ LmsApp->getDbSession().createWriteTransaction() }; auto transaction{ LmsApp->getDbSession().createWriteTransaction() };
User::pointer user{ User::find(LmsApp->getDbSession(), userId) }; db::User::pointer user{ db::User::find(LmsApp->getDbSession(), userId) };
if (user) if (user)
user.remove(); user.remove();
} }
+17 -19
View File
@@ -32,16 +32,14 @@
namespace lms::ui namespace lms::ui
{ {
using namespace db; db::RangeResults<db::ArtistId> ArtistCollector::get(std::optional<db::Range> requestedRange)
RangeResults<ArtistId> ArtistCollector::get(std::optional<db::Range> requestedRange)
{ {
feedback::IFeedbackService& feedbackService{ *core::Service<feedback::IFeedbackService>::get() }; feedback::IFeedbackService& feedbackService{ *core::Service<feedback::IFeedbackService>::get() };
scrobbling::IScrobblingService& scrobblingService{ *core::Service<scrobbling::IScrobblingService>::get() }; scrobbling::IScrobblingService& scrobblingService{ *core::Service<scrobbling::IScrobblingService>::get() };
const Range range{ getActualRange(requestedRange) }; const Range range{ getActualRange(requestedRange) };
RangeResults<ArtistId> artists; db::RangeResults<db::ArtistId> artists;
switch (getMode()) switch (getMode())
{ {
@@ -56,7 +54,7 @@ namespace lms::ui
params.setUser(LmsApp->getUserId()); params.setUser(LmsApp->getUserId());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
params.setLinkType(_linkType); params.setLinkType(_linkType);
params.setSortMethod(ArtistSortMethod::StarredDateDesc); params.setSortMethod(db::ArtistSortMethod::StarredDateDesc);
params.setRange(range); params.setRange(range);
artists = feedbackService.findStarredArtists(params); artists = feedbackService.findStarredArtists(params);
break; break;
@@ -90,48 +88,48 @@ namespace lms::ui
case Mode::RecentlyAdded: case Mode::RecentlyAdded:
{ {
Artist::FindParameters params; db::Artist::FindParameters params;
params.setFilters(getDbFilters()); params.setFilters(getDbFilters());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
params.setLinkType(_linkType); params.setLinkType(_linkType);
params.setSortMethod(ArtistSortMethod::AddedDesc); params.setSortMethod(db::ArtistSortMethod::AddedDesc);
params.setRange(range); params.setRange(range);
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
artists = Artist::findIds(LmsApp->getDbSession(), params); artists = db::Artist::findIds(LmsApp->getDbSession(), params);
} }
break; break;
} }
case Mode::RecentlyModified: case Mode::RecentlyModified:
{ {
Artist::FindParameters params; db::Artist::FindParameters params;
params.setFilters(getDbFilters()); params.setFilters(getDbFilters());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
params.setLinkType(_linkType); params.setLinkType(_linkType);
params.setSortMethod(ArtistSortMethod::LastWrittenDesc); params.setSortMethod(db::ArtistSortMethod::LastWrittenDesc);
params.setRange(range); params.setRange(range);
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
artists = Artist::findIds(LmsApp->getDbSession(), params); artists = db::Artist::findIds(LmsApp->getDbSession(), params);
} }
break; break;
} }
case Mode::All: case Mode::All:
{ {
Artist::FindParameters params; db::Artist::FindParameters params;
params.setFilters(getDbFilters()); params.setFilters(getDbFilters());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
params.setLinkType(_linkType); params.setLinkType(_linkType);
params.setSortMethod(ArtistSortMethod::SortName); params.setSortMethod(db::ArtistSortMethod::SortName);
params.setRange(range); params.setRange(range);
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
artists = Artist::findIds(LmsApp->getDbSession(), params); artists = db::Artist::findIds(LmsApp->getDbSession(), params);
} }
break; break;
} }
@@ -143,22 +141,22 @@ namespace lms::ui
return artists; return artists;
} }
RangeResults<db::ArtistId> ArtistCollector::getRandomArtists(Range range) db::RangeResults<db::ArtistId> ArtistCollector::getRandomArtists(Range range)
{ {
assert(getMode() == Mode::Random); assert(getMode() == Mode::Random);
if (!_randomArtists) if (!_randomArtists)
{ {
Artist::FindParameters params; db::Artist::FindParameters params;
params.setFilters(getDbFilters()); params.setFilters(getDbFilters());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
params.setLinkType(_linkType); params.setLinkType(_linkType);
params.setSortMethod(ArtistSortMethod::Random); params.setSortMethod(db::ArtistSortMethod::Random);
params.setRange(Range{ 0, getMaxCount() }); params.setRange(db::Range{ 0, getMaxCount() });
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
_randomArtists = Artist::findIds(LmsApp->getDbSession(), params); _randomArtists = db::Artist::findIds(LmsApp->getDbSession(), params);
} }
} }
+30 -32
View File
@@ -47,11 +47,9 @@
namespace lms::ui namespace lms::ui
{ {
using namespace db;
namespace namespace
{ {
std::optional<ArtistId> extractArtistIdFromInternalPath() std::optional<db::ArtistId> extractArtistIdFromInternalPath()
{ {
if (wApp->internalPathMatches("/artist/mbid/")) if (wApp->internalPathMatches("/artist/mbid/"))
{ {
@@ -66,7 +64,7 @@ namespace lms::ui
return std::nullopt; return std::nullopt;
} }
return core::stringUtils::readAs<ArtistId::ValueType>(wApp->internalPathNextPart("/artist/")); return core::stringUtils::readAs<db::ArtistId::ValueType>(wApp->internalPathNextPart("/artist/"));
} }
} // namespace } // namespace
@@ -109,7 +107,7 @@ namespace lms::ui
if (!artistId) if (!artistId)
throw ArtistNotFoundException{}; throw ArtistNotFoundException{};
const auto similarArtistIds{ core::Service<recommendation::IRecommendationService>::get()->getSimilarArtists(*artistId, { TrackArtistLinkType::Artist, TrackArtistLinkType::ReleaseArtist }, 6) }; const auto similarArtistIds{ core::Service<recommendation::IRecommendationService>::get()->getSimilarArtists(*artistId, { db::TrackArtistLinkType::Artist, db::TrackArtistLinkType::ReleaseArtist }, 6) };
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
@@ -131,7 +129,7 @@ namespace lms::ui
Wt::WContainerWidget* clusterContainers{ bindNew<Wt::WContainerWidget>("clusters") }; Wt::WContainerWidget* clusterContainers{ bindNew<Wt::WContainerWidget>("clusters") };
{ {
auto clusterTypes{ ClusterType::findIds(LmsApp->getDbSession()).results }; auto clusterTypes{ db::ClusterType::findIds(LmsApp->getDbSession()).results };
auto clusterGroups{ artist->getClusterGroups(clusterTypes, 3) }; auto clusterGroups{ artist->getClusterGroups(clusterTypes, 3) };
for (const auto& clusters : clusterGroups) for (const auto& clusters : clusterGroups)
@@ -232,16 +230,16 @@ namespace lms::ui
{ {
_releaseContainers.clear(); _releaseContainers.clear();
Release::FindParameters params; db::Release::FindParameters params;
params.setFilters(_filters.getDbFilters()); params.setFilters(_filters.getDbFilters());
params.setArtist(_artistId, { TrackArtistLinkType::ReleaseArtist }, {}); params.setArtist(_artistId, { db::TrackArtistLinkType::ReleaseArtist }, {});
params.setSortMethod(LmsApp->getUser()->getUIArtistReleaseSortMethod()); params.setSortMethod(LmsApp->getUser()->getUIArtistReleaseSortMethod());
const auto releases{ Release::findIds(LmsApp->getDbSession(), params) }; const auto releases{ db::Release::findIds(LmsApp->getDbSession(), params) };
if (!releases.results.empty()) if (!releases.results.empty())
{ {
// first pass: gather all ids and sort by release type // first pass: gather all ids and sort by release type
for (const ReleaseId releaseId : releases.results) for (const db::ReleaseId releaseId : releases.results)
{ {
const db::Release::pointer release{ db::Release::find(LmsApp->getDbSession(), releaseId) }; const db::Release::pointer release{ db::Release::find(LmsApp->getDbSession(), releaseId) };
@@ -274,27 +272,27 @@ namespace lms::ui
void Artist::refreshAppearsOnReleases() void Artist::refreshAppearsOnReleases()
{ {
constexpr core::EnumSet<TrackArtistLinkType> types{ constexpr core::EnumSet<db::TrackArtistLinkType> types{
TrackArtistLinkType::Artist, db::TrackArtistLinkType::Artist,
TrackArtistLinkType::Arranger, db::TrackArtistLinkType::Arranger,
TrackArtistLinkType::Composer, db::TrackArtistLinkType::Composer,
TrackArtistLinkType::Conductor, db::TrackArtistLinkType::Conductor,
TrackArtistLinkType::Lyricist, db::TrackArtistLinkType::Lyricist,
TrackArtistLinkType::Mixer, db::TrackArtistLinkType::Mixer,
TrackArtistLinkType::Performer, db::TrackArtistLinkType::Performer,
TrackArtistLinkType::Producer, db::TrackArtistLinkType::Producer,
TrackArtistLinkType::Remixer, db::TrackArtistLinkType::Remixer,
TrackArtistLinkType::Writer, db::TrackArtistLinkType::Writer,
}; };
_appearsOnReleaseContainer = {}; _appearsOnReleaseContainer = {};
Release::FindParameters params; db::Release::FindParameters params;
params.setFilters(_filters.getDbFilters()); params.setFilters(_filters.getDbFilters());
params.setArtist(_artistId, types, { TrackArtistLinkType::ReleaseArtist }); params.setArtist(_artistId, types, { db::TrackArtistLinkType::ReleaseArtist });
params.setSortMethod(ReleaseSortMethod::OriginalDateDesc); params.setSortMethod(db::ReleaseSortMethod::OriginalDateDesc);
const auto releases{ Release::findIds(LmsApp->getDbSession(), params) }; const auto releases{ db::Release::findIds(LmsApp->getDbSession(), params) };
if (!releases.results.empty()) if (!releases.results.empty())
{ {
Wt::WTemplate* releaseContainer{ bindNew<Wt::WTemplate>("appears-on-releases", Wt::WString::tr("Lms.Explore.Artist.template.release-container")) }; Wt::WTemplate* releaseContainer{ bindNew<Wt::WTemplate>("appears-on-releases", Wt::WString::tr("Lms.Explore.Artist.template.release-container")) };
@@ -323,7 +321,7 @@ namespace lms::ui
setCondition("if-has-non-release-tracks", added); setCondition("if-has-non-release-tracks", added);
} }
void Artist::refreshSimilarArtists(const std::vector<ArtistId>& similarArtistsId) void Artist::refreshSimilarArtists(const std::vector<db::ArtistId>& similarArtistsId)
{ {
if (similarArtistsId.empty()) if (similarArtistsId.empty())
return; return;
@@ -331,7 +329,7 @@ namespace lms::ui
setCondition("if-has-similar-artists", true); setCondition("if-has-similar-artists", true);
Wt::WContainerWidget* similarArtistsContainer{ bindNew<Wt::WContainerWidget>("similar-artists") }; Wt::WContainerWidget* similarArtistsContainer{ bindNew<Wt::WContainerWidget>("similar-artists") };
for (const ArtistId artistId : similarArtistsId) for (const db::ArtistId artistId : similarArtistsId)
{ {
const db::Artist::pointer similarArtist{ db::Artist::find(LmsApp->getDbSession(), artistId) }; const db::Artist::pointer similarArtist{ db::Artist::find(LmsApp->getDbSession(), artistId) };
if (!similarArtist) if (!similarArtist)
@@ -371,19 +369,19 @@ namespace lms::ui
{ {
bool areTracksAdded{}; bool areTracksAdded{};
const Range range{ static_cast<std::size_t>(_trackContainer->getCount()), _tracksBatchSize }; const db::Range range{ static_cast<std::size_t>(_trackContainer->getCount()), _tracksBatchSize };
Track::FindParameters params; db::Track::FindParameters params;
params.setFilters(_filters.getDbFilters()); params.setFilters(_filters.getDbFilters());
params.setArtist(_artistId); params.setArtist(_artistId);
params.setRange(range); params.setRange(range);
params.setSortMethod(TrackSortMethod::Name); params.setSortMethod(db::TrackSortMethod::Name);
params.setNonRelease(true); params.setNonRelease(true);
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
const auto tracks{ Track::find(LmsApp->getDbSession(), params) }; const auto tracks{ db::Track::find(LmsApp->getDbSession(), params) };
for (const Track::pointer& track : tracks.results) for (const db::Track::pointer& track : tracks.results)
{ {
// TODO handle this with range // TODO handle this with range
if (_trackContainer->getCount() == _tracksMaxCount) if (_trackContainer->getCount() == _tracksMaxCount)
+1 -2
View File
@@ -108,7 +108,6 @@ namespace lms::ui
std::vector<db::TrackId> getTrackListTracks(db::Session& session, db::TrackListId trackListId, const Filters& filters, std::size_t maxTrackCount) std::vector<db::TrackId> getTrackListTracks(db::Session& session, db::TrackListId trackListId, const Filters& filters, std::size_t maxTrackCount)
{ {
using namespace db;
assert(maxTrackCount); assert(maxTrackCount);
auto transaction{ session.createReadTransaction() }; auto transaction{ session.createReadTransaction() };
@@ -117,7 +116,7 @@ namespace lms::ui
params.setTrackList(trackListId); params.setTrackList(trackListId);
params.setFilters(filters.getDbFilters()); params.setFilters(filters.getDbFilters());
params.setRange(db::Range{ 0, maxTrackCount }); params.setRange(db::Range{ 0, maxTrackCount });
params.setSortMethod(TrackSortMethod::TrackList); params.setSortMethod(db::TrackSortMethod::TrackList);
return db::Track::findIds(session, params).results; return db::Track::findIds(session, params).results;
} }
+5 -7
View File
@@ -31,8 +31,6 @@
namespace lms::ui::releaseListHelpers namespace lms::ui::releaseListHelpers
{ {
using namespace db;
namespace namespace
{ {
enum class ReleaseOptions enum class ReleaseOptions
@@ -42,7 +40,7 @@ namespace lms::ui::releaseListHelpers
ShowYear, ShowYear,
}; };
std::unique_ptr<Wt::WTemplate> createEntryInternal(const Release::pointer& release, const Artist::pointer& artist, core::EnumSet<ReleaseOptions> options) std::unique_ptr<Wt::WTemplate> createEntryInternal(const db::Release::pointer& release, const db::Artist::pointer& artist, core::EnumSet<ReleaseOptions> options)
{ {
auto entry{ std::make_unique<Wt::WTemplate>(Wt::WString::tr("Lms.Explore.Releases.template.entry-grid")) }; auto entry{ std::make_unique<Wt::WTemplate>(Wt::WString::tr("Lms.Explore.Releases.template.entry-grid")) };
@@ -64,7 +62,7 @@ namespace lms::ui::releaseListHelpers
if (options.contains(ReleaseOptions::ShowArtist)) if (options.contains(ReleaseOptions::ShowArtist))
{ {
auto artistAnchors{ utils::createArtistsAnchorsForRelease(release, artist ? artist->getId() : ArtistId{}, "link-secondary") }; auto artistAnchors{ utils::createArtistsAnchorsForRelease(release, artist ? artist->getId() : db::ArtistId{}, "link-secondary") };
if (artistAnchors) if (artistAnchors)
{ {
entry->setCondition("if-has-artist", true); entry->setCondition("if-has-artist", true);
@@ -94,9 +92,9 @@ namespace lms::ui::releaseListHelpers
} }
} // namespace } // namespace
std::unique_ptr<Wt::WTemplate> createEntry(const Release::pointer& release) std::unique_ptr<Wt::WTemplate> createEntry(const db::Release::pointer& release)
{ {
return createEntryInternal(release, Artist::pointer{}, core::EnumSet<ReleaseOptions>{ ReleaseOptions::ShowArtist }); return createEntryInternal(release, db::Artist::pointer{}, core::EnumSet<ReleaseOptions>{ ReleaseOptions::ShowArtist });
} }
std::unique_ptr<Wt::WTemplate> createEntryForArtist(const db::Release::pointer& release, const db::Artist::pointer& artist) std::unique_ptr<Wt::WTemplate> createEntryForArtist(const db::Release::pointer& release, const db::Artist::pointer& artist)
@@ -106,7 +104,7 @@ namespace lms::ui::releaseListHelpers
std::unique_ptr<Wt::WTemplate> createEntryForOtherVersions(const db::ObjectPtr<db::Release>& release) std::unique_ptr<Wt::WTemplate> createEntryForOtherVersions(const db::ObjectPtr<db::Release>& release)
{ {
return createEntryInternal(release, Artist::pointer{}, core::EnumSet<ReleaseOptions>{ ReleaseOptions::ShowYear }); return createEntryInternal(release, db::Artist::pointer{}, core::EnumSet<ReleaseOptions>{ ReleaseOptions::ShowYear });
} }
} // namespace lms::ui::releaseListHelpers } // namespace lms::ui::releaseListHelpers
+26 -28
View File
@@ -57,8 +57,6 @@
namespace lms::ui namespace lms::ui
{ {
using namespace db;
namespace namespace
{ {
void showReleaseInfoModal(db::ReleaseId releaseId) void showReleaseInfoModal(db::ReleaseId releaseId)
@@ -79,36 +77,36 @@ namespace lms::ui
releaseInfo->bindString("release-type", releaseHelpers::buildReleaseTypeString(parseReleaseType(releaseTypeNames))); releaseInfo->bindString("release-type", releaseHelpers::buildReleaseTypeString(parseReleaseType(releaseTypeNames)));
} }
std::map<Wt::WString, std::set<ArtistId>> artistMap; std::map<Wt::WString, std::set<db::ArtistId>> artistMap;
auto addArtists = [&](TrackArtistLinkType linkType, const char* type) { auto addArtists = [&](db::TrackArtistLinkType linkType, const char* type) {
Artist::FindParameters params; db::Artist::FindParameters params;
params.setRelease(releaseId); params.setRelease(releaseId);
params.setLinkType(linkType); params.setLinkType(linkType);
const auto artistIds{ Artist::findIds(LmsApp->getDbSession(), params) }; const auto artistIds{ db::Artist::findIds(LmsApp->getDbSession(), params) };
if (artistIds.results.empty()) if (artistIds.results.empty())
return; return;
Wt::WString typeStr{ Wt::WString::trn(type, artistIds.results.size()) }; Wt::WString typeStr{ Wt::WString::trn(type, artistIds.results.size()) };
for (ArtistId artistId : artistIds.results) for (db::ArtistId artistId : artistIds.results)
artistMap[typeStr].insert(artistId); artistMap[typeStr].insert(artistId);
}; };
auto addPerformerArtists = [&] { auto addPerformerArtists = [&] {
TrackArtistLink::FindParameters params; db::TrackArtistLink::FindParameters params;
params.setRelease(releaseId); params.setRelease(releaseId);
params.setLinkType(TrackArtistLinkType::Performer); params.setLinkType(db::TrackArtistLinkType::Performer);
TrackArtistLink::find(LmsApp->getDbSession(), params, [&](const TrackArtistLink::pointer& link) { db::TrackArtistLink::find(LmsApp->getDbSession(), params, [&](const db::TrackArtistLink::pointer& link) {
artistMap[std::string{ link->getSubType() }].insert(link->getArtist()->getId()); artistMap[std::string{ link->getSubType() }].insert(link->getArtist()->getId());
}); });
}; };
addArtists(TrackArtistLinkType::Composer, "Lms.Explore.Artists.linktype-composer"); addArtists(db::TrackArtistLinkType::Composer, "Lms.Explore.Artists.linktype-composer");
addArtists(TrackArtistLinkType::Conductor, "Lms.Explore.Artists.linktype-conductor"); addArtists(db::TrackArtistLinkType::Conductor, "Lms.Explore.Artists.linktype-conductor");
addArtists(TrackArtistLinkType::Lyricist, "Lms.Explore.Artists.linktype-lyricist"); addArtists(db::TrackArtistLinkType::Lyricist, "Lms.Explore.Artists.linktype-lyricist");
addArtists(TrackArtistLinkType::Mixer, "Lms.Explore.Artists.linktype-mixer"); addArtists(db::TrackArtistLinkType::Mixer, "Lms.Explore.Artists.linktype-mixer");
addArtists(TrackArtistLinkType::Remixer, "Lms.Explore.Artists.linktype-remixer"); addArtists(db::TrackArtistLinkType::Remixer, "Lms.Explore.Artists.linktype-remixer");
addArtists(TrackArtistLinkType::Producer, "Lms.Explore.Artists.linktype-producer"); addArtists(db::TrackArtistLinkType::Producer, "Lms.Explore.Artists.linktype-producer");
addPerformerArtists(); addPerformerArtists();
if (auto itRolelessPerformers{ artistMap.find("") }; itRolelessPerformers != std::cend(artistMap)) if (auto itRolelessPerformers{ artistMap.find("") }; itRolelessPerformers != std::cend(artistMap))
@@ -141,7 +139,7 @@ namespace lms::ui
} }
// TODO: save in DB and aggregate all this // TODO: save in DB and aggregate all this
for (const Track::pointer& track : Track::find(LmsApp->getDbSession(), Track::FindParameters{}.setRelease(releaseId).setRange(Range{ 0, 1 })).results) for (const db::Track::pointer& track : db::Track::find(LmsApp->getDbSession(), db::Track::FindParameters{}.setRelease(releaseId).setRange(db::Range{ 0, 1 })).results)
{ {
if (const auto audioFile{ av::parseAudioFile(track->getAbsoluteFilePath()) }) if (const auto audioFile{ av::parseAudioFile(track->getAbsoluteFilePath()) })
{ {
@@ -171,7 +169,7 @@ namespace lms::ui
LmsApp->getModalManager().show(std::move(releaseInfo)); LmsApp->getModalManager().show(std::move(releaseInfo));
} }
std::optional<ReleaseId> extractReleaseIdFromInternalPath() std::optional<db::ReleaseId> extractReleaseIdFromInternalPath()
{ {
if (wApp->internalPathMatches("/release/mbid/")) if (wApp->internalPathMatches("/release/mbid/"))
{ {
@@ -186,12 +184,12 @@ namespace lms::ui
return std::nullopt; return std::nullopt;
} }
return core::stringUtils::readAs<ReleaseId::ValueType>(wApp->internalPathNextPart("/release/")); return core::stringUtils::readAs<db::ReleaseId::ValueType>(wApp->internalPathNextPart("/release/"));
} }
void fillTrackArtistLinks(Wt::WTemplate* trackEntry, db::TrackId trackId) void fillTrackArtistLinks(Wt::WTemplate* trackEntry, db::TrackId trackId)
{ {
const User::pointer user{ LmsApp->getUser() }; const db::User::pointer user{ LmsApp->getUser() };
if (!user->getUIEnableInlineArtistRelationships()) if (!user->getUIEnableInlineArtistRelationships())
return; return;
@@ -199,7 +197,7 @@ namespace lms::ui
if (inlineArtistRelationships.empty()) if (inlineArtistRelationships.empty())
return; return;
const std::map<Wt::WString, std::set<ArtistId>> artistsByRole{ TrackListHelpers::getArtistsByRole(trackId, inlineArtistRelationships) }; const std::map<Wt::WString, std::set<db::ArtistId>> artistsByRole{ TrackListHelpers::getArtistsByRole(trackId, inlineArtistRelationships) };
if (artistsByRole.empty()) if (artistsByRole.empty())
return; return;
@@ -318,14 +316,14 @@ namespace lms::ui
Wt::WContainerWidget* clusterContainers{ bindNew<Wt::WContainerWidget>("clusters") }; Wt::WContainerWidget* clusterContainers{ bindNew<Wt::WContainerWidget>("clusters") };
{ {
const auto clusterTypeIds{ ClusterType::findIds(session).results }; const auto clusterTypeIds{ db::ClusterType::findIds(session).results };
const auto clusterGroups{ release->getClusterGroups(clusterTypeIds, 3) }; const auto clusterGroups{ release->getClusterGroups(clusterTypeIds, 3) };
for (const auto& clusters : clusterGroups) for (const auto& clusters : clusterGroups)
{ {
for (const db::Cluster::pointer& cluster : clusters) for (const db::Cluster::pointer& cluster : clusters)
{ {
const ClusterId clusterId{ cluster->getId() }; const db::ClusterId clusterId{ cluster->getId() };
Wt::WInteractWidget* entry{ clusterContainers->addWidget(utils::createFilterCluster(clusterId)) }; Wt::WInteractWidget* entry{ clusterContainers->addWidget(utils::createFilterCluster(clusterId)) };
entry->clicked().connect([this, clusterId] { entry->clicked().connect([this, clusterId] {
_filters.add(clusterId); _filters.add(clusterId);
@@ -458,7 +456,7 @@ namespace lms::ui
if (displayTrackArtists) if (displayTrackArtists)
{ {
const auto artists{ track->getArtistIds({ TrackArtistLinkType::Artist }) }; const auto artists{ track->getArtistIds({ db::TrackArtistLinkType::Artist }) };
if (!artists.empty()) if (!artists.empty())
{ {
entry->setCondition("if-has-artists", true); entry->setCondition("if-has-artists", true);
@@ -533,7 +531,7 @@ namespace lms::ui
entry->bindString("duration", utils::durationToString(track->getDuration()), Wt::TextFormat::Plain); entry->bindString("duration", utils::durationToString(track->getDuration()), Wt::TextFormat::Plain);
LmsApp->getMediaPlayer().trackLoaded.connect(entry, [=](TrackId loadedTrackId) { LmsApp->getMediaPlayer().trackLoaded.connect(entry, [=](db::TrackId loadedTrackId) {
entry->toggleStyleClass("Lms-entry-playing", loadedTrackId == trackId); entry->toggleStyleClass("Lms-entry-playing", loadedTrackId == trackId);
}); });
@@ -600,7 +598,7 @@ namespace lms::ui
setCondition("if-has-other-versions", true); setCondition("if-has-other-versions", true);
auto* container{ bindNew<Wt::WContainerWidget>("other-versions") }; auto* container{ bindNew<Wt::WContainerWidget>("other-versions") };
for (const ReleaseId id : releaseIds.results) for (const db::ReleaseId id : releaseIds.results)
{ {
if (id == _releaseId) if (id == _releaseId)
continue; continue;
@@ -613,7 +611,7 @@ namespace lms::ui
} }
} }
void Release::refreshSimilarReleases(const std::vector<ReleaseId>& similarReleaseIds) void Release::refreshSimilarReleases(const std::vector<db::ReleaseId>& similarReleaseIds)
{ {
if (similarReleaseIds.empty()) if (similarReleaseIds.empty())
return; return;
@@ -621,7 +619,7 @@ namespace lms::ui
setCondition("if-has-similar-releases", true); setCondition("if-has-similar-releases", true);
auto* similarReleasesContainer{ bindNew<Wt::WContainerWidget>("similar-releases") }; auto* similarReleasesContainer{ bindNew<Wt::WContainerWidget>("similar-releases") };
for (const ReleaseId id : similarReleaseIds) for (const db::ReleaseId id : similarReleaseIds)
{ {
const db::Release::pointer similarRelease{ db::Release::find(LmsApp->getDbSession(), id) }; const db::Release::pointer similarRelease{ db::Release::find(LmsApp->getDbSession(), id) };
if (!similarRelease) if (!similarRelease)
+5 -7
View File
@@ -36,8 +36,6 @@
namespace lms::ui namespace lms::ui
{ {
using namespace db;
Releases::Releases(Filters& filters, PlayQueueController& playQueueController) Releases::Releases(Filters& filters, PlayQueueController& playQueueController)
: Template{ Wt::WString::tr("Lms.Explore.Releases.template") } : Template{ Wt::WString::tr("Lms.Explore.Releases.template") }
, _playQueueController{ playQueueController } , _playQueueController{ playQueueController }
@@ -116,14 +114,14 @@ namespace lms::ui
void Releases::addSome() void Releases::addSome()
{ {
const auto releaseIds{ _releaseCollector.get(Range{ static_cast<std::size_t>(_container->getCount()), _batchSize }) }; const auto releaseIds{ _releaseCollector.get(db::Range{ static_cast<std::size_t>(_container->getCount()), _batchSize }) };
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
for (const ReleaseId releaseId : releaseIds.results) for (const db::ReleaseId releaseId : releaseIds.results)
{ {
if (const Release::pointer release{ Release::find(LmsApp->getDbSession(), releaseId) }) if (const db::Release::pointer release{ db::Release::find(LmsApp->getDbSession(), releaseId) })
_container->add(releaseListHelpers::createEntry(release)); _container->add(releaseListHelpers::createEntry(release));
} }
} }
@@ -131,9 +129,9 @@ namespace lms::ui
_container->setHasMore(releaseIds.moreResults); _container->setHasMore(releaseIds.moreResults);
} }
std::vector<ReleaseId> Releases::getAllReleases() std::vector<db::ReleaseId> Releases::getAllReleases()
{ {
RangeResults<ReleaseId> releaseIds{ _releaseCollector.get() }; db::RangeResults<db::ReleaseId> releaseIds{ _releaseCollector.get() };
return std::move(releaseIds.results); return std::move(releaseIds.results);
} }
+16 -18
View File
@@ -32,16 +32,14 @@
namespace lms::ui namespace lms::ui
{ {
using namespace db; db::RangeResults<db::TrackId> TrackCollector::get(std::optional<db::Range> requestedRange)
RangeResults<TrackId> TrackCollector::get(std::optional<Range> requestedRange)
{ {
feedback::IFeedbackService& feedbackService{ *core::Service<feedback::IFeedbackService>::get() }; feedback::IFeedbackService& feedbackService{ *core::Service<feedback::IFeedbackService>::get() };
scrobbling::IScrobblingService& scrobblingService{ *core::Service<scrobbling::IScrobblingService>::get() }; scrobbling::IScrobblingService& scrobblingService{ *core::Service<scrobbling::IScrobblingService>::get() };
const Range range{ getActualRange(requestedRange) }; const db::Range range{ getActualRange(requestedRange) };
RangeResults<TrackId> tracks; db::RangeResults<db::TrackId> tracks;
switch (getMode()) switch (getMode())
{ {
@@ -86,44 +84,44 @@ namespace lms::ui
case Mode::RecentlyAdded: case Mode::RecentlyAdded:
{ {
Track::FindParameters params; db::Track::FindParameters params;
params.setFilters(getDbFilters()); params.setFilters(getDbFilters());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
params.setSortMethod(TrackSortMethod::AddedDesc); params.setSortMethod(db::TrackSortMethod::AddedDesc);
params.setRange(range); params.setRange(range);
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
tracks = Track::findIds(LmsApp->getDbSession(), params); tracks = db::Track::findIds(LmsApp->getDbSession(), params);
} }
break; break;
} }
case Mode::RecentlyModified: case Mode::RecentlyModified:
{ {
Track::FindParameters params; db::Track::FindParameters params;
params.setFilters(getDbFilters()); params.setFilters(getDbFilters());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
params.setSortMethod(TrackSortMethod::LastWrittenDesc); params.setSortMethod(db::TrackSortMethod::LastWrittenDesc);
params.setRange(range); params.setRange(range);
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
tracks = Track::findIds(LmsApp->getDbSession(), params); tracks = db::Track::findIds(LmsApp->getDbSession(), params);
} }
break; break;
} }
case Mode::All: case Mode::All:
{ {
Track::FindParameters params; db::Track::FindParameters params;
params.setFilters(getDbFilters()); params.setFilters(getDbFilters());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
params.setRange(range); params.setRange(range);
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
tracks = Track::findIds(LmsApp->getDbSession(), params); tracks = db::Track::findIds(LmsApp->getDbSession(), params);
} }
break; break;
} }
@@ -135,21 +133,21 @@ namespace lms::ui
return tracks; return tracks;
} }
RangeResults<TrackId> TrackCollector::getRandomTracks(Range range) db::RangeResults<db::TrackId> TrackCollector::getRandomTracks(Range range)
{ {
assert(getMode() == Mode::Random); assert(getMode() == Mode::Random);
if (!_randomTracks) if (!_randomTracks)
{ {
Track::FindParameters params; db::Track::FindParameters params;
params.setFilters(getDbFilters()); params.setFilters(getDbFilters());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
params.setSortMethod(TrackSortMethod::Random); params.setSortMethod(db::TrackSortMethod::Random);
params.setRange(Range{ 0, getMaxCount() }); params.setRange(db::Range{ 0, getMaxCount() });
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
_randomTracks = Track::findIds(LmsApp->getDbSession(), params); _randomTracks = db::Track::findIds(LmsApp->getDbSession(), params);
} }
} }
+6 -8
View File
@@ -40,13 +40,11 @@
namespace lms::ui namespace lms::ui
{ {
using namespace db;
namespace namespace
{ {
std::optional<TrackListId> extractTrackListIdFromInternalPath() std::optional<db::TrackListId> extractTrackListIdFromInternalPath()
{ {
return core::stringUtils::readAs<TrackListId::ValueType>(wApp->internalPathNextPart("/tracklist/")); return core::stringUtils::readAs<db::TrackListId::ValueType>(wApp->internalPathNextPart("/tracklist/"));
} }
} // namespace } // namespace
@@ -74,7 +72,7 @@ namespace lms::ui
if (!wApp->internalPathMatches("/tracklist/")) if (!wApp->internalPathMatches("/tracklist/"))
return; return;
const std::optional<TrackListId> trackListId{ extractTrackListIdFromInternalPath() }; const std::optional<db::TrackListId> trackListId{ extractTrackListIdFromInternalPath() };
if (!trackListId) if (!trackListId)
throw TrackListNotFoundException{}; throw TrackListNotFoundException{};
@@ -103,14 +101,14 @@ namespace lms::ui
Wt::WContainerWidget* clusterContainers{ bindNew<Wt::WContainerWidget>("clusters") }; Wt::WContainerWidget* clusterContainers{ bindNew<Wt::WContainerWidget>("clusters") };
{ {
const auto clusterTypeIds{ ClusterType::findIds(LmsApp->getDbSession()).results }; const auto clusterTypeIds{ db::ClusterType::findIds(LmsApp->getDbSession()).results };
const auto clusterGroups{ trackList->getClusterGroups(clusterTypeIds, 3) }; const auto clusterGroups{ trackList->getClusterGroups(clusterTypeIds, 3) };
for (const auto& clusters : clusterGroups) for (const auto& clusters : clusterGroups)
{ {
for (const db::Cluster::pointer& cluster : clusters) for (const db::Cluster::pointer& cluster : clusters)
{ {
const ClusterId clusterId{ cluster->getId() }; const db::ClusterId clusterId{ cluster->getId() };
Wt::WInteractWidget* entry{ clusterContainers->addWidget(utils::createFilterCluster(clusterId)) }; Wt::WInteractWidget* entry{ clusterContainers->addWidget(utils::createFilterCluster(clusterId)) };
entry->clicked().connect([this, clusterId] { entry->clicked().connect([this, clusterId] {
_filters.add(clusterId); _filters.add(clusterId);
@@ -193,7 +191,7 @@ namespace lms::ui
params.setRange(db::Range{ static_cast<std::size_t>(_container->getCount()), _batchSize }); params.setRange(db::Range{ static_cast<std::size_t>(_container->getCount()), _batchSize });
bool moreResults{}; bool moreResults{};
db::Track::find(LmsApp->getDbSession(), params, moreResults, [this](const Track::pointer& track) { db::Track::find(LmsApp->getDbSession(), params, moreResults, [this](const db::Track::pointer& track) {
_container->add(TrackListHelpers::createEntry(track, _playQueueController, _filters)); _container->add(TrackListHelpers::createEntry(track, _playQueueController, _filters));
}); });
+4 -6
View File
@@ -35,8 +35,6 @@
namespace lms::ui namespace lms::ui
{ {
using namespace db;
Tracks::Tracks(Filters& filters, PlayQueueController& playQueueController) Tracks::Tracks(Filters& filters, PlayQueueController& playQueueController)
: Template{ Wt::WString::tr("Lms.Explore.Tracks.template") } : Template{ Wt::WString::tr("Lms.Explore.Tracks.template") }
, _filters{ filters } , _filters{ filters }
@@ -119,11 +117,11 @@ namespace lms::ui
{ {
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
const auto trackIds{ _trackCollector.get(Range{ static_cast<std::size_t>(_container->getCount()), _batchSize }) }; const auto trackIds{ _trackCollector.get(db::Range{ static_cast<std::size_t>(_container->getCount()), _batchSize }) };
for (const TrackId trackId : trackIds.results) for (const db::TrackId trackId : trackIds.results)
{ {
if (const Track::pointer track{ Track::find(LmsApp->getDbSession(), trackId) }) if (const db::Track::pointer track{ db::Track::find(LmsApp->getDbSession(), trackId) })
_container->add(TrackListHelpers::createEntry(track, _playQueueController, _filters)); _container->add(TrackListHelpers::createEntry(track, _playQueueController, _filters));
} }
@@ -132,7 +130,7 @@ namespace lms::ui
std::vector<db::TrackId> Tracks::getAllTracks() std::vector<db::TrackId> Tracks::getAllTracks()
{ {
RangeResults<TrackId> trackIds{ _trackCollector.get() }; db::RangeResults<db::TrackId> trackIds{ _trackCollector.get() };
return std::move(trackIds.results); return std::move(trackIds.results);
} }
} // namespace lms::ui } // namespace lms::ui
+3 -6
View File
@@ -197,11 +197,9 @@ namespace lms::ui
std::unique_ptr<zip::IZipper> DownloadReleaseResource::createZipper() std::unique_ptr<zip::IZipper> DownloadReleaseResource::createZipper()
{ {
using namespace db;
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
auto tracks{ Track::find(LmsApp->getDbSession(), Track::FindParameters{}.setRelease(_releaseId).setSortMethod(TrackSortMethod::Release)) }; auto tracks{ db::Track::find(LmsApp->getDbSession(), db::Track::FindParameters{}.setRelease(_releaseId).setSortMethod(db::TrackSortMethod::Release)) };
return details::createZipper(tracks.results); return details::createZipper(tracks.results);
} }
@@ -241,12 +239,11 @@ namespace lms::ui
std::unique_ptr<zip::IZipper> DownloadTrackListResource::createZipper() std::unique_ptr<zip::IZipper> DownloadTrackListResource::createZipper()
{ {
using namespace db;
auto transaction{ LmsApp->getDbSession().createReadTransaction() }; auto transaction{ LmsApp->getDbSession().createReadTransaction() };
Track::FindParameters params; db::Track::FindParameters params;
params.setTrackList(_trackListId); params.setTrackList(_trackListId);
const auto tracks{ Track::find(LmsApp->getDbSession(), params) }; const auto tracks{ db::Track::find(LmsApp->getDbSession(), params) };
return details::createZipper(tracks.results); return details::createZipper(tracks.results);
} }
} // namespace lms::ui } // namespace lms::ui