summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Holthuis <jholthuis@mixxx.org>2021-12-23 13:27:41 +0100
committerJan Holthuis <jholthuis@mixxx.org>2022-01-11 19:53:42 +0100
commit5f49f762e0328412292cae375b2f0d7f3240d002 (patch)
tree87c542ae87c403b3b10f7e0d9cda6cff6dbf353a
parent2e20cb2f7823bd509c6d253f322294f547942725 (diff)
PlayerManager: Add support for load-and-play track by location
-rw-r--r--src/library/library.cpp4
-rw-r--r--src/library/library.h2
-rw-r--r--src/mixer/playermanager.cpp11
-rw-r--r--src/mixer/playermanager.h7
-rw-r--r--src/mixer/samplerbank.cpp2
-rw-r--r--src/qml/qmlplayermanagerproxy.cpp4
-rw-r--r--src/qml/qmlplayermanagerproxy.h2
-rw-r--r--src/qml/qmlplayerproxy.cpp8
-rw-r--r--src/qml/qmlplayerproxy.h6
-rw-r--r--src/skin/legacy/legacyskinparser.cpp17
10 files changed, 35 insertions, 28 deletions
diff --git a/src/library/library.cpp b/src/library/library.cpp
index 78ecb99b98..40750af4eb 100644
--- a/src/library/library.cpp
+++ b/src/library/library.cpp
@@ -524,11 +524,11 @@ void Library::slotLoadTrack(TrackPointer pTrack) {
emit loadTrack(pTrack);
}
-void Library::slotLoadLocationToPlayer(const QString& location, const QString& group) {
+void Library::slotLoadLocationToPlayer(const QString& location, const QString& group, bool play) {
auto trackRef = TrackRef::fromFilePath(location);
TrackPointer pTrack = m_pTrackCollectionManager->getOrAddTrack(trackRef);
if (pTrack) {
- emit loadTrackToPlayer(pTrack, group);
+ emit loadTrackToPlayer(pTrack, group, play);
}
}
diff --git a/src/library/library.h b/src/library/library.h
index 6067551146..ff2a9faa2a 100644
--- a/src/library/library.h
+++ b/src/library/library.h
@@ -110,7 +110,7 @@ class Library: public QObject {
void slotSwitchToView(const QString& view);
void slotLoadTrack(TrackPointer pTrack);
void slotLoadTrackToPlayer(TrackPointer pTrack, const QString& group, bool play);
- void slotLoadLocationToPlayer(const QString& location, const QString& group);
+ void slotLoadLocationToPlayer(const QString& location, const QString& group, bool play);
void slotRefreshLibraryModels();
void slotCreatePlaylist();
void slotCreateCrate();
diff --git a/src/mixer/playermanager.cpp b/src/mixer/playermanager.cpp
index 81230764e8..cf3f90d2be 100644
--- a/src/mixer/playermanager.cpp
+++ b/src/mixer/playermanager.cpp
@@ -661,22 +661,23 @@ void PlayerManager::slotLoadTrackToPlayer(TrackPointer pTrack, const QString& gr
m_lastLoadedPlayer = group;
}
-void PlayerManager::slotLoadToPlayer(const QString& location, const QString& group) {
+void PlayerManager::slotLoadLocationToPlayer(
+ const QString& location, const QString& group, bool play) {
// The library will get the track and then signal back to us to load the
// track via slotLoadTrackToPlayer.
- emit loadLocationToPlayer(location, group);
+ emit loadLocationToPlayer(location, group, play);
}
void PlayerManager::slotLoadToDeck(const QString& location, int deck) {
- slotLoadToPlayer(location, groupForDeck(deck-1));
+ slotLoadLocationToPlayer(location, groupForDeck(deck - 1));
}
void PlayerManager::slotLoadToPreviewDeck(const QString& location, int previewDeck) {
- slotLoadToPlayer(location, groupForPreviewDeck(previewDeck-1));
+ slotLoadLocationToPlayer(location, groupForPreviewDeck(previewDeck - 1));
}
void PlayerManager::slotLoadToSampler(const QString& location, int sampler) {
- slotLoadToPlayer(location, groupForSampler(sampler-1));
+ slotLoadLocationToPlayer(location, groupForSampler(sampler - 1));
}
void PlayerManager::slotLoadTrackIntoNextAvailableDeck(TrackPointer pTrack) {
diff --git a/src/mixer/playermanager.h b/src/mixer/playermanager.h
index 04ab325f09..35fed82dbb 100644
--- a/src/mixer/playermanager.h
+++ b/src/mixer/playermanager.h
@@ -179,7 +179,10 @@ class PlayerManager : public QObject, public PlayerManagerInterface {
public slots:
// Slots for loading tracks into a Player, which is either a Sampler or a Deck
void slotLoadTrackToPlayer(TrackPointer pTrack, const QString& group, bool play = false);
- void slotLoadToPlayer(const QString& location, const QString& group);
+ void slotLoadLocationToPlayer(const QString& location, const QString& group, bool play = false);
+ void slotLoadLocationToPlayerStopped(const QString& location, const QString& group) {
+ slotLoadLocationToPlayer(location, group, false);
+ };
void slotCloneDeck(const QString& source_group, const QString& target_group);
// Slots for loading tracks to decks
@@ -207,7 +210,7 @@ class PlayerManager : public QObject, public PlayerManagerInterface {
void onTrackAnalysisFinished();
signals:
- void loadLocationToPlayer(const QString& location, const QString& group);
+ void loadLocationToPlayer(const QString& location, const QString& group, bool play);
// Emitted when the user tries to enable a microphone talkover control when
// there is no input configured.
diff --git a/src/mixer/samplerbank.cpp b/src/mixer/samplerbank.cpp
index 732f58ec0b..64f9472b5d 100644
--- a/src/mixer/samplerbank.cpp
+++ b/src/mixer/samplerbank.cpp
@@ -216,7 +216,7 @@ bool SamplerBank::loadSamplerBankFromPath(const QString& samplerBankPath) {
if (location.isEmpty()) {
m_pPlayerManager->slotLoadTrackToPlayer(TrackPointer(), group);
} else {
- m_pPlayerManager->slotLoadToPlayer(location, group);
+ m_pPlayerManager->slotLoadLocationToPlayer(location, group);
}
}
diff --git a/src/qml/qmlplayermanagerproxy.cpp b/src/qml/qmlplayermanagerproxy.cpp
index 8379320f0a..7b7e2ca4a6 100644
--- a/src/qml/qmlplayermanagerproxy.cpp
+++ b/src/qml/qmlplayermanagerproxy.cpp
@@ -31,8 +31,8 @@ QObject* QmlPlayerManagerProxy::getPlayer(const QString& group) {
connect(pPlayerProxy,
&QmlPlayerProxy::loadTrackFromLocationRequested,
this,
- [this, group](const QString& trackLocation) {
- emit loadLocationToPlayer(trackLocation, group);
+ [this, group](const QString& trackLocation, bool play) {
+ emit loadLocationToPlayer(trackLocation, group, play);
});
connect(pPlayerProxy,
&QmlPlayerProxy::cloneFromGroup,
diff --git a/src/qml/qmlplayermanagerproxy.h b/src/qml/qmlplayermanagerproxy.h
index a1c6216e14..d566c34dea 100644
--- a/src/qml/qmlplayermanagerproxy.h
+++ b/src/qml/qmlplayermanagerproxy.h
@@ -17,7 +17,7 @@ class QmlPlayerManagerProxy : public QObject {
Q_INVOKABLE QObject* getPlayer(const QString& deck);
signals:
- void loadLocationToPlayer(const QString& location, const QString& group);
+ void loadLocationToPlayer(const QString& location, const QString& group, bool play = false);
private:
const std::shared_ptr<PlayerManager> m_pPlayerManager;
diff --git a/src/qml/qmlplayerproxy.cpp b/src/qml/qmlplayerproxy.cpp
index 15226b188d..9f5d1e651c 100644
--- a/src/qml/qmlplayerproxy.cpp
+++ b/src/qml/qmlplayerproxy.cpp
@@ -41,13 +41,13 @@ QmlPlayerProxy::QmlPlayerProxy(BaseTrackPlayer* pTrackPlayer, QObject* parent)
connect(this, &QmlPlayerProxy::trackChanged, this, &QmlPlayerProxy::slotTrackChanged);
}
-void QmlPlayerProxy::loadTrackFromLocation(const QString& trackLocation) {
- emit loadTrackFromLocationRequested(trackLocation);
+void QmlPlayerProxy::loadTrackFromLocation(const QString& trackLocation, bool play) {
+ emit loadTrackFromLocationRequested(trackLocation, play);
}
-void QmlPlayerProxy::loadTrackFromLocationUrl(const QUrl& trackLocationUrl) {
+void QmlPlayerProxy::loadTrackFromLocationUrl(const QUrl& trackLocationUrl, bool play) {
if (trackLocationUrl.isLocalFile()) {
- loadTrackFromLocation(trackLocationUrl.toLocalFile());
+ loadTrackFromLocation(trackLocationUrl.toLocalFile(), play);
} else {
qWarning() << "QmlPlayerProxy: URL" << trackLocationUrl << "is not a local file!";
}
diff --git a/src/qml/qmlplayerproxy.h b/src/qml/qmlplayerproxy.h
index 89509bcdbc..6ea28e27dc 100644
--- a/src/qml/qmlplayerproxy.h
+++ b/src/qml/qmlplayerproxy.h
@@ -55,8 +55,8 @@ class QmlPlayerProxy : public QObject {
return m_pTrackPlayer;
}
- Q_INVOKABLE void loadTrackFromLocation(const QString& trackLocation);
- Q_INVOKABLE void loadTrackFromLocationUrl(const QUrl& trackLocationUrl);
+ Q_INVOKABLE void loadTrackFromLocation(const QString& trackLocation, bool play = false);
+ Q_INVOKABLE void loadTrackFromLocationUrl(const QUrl& trackLocationUrl, bool play = false);
public slots:
void slotTrackLoaded(TrackPointer pTrack);
@@ -99,7 +99,7 @@ class QmlPlayerProxy : public QObject {
void coverArtUrlChanged();
void trackLocationUrlChanged();
- void loadTrackFromLocationRequested(const QString& trackLocation);
+ void loadTrackFromLocationRequested(const QString& trackLocation, bool play);
private:
QPointer<BaseTrackPlayer> m_pTrackPlayer;
diff --git a/src/skin/legacy/legacyskinparser.cpp b/src/skin/legacy/legacyskinparser.cpp
index 16f00063ce..09ffed4e62 100644
--- a/src/skin/legacy/legacyskinparser.cpp
+++ b/src/skin/legacy/legacyskinparser.cpp
@@ -962,7 +962,7 @@ QWidget* LegacySkinParser::parseOverview(const QDomElement& node) {
connect(overviewWidget,
&WOverview::trackDropped,
m_pPlayerManager,
- &PlayerManager::slotLoadToPlayer);
+ &PlayerManager::slotLoadLocationToPlayerStopped);
connect(overviewWidget, &WOverview::cloneDeck,
m_pPlayerManager, &PlayerManager::slotCloneDeck);
@@ -1017,7 +1017,7 @@ QWidget* LegacySkinParser::parseVisual(const QDomElement& node) {
connect(viewer,
&WWaveformViewer::trackDropped,
m_pPlayerManager,
- &PlayerManager::slotLoadToPlayer);
+ &PlayerManager::slotLoadLocationToPlayerStopped);
connect(viewer, &WWaveformViewer::cloneDeck,
m_pPlayerManager, &PlayerManager::slotCloneDeck);
@@ -1046,7 +1046,7 @@ QWidget* LegacySkinParser::parseText(const QDomElement& node) {
connect(pTrackText,
&WTrackText::trackDropped,
m_pPlayerManager,
- &PlayerManager::slotLoadToPlayer);
+ &PlayerManager::slotLoadLocationToPlayerStopped);
connect(pTrackText, &WTrackText::cloneDeck, m_pPlayerManager, &PlayerManager::slotCloneDeck);
TrackPointer pTrack = pPlayer->getLoadedTrack();
@@ -1083,7 +1083,7 @@ QWidget* LegacySkinParser::parseTrackProperty(const QDomElement& node) {
connect(pTrackProperty,
&WTrackProperty::trackDropped,
m_pPlayerManager,
- &PlayerManager::slotLoadToPlayer);
+ &PlayerManager::slotLoadLocationToPlayerStopped);
connect(pTrackProperty,
&WTrackProperty::cloneDeck,
m_pPlayerManager,
@@ -1126,7 +1126,7 @@ QWidget* LegacySkinParser::parseTrackWidgetGroup(const QDomElement& node) {
connect(pGroup,
&WTrackWidgetGroup::trackDropped,
m_pPlayerManager,
- &PlayerManager::slotLoadToPlayer);
+ &PlayerManager::slotLoadLocationToPlayerStopped);
connect(pGroup,
&WTrackWidgetGroup::cloneDeck,
m_pPlayerManager,
@@ -1282,7 +1282,10 @@ QWidget* LegacySkinParser::parseSpinny(const QDomElement& node) {
spinny,
&WSpinny::render);
connect(waveformWidgetFactory, &WaveformWidgetFactory::swapSpinnies, spinny, &WSpinny::swap);
- connect(spinny, &WSpinny::trackDropped, m_pPlayerManager, &PlayerManager::slotLoadToPlayer);
+ connect(spinny,
+ &WSpinny::trackDropped,
+ m_pPlayerManager,
+ &PlayerManager::slotLoadLocationToPlayerStopped);
connect(spinny, &WSpinny::cloneDeck, m_pPlayerManager, &PlayerManager::slotCloneDeck);
ControlObject* showCoverControl = controlFromConfigNode(node.toElement(), "ShowCoverControl");
@@ -1341,7 +1344,7 @@ QWidget* LegacySkinParser::parseCoverArt(const QDomElement& node) {
connect(pCoverArt,
&WCoverArt::trackDropped,
m_pPlayerManager,
- &PlayerManager::slotLoadToPlayer);
+ &PlayerManager::slotLoadLocationToPlayerStopped);
connect(pCoverArt, &WCoverArt::cloneDeck,
m_pPlayerManager, &PlayerManager::slotCloneDeck);
}