summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Holthuis <jholthuis@mixxx.org>2021-12-24 02:28:28 +0100
committerJan Holthuis <jholthuis@mixxx.org>2022-01-11 19:53:42 +0100
commit73d6c72dd1810661cbaf63dce4152c80d6416366 (patch)
tree98da1726f72241b98665db8eae78347d93aa53be
parenta60a886ac2fda88d955bf1a9766d4c34955d7786 (diff)
PlayerManager: Add support for loading location into next free deck
-rw-r--r--src/mixer/playermanager.cpp11
-rw-r--r--src/mixer/playermanager.h1
-rw-r--r--src/qml/qmlplayermanagerproxy.cpp14
-rw-r--r--src/qml/qmlplayermanagerproxy.h3
4 files changed, 29 insertions, 0 deletions
diff --git a/src/mixer/playermanager.cpp b/src/mixer/playermanager.cpp
index cf3f90d2be..ae76ecbc8b 100644
--- a/src/mixer/playermanager.cpp
+++ b/src/mixer/playermanager.cpp
@@ -691,6 +691,17 @@ void PlayerManager::slotLoadTrackIntoNextAvailableDeck(TrackPointer pTrack) {
pDeck->slotLoadTrack(pTrack, false);
}
+void PlayerManager::slotLoadLocationIntoNextAvailableDeck(const QString& location, bool play) {
+ auto locker = lockMutex(&m_mutex);
+ BaseTrackPlayer* pDeck = findFirstStoppedPlayerInList(m_decks);
+ if (pDeck == nullptr) {
+ qDebug() << "PlayerManager: No stopped deck found, not loading track!";
+ return;
+ }
+
+ slotLoadLocationToPlayer(location, pDeck->getGroup(), play);
+}
+
void PlayerManager::slotLoadTrackIntoNextAvailableSampler(TrackPointer pTrack) {
auto locker = lockMutex(&m_mutex);
BaseTrackPlayer* pSampler = findFirstStoppedPlayerInList(m_samplers);
diff --git a/src/mixer/playermanager.h b/src/mixer/playermanager.h
index 35fed82dbb..723b9b799c 100644
--- a/src/mixer/playermanager.h
+++ b/src/mixer/playermanager.h
@@ -187,6 +187,7 @@ class PlayerManager : public QObject, public PlayerManagerInterface {
// Slots for loading tracks to decks
void slotLoadTrackIntoNextAvailableDeck(TrackPointer pTrack);
+ void slotLoadLocationIntoNextAvailableDeck(const QString& location, bool play = false);
// Loads the location to the deck. deckNumber is 1-indexed
void slotLoadToDeck(const QString& location, int deckNumber);
diff --git a/src/qml/qmlplayermanagerproxy.cpp b/src/qml/qmlplayermanagerproxy.cpp
index 35c480d963..483d99a56e 100644
--- a/src/qml/qmlplayermanagerproxy.cpp
+++ b/src/qml/qmlplayermanagerproxy.cpp
@@ -39,6 +39,20 @@ QObject* QmlPlayerManagerProxy::getPlayer(const QString& group) {
return pPlayerProxy;
}
+void QmlPlayerManagerProxy::loadLocationIntoNextAvailableDeck(
+ const QString& trackLocation, bool play) {
+ m_pPlayerManager->slotLoadLocationIntoNextAvailableDeck(trackLocation, play);
+}
+
+void QmlPlayerManagerProxy::loadLocationUrlIntoNextAvailableDeck(
+ const QUrl& trackLocationUrl, bool play) {
+ if (trackLocationUrl.isLocalFile()) {
+ loadLocationIntoNextAvailableDeck(trackLocationUrl.toLocalFile(), play);
+ } else {
+ qWarning() << "QmlPlayerManagerProxy: URL" << trackLocationUrl << "is not a local file!";
+ }
+}
+
void QmlPlayerManagerProxy::loadLocationToPlayer(
const QString& location, const QString& group, bool play) {
m_pPlayerManager->slotLoadLocationToPlayer(location, group, play);
diff --git a/src/qml/qmlplayermanagerproxy.h b/src/qml/qmlplayermanagerproxy.h
index 9b9b27ee36..738007d494 100644
--- a/src/qml/qmlplayermanagerproxy.h
+++ b/src/qml/qmlplayermanagerproxy.h
@@ -15,6 +15,9 @@ class QmlPlayerManagerProxy : public QObject {
QObject* parent = nullptr);
Q_INVOKABLE QObject* getPlayer(const QString& deck);
+ Q_INVOKABLE void loadLocationIntoNextAvailableDeck(const QString& location, bool play = false);
+ Q_INVOKABLE void loadLocationUrlIntoNextAvailableDeck(
+ const QUrl& locationUrl, bool play = false);
Q_INVOKABLE void loadLocationToPlayer(
const QString& location, const QString& group, bool play = false);