#include "MusicController.h" #include #include #include #include "EnergySaver.h" MusicController::MusicController(QObject *parent) : QObject(parent) { mVlc = new VlcInstance(VlcCommon::args(), this); mModel = new MusicModel(mVlc, this); mPlayer = new VlcMediaListPlayer(mVlc); mVlcAudio = new VlcAudio(mPlayer->mediaPlayer()); connect(mModel, &MusicModel::navigateTo, this, &MusicController::onNavigationRequest); //connect(mModel, &MusicModel::play, mPlayer, &VlcMediaListPlayer::play); connect(mModel, &MusicModel::play, [this](){ mVlcAudio->setVolume(mModel->getAudioVolume()); mPlayer->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(mModel, &MusicModel::audioVolumeChanged, mVlcAudio, &VlcAudio::setVolume); 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(); mVlcAudio->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); } void MusicController::onNavigationRequest(NavigationItemModel *item) { if(mModel->isPlaying()) { mModel->playPause(); } emit navigateTo(item); }