From cb182c3cfe39336f014d0dbf77a805f33b31e6a8 Mon Sep 17 00:00:00 2001 From: emeric Date: Fri, 13 Sep 2024 17:47:53 +0200 Subject: [PATCH] Migrated current play counter in ui states --- src/libs/database/impl/Migration.cpp | 1 + src/libs/database/include/database/User.hpp | 12 ++-------- src/lms/ui/PlayQueue.cpp | 26 +++++++-------------- src/lms/ui/SettingsView.cpp | 4 +--- 4 files changed, 13 insertions(+), 30 deletions(-) diff --git a/src/libs/database/impl/Migration.cpp b/src/libs/database/impl/Migration.cpp index 6d109a59..b75f5c4b 100644 --- a/src/libs/database/impl/Migration.cpp +++ b/src/libs/database/impl/Migration.cpp @@ -758,6 +758,7 @@ SELECT session.getDboSession()->execute("ALTER TABLE user DROP COLUMN repeat_all"); session.getDboSession()->execute("ALTER TABLE user DROP COLUMN radio"); + session.getDboSession()->execute("ALTER TABLE user DROP COLUMN cur_playing_track_pos"); } bool doDbMigration(Session& session) diff --git a/src/libs/database/include/database/User.hpp b/src/libs/database/include/database/User.hpp index eca63221..f1ea2cb3 100644 --- a/src/libs/database/include/database/User.hpp +++ b/src/libs/database/include/database/User.hpp @@ -105,7 +105,6 @@ namespace lms::db void setSubsonicEnableTranscodingByDefault(bool value) { _subsonicEnableTranscodingByDefault = value; } void setSubsonicDefaultTranscodintOutputFormat(TranscodingOutputFormat encoding) { _subsonicDefaultTranscodingOutputFormat = encoding; } void setSubsonicDefaultTranscodingOutputBitrate(Bitrate bitrate); - void setCurPlayingTrackPos(std::size_t pos) { _curPlayingTrackPos = pos; } void setUITheme(UITheme uiTheme) { _uiTheme = uiTheme; } void clearAuthTokens(); void setSubsonicArtistListMode(SubsonicArtistListMode mode) { _subsonicArtistListMode = mode; } @@ -120,7 +119,6 @@ namespace lms::db bool getSubsonicEnableTranscodingByDefault() const { return _subsonicEnableTranscodingByDefault; } TranscodingOutputFormat getSubsonicDefaultTranscodingOutputFormat() const { return _subsonicDefaultTranscodingOutputFormat; } Bitrate getSubsonicDefaultTranscodingOutputBitrate() const { return _subsonicDefaultTranscodingOutputBitrate; } - std::size_t getCurPlayingTrackPos() const { return _curPlayingTrackPos; } UITheme getUITheme() const { return _uiTheme; } SubsonicArtistListMode getSubsonicArtistListMode() const { return _subsonicArtistListMode; } FeedbackBackend getFeedbackBackend() const { return _feedbackBackend; } @@ -144,11 +142,8 @@ namespace lms::db Wt::Dbo::field(a, _scrobblingBackend, "scrobbling_backend"); Wt::Dbo::field(a, _listenbrainzToken, "listenbrainz_token"); - // UI player settings - Wt::Dbo::field(a, _curPlayingTrackPos, "cur_playing_track_pos"); - Wt::Dbo::hasMany(a, _authTokens, Wt::Dbo::ManyToOne, "user"); - Wt::Dbo::hasMany(a, _uiSettings, Wt::Dbo::ManyToOne, "user"); + Wt::Dbo::hasMany(a, _uiStates, Wt::Dbo::ManyToOne, "user"); } private: @@ -174,11 +169,8 @@ namespace lms::db TranscodingOutputFormat _subsonicDefaultTranscodingOutputFormat{ defaultSubsonicTranscodingOutputFormat }; int _subsonicDefaultTranscodingOutputBitrate{ defaultSubsonicTranscodingOutputBitrate }; - // User's dynamic data (UI) - int _curPlayingTrackPos{}; // Current track position in queue - Wt::Dbo::collection> _authTokens; - Wt::Dbo::collection> _uiSettings; + Wt::Dbo::collection> _uiStates; }; } // namespace lms::db diff --git a/src/lms/ui/PlayQueue.cpp b/src/lms/ui/PlayQueue.cpp index a1087b70..0973f693 100644 --- a/src/lms/ui/PlayQueue.cpp +++ b/src/lms/ui/PlayQueue.cpp @@ -186,21 +186,15 @@ namespace lms::ui _mediaPlayerSettingsLoaded = true; - std::size_t trackPos{}; - - { - auto transaction{ LmsApp->getDbSession().createReadTransaction() }; - trackPos = LmsApp->getUser()->getCurPlayingTrackPos(); - } - + const std::size_t trackPos{ state::readValue("player_cur_playing_track_pos").value_or(0) }; loadTrack(trackPos, false); }); LmsApp->preQuit().connect([this] { - auto transaction{ LmsApp->getDbSession().createWriteTransaction() }; - - if (LmsApp->getUser()->isDemo()) + if (LmsApp->getUserType() == db::UserType::DEMO) { + auto transaction{ LmsApp->getDbSession().createWriteTransaction() }; + LMS_LOG(UI, DEBUG, "Removing queue (tracklist id " << _queueId.toString() << ")"); if (db::TrackList::pointer queue{ getQueue() }) queue.remove(); @@ -258,7 +252,7 @@ namespace lms::ui db::TrackId trackId{}; std::optional replayGain{}; { - auto transaction{ LmsApp->getDbSession().createWriteTransaction() }; + auto transaction{ LmsApp->getDbSession().createReadTransaction() }; const db::TrackList::pointer queue{ getQueue() }; @@ -275,16 +269,14 @@ namespace lms::ui } _trackPos = pos; + const db::Track::pointer track{ queue->getEntry(*_trackPos)->getTrack() }; - trackId = track->getId(); - replayGain = getReplayGain(pos, track); - - if (!LmsApp->getUser()->isDemo()) - LmsApp->getUser().modify()->setCurPlayingTrackPos(pos); } + state::writeValue("player_cur_playing_track_pos", pos); + enqueueRadioTracksIfNeeded(); updateCurrentTrack(true); _isTrackSelected = true; @@ -331,7 +323,7 @@ namespace lms::ui db::TrackList::pointer queue; db::TrackList::pointer radioStartingTracks; - if (!LmsApp->getUser()->isDemo()) + if (LmsApp->getUserType() != db::UserType::DEMO) { static const std::string queueName{ "__queued_tracks__" }; queue = db::TrackList::find(LmsApp->getDbSession(), queueName, db::TrackListType::Internal, LmsApp->getUserId()); diff --git a/src/lms/ui/SettingsView.cpp b/src/lms/ui/SettingsView.cpp index 68b644e7..27ba0247 100644 --- a/src/lms/ui/SettingsView.cpp +++ b/src/lms/ui/SettingsView.cpp @@ -547,9 +547,7 @@ namespace lms::ui saveBtn->clicked().connect([=] { { - auto transaction{ LmsApp->getDbSession().createReadTransaction() }; - - if (LmsApp->getUser()->isDemo()) + if (LmsApp->getUserType() == db::UserType::DEMO) { LmsApp->notifyMsg(Notification::Type::Warning, Wt::WString::tr("Lms.Settings.settings"), Wt::WString::tr("Lms.Settings.demo-cannot-save")); return;