1 // Helper class to have easy access 2 #pragma once 3 4 #include <QAtomicInt> 5 #include <QMap> 6 #include <QMutex> 7 #include <QObject> 8 #include <QTimerEvent> 9 10 #include "control/controlproxy.h" 11 #include "track/track_decl.h" 12 13 class PlayerInfo : public QObject { 14 Q_OBJECT 15 public: 16 static PlayerInfo& create(); 17 static PlayerInfo& instance(); 18 static void destroy(); 19 TrackPointer getTrackInfo(const QString& group); 20 void setTrackInfo(const QString& group, const TrackPointer& trackInfoObj); 21 TrackPointer getCurrentPlayingTrack(); 22 int getCurrentPlayingDeck(); 23 QMap<QString, TrackPointer> getLoadedTracks(); 24 bool isTrackLoaded(const TrackPointer& pTrack) const; 25 bool isFileLoaded(const QString& track_location) const; 26 27 signals: 28 void currentPlayingDeckChanged(int deck); 29 void currentPlayingTrackChanged(TrackPointer pTrack); 30 void trackLoaded(const QString& group, TrackPointer pTrack); 31 void trackUnloaded(const QString& group, TrackPointer pTrack); 32 33 private: 34 class DeckControls { 35 public: DeckControls(const QString & group)36 DeckControls(const QString& group) 37 : m_play(group, "play"), 38 m_pregain(group, "pregain"), 39 m_volume(group, "volume"), 40 m_orientation(group, "orientation") { 41 } 42 43 ControlProxy m_play; 44 ControlProxy m_pregain; 45 ControlProxy m_volume; 46 ControlProxy m_orientation; 47 }; 48 49 void clearControlCache(); 50 void timerEvent(QTimerEvent* pTimerEvent) override; 51 void updateCurrentPlayingDeck(); 52 DeckControls* getDeckControls(int i); 53 54 PlayerInfo(); 55 ~PlayerInfo() override; 56 57 mutable QMutex m_mutex; 58 ControlProxy* m_pCOxfader; 59 // QMap is faster than QHash for small count of elements < 50 60 QMap<QString, TrackPointer> m_loadedTrackMap; 61 QAtomicInt m_currentlyPlayingDeck; 62 QList<DeckControls*> m_deckControlList; 63 64 static PlayerInfo* m_pPlayerinfo; 65 }; 66