void Player::onMetaChanged() { if(m_Current) if(!m_Current->metaLoaded()) { QMap<QString, QString> tags = m_GstPlayer->meta(); if(!tags["brate"].isEmpty()) Q_EMIT metaChanged(tags); QString artStr; if(!m_bArtRequested && !tags["album"].isEmpty()) { artStr = tags["artist"] + " " + tags["album"]; Q_EMIT loadArt(artStr); m_bArtRequested = true; } if(!tags["artist"].isEmpty()) m_Current->setMetaArtist(tags["artist"].trimmed()); if(!tags["title"].isEmpty())// { m_Current->setMetaTitle(tags["title"]); if(!tags["album"].isEmpty()) { m_Current->setMetaAlbum(tags["album"]); m_Current->setMetaLoaded(true); } Q_EMIT metaChanged(); } }
Player::Player(QObject *parent) : QObject(parent) { if(m_instance) qFatal("Only one instance of Player object is allowed"); m_instance = this; m_plistsgroup = PlistsGroup::instance(); m_VkActions = VkActions::instance(); m_Prev = 0; m_Current = 0; m_bArtRequested = false; m_bBroadcastStatus = Settings::instance()->getValue("player/status").toBool(); m_State = Stoped; // QGstreamer init m_GstPlayer = new GstPlayer(this); connect(m_GstPlayer, SIGNAL(positionChanged()), SLOT(positionChanged())); connect(m_GstPlayer, SIGNAL(linkExpired()), SLOT(onLinkExpired())); connect(m_GstPlayer, SIGNAL(stateChanged()), SLOT(onStateChanged())); connect(m_GstPlayer, SIGNAL(finished()), SIGNAL(needTrack())); connect(m_GstPlayer, SIGNAL(gotBitrate(quint32)), SLOT(setBitrate(quint32))); connect(m_GstPlayer, SIGNAL(metaChanged()), SLOT(onMetaChanged())); QTimer::singleShot(10, this, SLOT(setInitVolume())); m_GstPlayer->setVolume(Settings::instance()->getValue("player/volume").toDouble()); }
void Player::playTrack(Track *p) { Q_EMIT trackChanged(); Q_EMIT trackChanged(p); // Set PlayState for track p->setPlayState(); // Stop playing prev tack m_GstPlayer->stop(); setState(Player::Stoped); Q_EMIT newTitles(p->artist(), p->title()); m_GstPlayer->stop(); m_GstPlayer->setUri(p->url()); m_GstPlayer->play(); setState(Playing); m_bArtRequested = false; Q_EMIT changed(); if(p->metaLoaded()) Q_EMIT metaChanged(); }
void Player::setTrack(Track *p) { if(m_Current) { m_Prev = m_Current; connect(m_Prev, SIGNAL(destroyed()), SLOT(onPrevDeleted())); } if(m_Prev) { m_Prev->setDefaultState(); disconnect(m_Prev, SIGNAL(updated(bool)), this, SLOT(trackUpdated(bool))); m_Prev->setLast(false); } m_Current = p; connect(m_Current, SIGNAL(destroyed()), SLOT(prevDeleted())); m_Current->setLast(true); if(m_Current->url().isEmpty()) { m_Current->updateUrl(); connect(m_Current, SIGNAL(updated(bool)), SLOT(trackUpdated(bool))); } else { playTrack(m_Current); } if(m_bBroadcastStatus) m_VkActions->setStatus(m_Current); // Meta if(m_Current->metaLoaded()) { Q_EMIT metaChanged(); QString artStr; if(!m_bArtRequested && !m_Current->metaAlbum().isEmpty()) { artStr = m_Current->metaArtist() + " " + m_Current->metaAlbum(); Q_EMIT loadArt(artStr); m_bArtRequested = true; } } }
inline void InputManager::UpdateMeta( input_item_t *p_item_ ) { emit metaChanged( p_item_ ); emit artChanged( p_item_ ); }
QUrl FooPlaylist::getNextTrack(FooPlaybackOrder::FooPlaybackOrder order, FooPlayback::FooPlayback playback) { if (shouldCurrentTrackIndex >= 0) { currentTrackIndex = shouldCurrentTrackIndex; shouldCurrentTrackIndex = -1; } int beforeTrackIndex = currentTrackIndex; QUrl newTrack; if (playlist.empty()) { currentTrackIndex = -1; shouldCurrentTrackIndex = -1; } else if (order == FooPlaybackOrder::Random || playback == FooPlayback::random) { newTrack = getRandomTrack(); } else if (currentTrackIndex < 0) { currentTrackIndex = 0; newTrack = playlist.at(currentTrackIndex).file(); } else { if ((playback == FooPlayback::enque && order == FooPlaybackOrder::Default) || (playback == FooPlayback::next && (order == FooPlaybackOrder::Default || order == FooPlaybackOrder::Repeat_Track))) { ++currentTrackIndex; if (currentTrackIndex >= playlist.size()) { currentTrackIndex = -1; } else { newTrack = playlist.at(currentTrackIndex).file(); } } else if (playback == FooPlayback::prev && (order == FooPlaybackOrder::Default || order == FooPlaybackOrder::Repeat_Track)) { --currentTrackIndex; if (currentTrackIndex < 0) { currentTrackIndex = -1; } else { newTrack = playlist.at(currentTrackIndex).file(); } } else if (order == FooPlaybackOrder::Repeat_Playlist && (playback == FooPlayback::enque || playback == FooPlayback::next)) { ++currentTrackIndex; if (currentTrackIndex >= playlist.size()) { currentTrackIndex = 0; } newTrack = playlist.at(currentTrackIndex).file(); } else if (playback == FooPlayback::prev && order == FooPlaybackOrder::Repeat_Playlist) { --currentTrackIndex; if (currentTrackIndex < 0) { currentTrackIndex = playlist.size() - 1; } newTrack = playlist.at(currentTrackIndex).file(); } else if ((playback == FooPlayback::enque && order == FooPlaybackOrder::Repeat_Track) || playback == FooPlayback::play) { newTrack = playlist.at(currentTrackIndex).file(); } } emit metaChanged(beforeTrackIndex); if (currentTrackIndex >= 0) { emit metaChanged(currentTrackIndex); } return newTrack; }