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