From b39008e3bb02f58f60dc8f8fd9df62a802e5934a Mon Sep 17 00:00:00 2001 From: Uwe Klotz Date: Wed, 11 Aug 2021 17:40:08 +0200 Subject: [PATCH] Playlists & Crates: Store selected TrackId instead of TrackPointer ...to avoid delays when exporting file tags. --- src/library/trackset/baseplaylistfeature.cpp | 17 +++++++------ src/library/trackset/baseplaylistfeature.h | 6 ++--- src/library/trackset/crate/cratefeature.cpp | 25 ++++++++++---------- src/library/trackset/crate/cratefeature.h | 6 ++--- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/library/trackset/baseplaylistfeature.cpp b/src/library/trackset/baseplaylistfeature.cpp index 956d68026aa..999eb6278e2 100644 --- a/src/library/trackset/baseplaylistfeature.cpp +++ b/src/library/trackset/baseplaylistfeature.cpp @@ -138,7 +138,10 @@ void BasePlaylistFeature::initActions() { connect(m_pLibrary, &Library::trackSelected, this, - &BasePlaylistFeature::slotTrackSelected); + [this](const TrackPointer& pTrack) { + const auto trackId = pTrack ? pTrack->getId() : TrackId{}; + slotTrackSelected(trackId); + }); connect(m_pLibrary, &Library::switchToView, this, @@ -726,13 +729,9 @@ QModelIndex BasePlaylistFeature::indexFromPlaylistId(int playlistId) { return QModelIndex(); } -void BasePlaylistFeature::slotTrackSelected(TrackPointer pTrack) { - m_pSelectedTrack = pTrack; - TrackId trackId; - if (pTrack) { - trackId = pTrack->getId(); - } - m_playlistDao.getPlaylistsTrackIsIn(trackId, &m_playlistIdsOfSelectedTrack); +void BasePlaylistFeature::slotTrackSelected(TrackId trackId) { + m_selectedTrackId = trackId; + m_playlistDao.getPlaylistsTrackIsIn(m_selectedTrackId, &m_playlistIdsOfSelectedTrack); for (int row = 0; row < m_pSidebarModel->rowCount(); ++row) { QModelIndex index = m_pSidebarModel->index(row, 0); @@ -768,5 +767,5 @@ void BasePlaylistFeature::markTreeItem(TreeItem* pTreeItem) { } void BasePlaylistFeature::slotResetSelectedTrack() { - slotTrackSelected(TrackPointer()); + slotTrackSelected(TrackId{}); } diff --git a/src/library/trackset/baseplaylistfeature.h b/src/library/trackset/baseplaylistfeature.h index ea50f45256a..0a62812be0a 100644 --- a/src/library/trackset/baseplaylistfeature.h +++ b/src/library/trackset/baseplaylistfeature.h @@ -12,7 +12,7 @@ #include "library/dao/playlistdao.h" #include "library/trackset/basetracksetfeature.h" -#include "track/track_decl.h" +#include "track/trackid.h" class WLibrary; class KeyboardEventFilter; @@ -115,7 +115,7 @@ class BasePlaylistFeature : public BaseTrackSetFeature { QSet m_playlistIdsOfSelectedTrack; private slots: - void slotTrackSelected(TrackPointer pTrack); + void slotTrackSelected(TrackId trackId); void slotResetSelectedTrack(); private: @@ -123,5 +123,5 @@ class BasePlaylistFeature : public BaseTrackSetFeature { virtual QString getRootViewHtml() const = 0; void markTreeItem(TreeItem* pTreeItem); - TrackPointer m_pSelectedTrack; + TrackId m_selectedTrackId; }; diff --git a/src/library/trackset/crate/cratefeature.cpp b/src/library/trackset/crate/cratefeature.cpp index 1485fa77213..63269e5d378 100644 --- a/src/library/trackset/crate/cratefeature.cpp +++ b/src/library/trackset/crate/cratefeature.cpp @@ -139,7 +139,10 @@ void CrateFeature::connectLibrary(Library* pLibrary) { connect(pLibrary, &Library::trackSelected, this, - &CrateFeature::slotTrackSelected); + [this](const TrackPointer& pTrack) { + const auto trackId = pTrack ? pTrack->getId() : TrackId{}; + slotTrackSelected(trackId); + }); connect(pLibrary, &Library::switchToView, this, @@ -511,7 +514,7 @@ QModelIndex CrateFeature::rebuildChildModel(CrateId selectedCrateId) { m_pSidebarModel->insertTreeItemRows(modelRows, 0); // Update rendering of crates depending on the currently selected track - slotTrackSelected(m_pSelectedTrack); + slotTrackSelected(m_selectedTrackId); if (selectedRow >= 0) { return m_pSidebarModel->index(selectedRow, 0); @@ -536,10 +539,10 @@ void CrateFeature::updateChildModel(const QSet& updatedCrateIds) { m_pSidebarModel->getItem(index), crateSummary); m_pSidebarModel->triggerRepaint(index); } - if (m_pSelectedTrack) { + if (m_selectedTrackId.isValid()) { // Crates containing the currently selected track might // have been modified. - slotTrackSelected(m_pSelectedTrack); + slotTrackSelected(m_selectedTrackId); } } @@ -797,20 +800,18 @@ void CrateFeature::htmlLinkClicked(const QUrl& link) { } } -void CrateFeature::slotTrackSelected(TrackPointer pTrack) { - m_pSelectedTrack = std::move(pTrack); +void CrateFeature::slotTrackSelected(TrackId trackId) { + m_selectedTrackId = trackId; TreeItem* pRootItem = m_pSidebarModel->getRootItem(); VERIFY_OR_DEBUG_ASSERT(pRootItem != nullptr) { return; } - TrackId selectedTrackId; std::vector sortedTrackCrates; - if (m_pSelectedTrack) { - selectedTrackId = m_pSelectedTrack->getId(); + if (m_selectedTrackId.isValid()) { CrateTrackSelectResult trackCratesIter( - m_pTrackCollection->crates().selectTrackCratesSorted(selectedTrackId)); + m_pTrackCollection->crates().selectTrackCratesSorted(m_selectedTrackId)); while (trackCratesIter.next()) { sortedTrackCrates.push_back(trackCratesIter.crateId()); } @@ -821,7 +822,7 @@ void CrateFeature::slotTrackSelected(TrackPointer pTrack) { for (TreeItem* pTreeItem : pRootItem->children()) { DEBUG_ASSERT(pTreeItem != nullptr); bool crateContainsSelectedTrack = - selectedTrackId.isValid() && + m_selectedTrackId.isValid() && std::binary_search( sortedTrackCrates.begin(), sortedTrackCrates.end(), @@ -833,5 +834,5 @@ void CrateFeature::slotTrackSelected(TrackPointer pTrack) { } void CrateFeature::slotResetSelectedTrack() { - slotTrackSelected(TrackPointer()); + slotTrackSelected(TrackId{}); } diff --git a/src/library/trackset/crate/cratefeature.h b/src/library/trackset/crate/cratefeature.h index 57e2b80e18e..93974c73152 100644 --- a/src/library/trackset/crate/cratefeature.h +++ b/src/library/trackset/crate/cratefeature.h @@ -13,7 +13,7 @@ #include "library/trackset/crate/cratetablemodel.h" #include "library/treeitemmodel.h" #include "preferences/usersettings.h" -#include "track/track_decl.h" +#include "track/trackid.h" #include "util/parented_ptr.h" // forward declaration(s) @@ -69,7 +69,7 @@ class CrateFeature : public BaseTrackSetFeature { void slotCrateTableChanged(CrateId crateId); void slotCrateContentChanged(CrateId crateId); void htmlLinkClicked(const QUrl& link); - void slotTrackSelected(TrackPointer pTrack); + void slotTrackSelected(TrackId trackId); void slotResetSelectedTrack(); void slotUpdateCrateLabels(const QSet& updatedCrateIds); @@ -103,7 +103,7 @@ class CrateFeature : public BaseTrackSetFeature { CrateTableModel m_crateTableModel; QModelIndex m_lastRightClickedIndex; - TrackPointer m_pSelectedTrack; + TrackId m_selectedTrackId; parented_ptr m_pCreateCrateAction; parented_ptr m_pDeleteCrateAction;