lena_pi/LenaPi/controllers/MusicController.cpp
2019-04-04 13:38:56 +02:00

60 lines
2 KiB
C++

#include "MusicController.h"
#include <QDebug>
#include <models/MusicModel.h>
#include <VLCQtCore/MediaPlayer.h>
#include "EnergySaver.h"
MusicController::MusicController(QObject *parent) : QObject(parent)
{
mVlc = new VlcInstance(VlcCommon::args(), this);
mModel = new MusicModel(mVlc, this);
mPlayer = new VlcMediaListPlayer(mVlc);
connect(mModel, &MusicModel::navigateTo, this, &MusicController::navigateTo);
connect(mModel, &MusicModel::navigateTo, [this](NavigationItemModel*){
if(mModel->isPlaying()) mModel->playPause();
});
connect(mModel, &MusicModel::play, mPlayer, &VlcMediaListPlayer::play);
connect(mModel, &MusicModel::stop, mPlayer, &VlcMediaListPlayer::stop);
connect(mModel, &MusicModel::previous, mPlayer, &VlcMediaListPlayer::previous);
connect(mModel, &MusicModel::next, mPlayer, &VlcMediaListPlayer::next);
connect(mModel, &MusicModel::pause, mPlayer->mediaPlayer(), &VlcMediaPlayer::pause);
connect(mPlayer, SIGNAL(nextItemSet(VlcMedia*)), mModel, SLOT(onNextMediaSet(VlcMedia*)));
connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::lengthChanged, mModel, &MusicModel::onLengthChanged);
connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::timeChanged, mModel, &MusicModel::onTimeChanged);
// hand over player signals to energy saver in order to determine player activity.
connect(mPlayer->mediaPlayer(), &VlcMediaPlayer::timeChanged, EnergySaver::instance(), &EnergySaver::restartTimer);
}
MusicController::~MusicController()
{
mPlayer->deleteLater();
}
void MusicController::initPlayer(NavigationItemModel *item)
{
if(item != mModel->getCurrentItem()){
mPlayer->stop();
mModel->init(item);
}
if(!mIsMediaListSet){
mPlayer->setMediaList(mModel->getMedia());
mIsMediaListSet = true;
}
}
void MusicController::setContext(QQmlContext *context)
{
mContext = context;
setContextProperties();
}
void MusicController::setContextProperties()
{
if(!mContext) return;
mContext->setContextProperty("musicModel", mModel);
}