summaryrefslogtreecommitdiffstats
path: root/mediaplayer/mediaplayer.h
diff options
context:
space:
mode:
Diffstat (limited to 'mediaplayer/mediaplayer.h')
-rw-r--r--mediaplayer/mediaplayer.h111
1 files changed, 67 insertions, 44 deletions
diff --git a/mediaplayer/mediaplayer.h b/mediaplayer/mediaplayer.h
index 9afe6c6..e274d75 100644
--- a/mediaplayer/mediaplayer.h
+++ b/mediaplayer/mediaplayer.h
@@ -18,6 +18,7 @@
#define MEDIAPLAYER_H
#include <QObject>
+#include <QMutex>
#include <QtQml/QQmlContext>
#include <QtQml/QQmlListProperty>
@@ -36,71 +37,93 @@ class Playlist : public QObject
Q_PROPERTY(QString genre READ genre NOTIFY genreChanged)
public:
- explicit Playlist(QVariantMap& item);
- virtual ~Playlist();
+ explicit Playlist(QVariantMap& item);
+ virtual ~Playlist();
- bool operator<(Playlist& c) { return ((this->m_index < c.m_index)); };
- int index() { return m_index; };
- int duration() { return m_duration; };
- QString path() { return m_path; };
+ bool operator<(Playlist& c) { return ((this->m_index < c.m_index)); };
+ int index() { return m_index; };
+ int duration() { return m_duration; };
+ QString path() { return m_path; };
- // METADATA FIELDS
- QString title() { return m_title; };
- QString album() { return m_album; };
- QString artist() { return m_artist; };
- QString genre() { return m_genre; };
+ // METADATA FIELDS
+ QString title() { return m_title; };
+ QString album() { return m_album; };
+ QString artist() { return m_artist; };
+ QString genre() { return m_genre; };
signals:
- void indexChanged();
- void durationChanged();
- void pathChanged();
- void titleChanged();
- void albumChanged();
- void artistChanged();
- void genreChanged();
+ void indexChanged();
+ void durationChanged();
+ void pathChanged();
+ void titleChanged();
+ void albumChanged();
+ void artistChanged();
+ void genreChanged();
private:
- int m_index, m_duration;
- QString m_path, m_title, m_album, m_artist, m_genre;
+ int m_index, m_duration;
+ QString m_path, m_title, m_album, m_artist, m_genre;
};
+class MediaplayerBackend;
class MediaplayerMpdBackend;
+class MediaplayerBluezBackend;
class Mediaplayer : public QObject
{
Q_OBJECT
public:
- explicit Mediaplayer(QQmlContext *context, QObject * parent = Q_NULLPTR);
- virtual ~Mediaplayer();
-
- // controls
- Q_INVOKABLE void connect();
- Q_INVOKABLE void disconnect();
- Q_INVOKABLE void connectBluetooth();
- Q_INVOKABLE void disconnectBluetooth();
- Q_INVOKABLE void play();
- Q_INVOKABLE void pause();
- Q_INVOKABLE void previous();
- Q_INVOKABLE void next();
- Q_INVOKABLE void seek(int);
- Q_INVOKABLE void fastforward(int);
- Q_INVOKABLE void rewind(int);
- Q_INVOKABLE void picktrack(int);
- Q_INVOKABLE void volume(int);
- Q_INVOKABLE void loop(QString);
+ explicit Mediaplayer(QQmlContext *context, QObject * parent = Q_NULLPTR);
+ virtual ~Mediaplayer();
+
+ // NOTE: Start in the sense of the user is ready to receive events
+ Q_INVOKABLE void start(void);
+
+ // controls
+ Q_INVOKABLE void connect();
+ Q_INVOKABLE void disconnect();
+ Q_INVOKABLE void connectBluetooth();
+ Q_INVOKABLE void disconnectBluetooth();
+ Q_INVOKABLE void play();
+ Q_INVOKABLE void pause();
+ Q_INVOKABLE void previous();
+ Q_INVOKABLE void next();
+ Q_INVOKABLE void seek(int);
+ Q_INVOKABLE void fastforward(int);
+ Q_INVOKABLE void rewind(int);
+ Q_INVOKABLE void picktrack(int);
+ Q_INVOKABLE void volume(int);
+ Q_INVOKABLE void loop(QString);
public slots:
- void updatePlaylist(QVariantMap playlist);
- void updateMetadata(QVariantMap metadata);
+ void updateLocalPlaylist(QVariantMap playlist);
+ void updateLocalMetadata(QVariantMap metadata);
+ void updateBluetoothMetadata(QVariantMap metadata);
+ void updateBluetoothMediaConnected(const bool connected);
signals:
- void metadataChanged(QVariantMap metadata);
+ void metadataChanged(QVariantMap metadata);
private:
- QQmlContext *m_context;
- QList<QObject *> m_playlist;
- MediaplayerMpdBackend *m_backend;
+ void updateMetadata(QVariantMap &metadata);
+
+ QQmlContext *m_context;
+ QList<QObject *> m_playlist;
+
+ MediaplayerBackend *m_backend;
+ MediaplayerMpdBackend *m_mpd_backend;
+ MediaplayerBluezBackend *m_bluez_backend;
+ QMutex m_backend_mutex;
+ bool m_bt_connected = false;
+
+ // Need to track if a Bluetooth connect/disconnect is in progress
+ // to serialize things. This avoids potential issues from multiple
+ // inputs from the UI, which are easy to trigger with the current
+ // demo app not having debouncing logic wrt the operation not being
+ // instant.
+ bool m_bt_operation = false;
+ QMutex m_bt_operation_mutex;
};
#endif // MEDIAPLAYER_H