summaryrefslogtreecommitdiffstats
path: root/src/imports/multimedia/qdeclarativeaudio.cpp
diff options
context:
space:
mode:
authorLoïc Molinari <loic.molinari@canonical.com>2015-08-05 12:21:15 +0200
committerYoann Lopes <yoann.lopes@theqtcompany.com>2015-08-10 09:54:50 +0000
commit6c6d265a89d4e125297fe780cf1970db408e5974 (patch)
tree75da2c60510395a38d23def82a1e128afa2ea0f1 /src/imports/multimedia/qdeclarativeaudio.cpp
parent872f0de43ea49ac5bac9ca956a65c384649bb92b (diff)
Added new playlist QML type.
Change-Id: I0788cc9719f427457ad0be9c9a5bfda00451a0c4 Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
Diffstat (limited to 'src/imports/multimedia/qdeclarativeaudio.cpp')
-rw-r--r--src/imports/multimedia/qdeclarativeaudio.cpp83
1 files changed, 80 insertions, 3 deletions
diff --git a/src/imports/multimedia/qdeclarativeaudio.cpp b/src/imports/multimedia/qdeclarativeaudio.cpp
index bb1af91db..60af6234b 100644
--- a/src/imports/multimedia/qdeclarativeaudio.cpp
+++ b/src/imports/multimedia/qdeclarativeaudio.cpp
@@ -42,6 +42,7 @@
#include <qmetadatareadercontrol.h>
#include <qmediaavailabilitycontrol.h>
+#include "qdeclarativeplaylist_p.h"
#include "qdeclarativemediametadata_p.h"
#include <QTimerEvent>
@@ -99,11 +100,13 @@ void QDeclarativeAudio::_q_availabilityChanged(QMultimedia::AvailabilityStatus)
QDeclarativeAudio::QDeclarativeAudio(QObject *parent)
: QObject(parent)
+ , m_playlist(0)
, m_autoPlay(false)
, m_autoLoad(true)
, m_loaded(false)
, m_muted(false)
, m_complete(false)
+ , m_emitPlaylistChanged(false)
, m_loopCount(1)
, m_runningCount(0)
, m_position(0)
@@ -154,6 +157,45 @@ QUrl QDeclarativeAudio::source() const
return m_source;
}
+QDeclarativePlaylist *QDeclarativeAudio::playlist() const
+{
+ return m_playlist;
+}
+
+void QDeclarativeAudio::setPlaylist(QDeclarativePlaylist *playlist)
+{
+ if (playlist == m_playlist && m_source.isEmpty())
+ return;
+
+ if (!m_source.isEmpty()) {
+ m_source.clear();
+ emit sourceChanged();
+ }
+
+ m_playlist = playlist;
+ m_content = m_playlist ?
+ QMediaContent(m_playlist->mediaPlaylist(), QUrl(), false) : QMediaContent();
+ m_loaded = false;
+ if (m_complete && (m_autoLoad || m_content.isNull() || m_autoPlay)) {
+ if (m_error != QMediaPlayer::ServiceMissingError && m_error != QMediaPlayer::NoError) {
+ m_error = QMediaPlayer::NoError;
+ m_errorString = QString();
+
+ emit errorChanged();
+ }
+
+ if (!playlist)
+ m_emitPlaylistChanged = true;
+ m_player->setMedia(m_content, 0);
+ m_loaded = true;
+ }
+ else
+ emit playlistChanged();
+
+ if (m_autoPlay)
+ m_player->play();
+}
+
bool QDeclarativeAudio::autoPlay() const
{
return m_autoPlay;
@@ -171,9 +213,14 @@ void QDeclarativeAudio::setAutoPlay(bool autoplay)
void QDeclarativeAudio::setSource(const QUrl &url)
{
- if (url == m_source)
+ if (url == m_source && m_playlist == NULL)
return;
+ if (m_playlist) {
+ m_playlist = NULL;
+ emit playlistChanged();
+ }
+
m_source = url;
m_content = m_source.isEmpty() ? QMediaContent() : m_source;
m_loaded = false;
@@ -430,6 +477,16 @@ void QDeclarativeAudio::seek(int position)
\qmlproperty url QtMultimedia::Audio::source
This property holds the source URL of the media.
+
+ Setting the \l source property clears the current \l playlist, if any.
+*/
+
+/*!
+ \qmlproperty Playlist QtMultimedia::Audio::playlist
+
+ This property holds the playlist used by the media player.
+
+ Setting the \l playlist property resets the \l source to an empty string.
*/
/*!
@@ -655,8 +712,8 @@ void QDeclarativeAudio::classBegin()
this, SLOT(_q_statusChanged()));
connect(m_player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
this, SLOT(_q_statusChanged()));
- connect(m_player, SIGNAL(mediaChanged(QMediaContent)),
- this, SIGNAL(sourceChanged()));
+ connect(m_player, SIGNAL(mediaChanged(const QMediaContent&)),
+ this, SLOT(_q_mediaChanged(const QMediaContent&)));
connect(m_player, SIGNAL(durationChanged(qint64)),
this, SIGNAL(durationChanged()));
connect(m_player, SIGNAL(positionChanged(qint64)),
@@ -757,6 +814,16 @@ void QDeclarativeAudio::_q_statusChanged()
}
}
+void QDeclarativeAudio::_q_mediaChanged(const QMediaContent &media)
+{
+ if (!media.playlist() && !m_emitPlaylistChanged) {
+ emit sourceChanged();
+ } else {
+ m_emitPlaylistChanged = false;
+ emit playlistChanged();
+ }
+}
+
/*!
\qmlproperty string QtMultimedia::Audio::errorString
@@ -1250,6 +1317,16 @@ void QDeclarativeAudio::_q_statusChanged()
\qmlproperty url QtMultimedia::MediaPlayer::source
This property holds the source URL of the media.
+
+ Setting the \l source property clears the current \l playlist, if any.
+*/
+
+/*!
+ \qmlproperty Playlist QtMultimedia::MediaPlayer::playlist
+
+ This property holds the playlist used by the media player.
+
+ Setting the \l playlist property resets the \l source to an empty string.
*/
/*!