diff options
author | Loïc Molinari <loic.molinari@canonical.com> | 2015-08-05 12:21:15 +0200 |
---|---|---|
committer | Yoann Lopes <yoann.lopes@theqtcompany.com> | 2015-08-10 09:54:50 +0000 |
commit | 6c6d265a89d4e125297fe780cf1970db408e5974 (patch) | |
tree | 75da2c60510395a38d23def82a1e128afa2ea0f1 /src/imports/multimedia/qdeclarativeaudio.cpp | |
parent | 872f0de43ea49ac5bac9ca956a65c384649bb92b (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.cpp | 83 |
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. */ /*! |