Browse Source

qt: allow passing media options when playing/enqueueing medialibrary items

pull/113/head
Pierre Lamot 6 years ago
parent
commit
5e44b0a564
  1. 50
      modules/gui/qt/medialibrary/medialib.cpp
  2. 18
      modules/gui/qt/medialibrary/medialib.hpp
  3. 9
      modules/gui/qt/playlist/media.hpp

50
modules/gui/qt/medialibrary/medialib.cpp

@ -50,20 +50,20 @@ void MediaLib::openMRLFromMedia(const vlc_ml_media_t& media, bool start )
}
}
void MediaLib::addToPlaylist(const QString& mrl)
void MediaLib::addToPlaylist(const QString& mrl, const QStringList* options)
{
vlc::playlist::Media media{ mrl, mrl };
vlc::playlist::Media media{ mrl, mrl, options };
m_intf->p_sys->p_mainPlaylistController->append( {media}, false );
}
void MediaLib::addToPlaylist(const QUrl& mrl)
void MediaLib::addToPlaylist(const QUrl& mrl, const QStringList* options)
{
vlc::playlist::Media media{ mrl.toString(QUrl::None), mrl.fileName() };
vlc::playlist::Media media{ mrl.toString(QUrl::None), mrl.fileName(), options };
m_intf->p_sys->p_mainPlaylistController->append( {media} , false );
}
// A specific item has been asked to be added to the playlist
void MediaLib::addToPlaylist(const MLParentId & itemId)
void MediaLib::addToPlaylist(const MLParentId & itemId, const QStringList* options)
{
//invalid item
if (itemId.id == 0)
@ -73,7 +73,7 @@ void MediaLib::addToPlaylist(const MLParentId & itemId)
{
vlc::playlist::InputItemPtr item( vlc_ml_get_input_item( m_ml, itemId.id ), false );
if (item) {
QVector<vlc::playlist::Media> medias = { vlc::playlist::Media(item.get()) };
QVector<vlc::playlist::Media> medias = { vlc::playlist::Media(item.get(), options) };
m_intf->p_sys->p_mainPlaylistController->append(medias, false);
}
}
@ -89,37 +89,37 @@ void MediaLib::addToPlaylist(const MLParentId & itemId)
QVector<vlc::playlist::Media> medias;
std::transform(mediaRange.begin(), mediaRange.end(), std::back_inserter(medias), [&](vlc_ml_media_t& m) {
vlc::playlist::InputItemPtr item(vlc_ml_get_input_item( m_ml, m.i_id ), false);
return vlc::playlist::Media(item.get());
return vlc::playlist::Media(item.get(), options);
});
m_intf->p_sys->p_mainPlaylistController->append(medias, false);
}
}
void MediaLib::addToPlaylist(const QVariantList& itemIdList)
void MediaLib::addToPlaylist(const QVariantList& itemIdList, const QStringList* options)
{
for (const QVariant& varValue: itemIdList)
{
if (varValue.canConvert<QUrl>())
{
auto mrl = varValue.value<QUrl>();
addToPlaylist(mrl);
addToPlaylist(mrl, options);
}
else if (varValue.canConvert<QString>())
{
auto mrl = varValue.value<QString>();
addToPlaylist(mrl);
addToPlaylist(mrl, options);
}
else if (varValue.canConvert<MLParentId>())
{
MLParentId itemId = varValue.value<MLParentId>();
addToPlaylist(itemId);
addToPlaylist(itemId, options);
}
}
}
// A specific item has been asked to be played,
// so it's added to the playlist and played
void MediaLib::addAndPlay(const MLParentId & itemId )
void MediaLib::addAndPlay(const MLParentId & itemId, const QStringList* options )
{
if (itemId.id == 0)
return;
@ -127,7 +127,7 @@ void MediaLib::addAndPlay(const MLParentId & itemId )
{
vlc::playlist::InputItemPtr item(vlc_ml_get_input_item( m_ml, itemId.id ), false);
if (item) {
QVector<vlc::playlist::Media> medias = { vlc::playlist::Media(item.get()) };
QVector<vlc::playlist::Media> medias = { vlc::playlist::Media(item.get(), options) };
m_intf->p_sys->p_mainPlaylistController->append(medias, true);
}
}
@ -143,26 +143,26 @@ void MediaLib::addAndPlay(const MLParentId & itemId )
QVector<vlc::playlist::Media> medias;
std::transform(mediaRange.begin(), mediaRange.end(), std::back_inserter(medias), [&](vlc_ml_media_t& m) {
vlc::playlist::InputItemPtr item(vlc_ml_get_input_item( m_ml, m.i_id ), false);
return vlc::playlist::Media(item.get());
return vlc::playlist::Media(item.get(), options);
});
m_intf->p_sys->p_mainPlaylistController->append(medias, true);
}
}
void MediaLib::addAndPlay(const QString& mrl)
void MediaLib::addAndPlay(const QString& mrl, const QStringList* options)
{
vlc::playlist::Media media{ mrl, mrl };
vlc::playlist::Media media{ mrl, mrl, options };
m_intf->p_sys->p_mainPlaylistController->append( {media}, true );
}
void MediaLib::addAndPlay(const QUrl& mrl)
void MediaLib::addAndPlay(const QUrl& mrl, const QStringList* options)
{
vlc::playlist::Media media{ mrl.toString(QUrl::None), mrl.fileName() };
vlc::playlist::Media media{ mrl.toString(QUrl::None), mrl.fileName(), options };
m_intf->p_sys->p_mainPlaylistController->append( {media}, true );
}
void MediaLib::addAndPlay(const QVariantList& itemIdList)
void MediaLib::addAndPlay(const QVariantList& itemIdList, const QStringList* options)
{
bool b_start = true;
for (const QVariant& varValue: itemIdList)
@ -171,25 +171,25 @@ void MediaLib::addAndPlay(const QVariantList& itemIdList)
{
auto mrl = varValue.value<QUrl>();
if (b_start)
addAndPlay(mrl);
addAndPlay(mrl, options);
else
addToPlaylist(mrl);
addToPlaylist(mrl, options);
}
if (varValue.canConvert<QString>())
{
auto mrl = varValue.value<QString>();
if (b_start)
addAndPlay(mrl);
addAndPlay(mrl, options);
else
addToPlaylist(mrl);
addToPlaylist(mrl, options);
}
else if (varValue.canConvert<MLParentId>())
{
MLParentId itemId = varValue.value<MLParentId>();
if (b_start)
addAndPlay(itemId);
addAndPlay(itemId, options);
else
addToPlaylist(itemId);
addToPlaylist(itemId, options);
} else {
continue;
}

18
modules/gui/qt/medialibrary/medialib.hpp

@ -46,15 +46,15 @@ class MediaLib : public QObject
public:
MediaLib(intf_thread_t* _intf, QObject* _parent = nullptr );
Q_INVOKABLE void addToPlaylist(const MLParentId &itemId);
Q_INVOKABLE void addToPlaylist(const QString& mrl);
Q_INVOKABLE void addToPlaylist(const QUrl& mrl);
Q_INVOKABLE void addToPlaylist(const QVariantList& itemIdList);
Q_INVOKABLE void addAndPlay(const MLParentId &itemId);
Q_INVOKABLE void addAndPlay(const QString& mrl);
Q_INVOKABLE void addAndPlay(const QUrl& mrl);
Q_INVOKABLE void addAndPlay(const QVariantList&itemIdList);
Q_INVOKABLE void addToPlaylist(const MLParentId &itemId, const QStringList* options = nullptr);
Q_INVOKABLE void addToPlaylist(const QString& mrl, const QStringList* options = nullptr);
Q_INVOKABLE void addToPlaylist(const QUrl& mrl, const QStringList* options = nullptr);
Q_INVOKABLE void addToPlaylist(const QVariantList& itemIdList, const QStringList* options = nullptr);
Q_INVOKABLE void addAndPlay(const MLParentId &itemId, const QStringList* options = nullptr);
Q_INVOKABLE void addAndPlay(const QString& mrl, const QStringList* options = nullptr);
Q_INVOKABLE void addAndPlay(const QUrl& mrl, const QStringList* options = nullptr);
Q_INVOKABLE void addAndPlay(const QVariantList&itemIdList, const QStringList* options = nullptr);
Q_INVOKABLE void reload();

9
modules/gui/qt/playlist/media.hpp

@ -36,7 +36,7 @@ using InputItemPtr = vlc_shared_data_ptr_type(input_item_t,
class Media
{
public:
Media(input_item_t *media = nullptr)
Media(input_item_t *media = nullptr, const QStringList* options = nullptr)
{
if (media)
{
@ -44,10 +44,11 @@ public:
ptr.reset(input_item_Copy(media), false);
if (!ptr)
throw std::bad_alloc();
setMediaOptions(options);
}
}
Media(QString uri, QString name, QStringList* options = nullptr)
Media(QString uri, QString name, const QStringList* options = nullptr)
{
auto uUri = uri.toUtf8();
auto uName = name.toUtf8();
@ -56,7 +57,11 @@ public:
ptr.reset(input_item_New(rawUri, rawName), false);
if (!ptr)
throw std::bad_alloc();
setMediaOptions(options);
}
void setMediaOptions(const QStringList* options = nullptr)
{
if (options && options->count() > 0)
{
char **ppsz_options = NULL;

Loading…
Cancel
Save