void PlayerManager::play(const FileHandle &file) { if(!m_setup) setup(); if(!m_media[0] || !m_media[1] || !m_playlistInterface) return; stopCrossfade(); // The "currently playing" media object. Phonon::MediaObject *mediaObject = m_media[m_curOutputPath]; if(file.isNull()) { if(paused()) mediaObject->play(); else if(playing()) { mediaObject->seek(0); emit seeked(0); } else { m_playlistInterface->playNext(); m_file = m_playlistInterface->currentFile(); if(!m_file.isNull()) { mediaObject->setCurrentSource(KUrl::fromPath(m_file.absFilePath())); mediaObject->play(); emit signalItemChanged(m_file); } } } else { mediaObject->setCurrentSource(KUrl::fromPath(file.absFilePath())); mediaObject->play(); if(m_file != file) emit signalItemChanged(file); m_file = file; } // Our state changed handler will perform the follow up actions necessary // once we actually start playing. }
QVariantMap MediaPlayer2Player::Metadata() const { QVariantMap metaData; // The track ID is annoying since it must result in a valid DBus object // path, and the regex for that is, and I quote: [a-zA-Z0-9_]*, along with // the normal / delimiters for paths. PlaylistItem *item = Playlist::playingItem(); if (!item) return metaData; FileHandle playingFile = item->file(); QByteArray playingTrackFileId = idFromPlaylistItem(item); metaData["mpris:trackid"] = QVariant::fromValue<QDBusObjectPath>( QDBusObjectPath(playingTrackFileId.constData())); metaData["xesam:album"] = playingFile.tag()->album(); metaData["xesam:title"] = playingFile.tag()->title(); metaData["xesam:artist"] = QStringList(playingFile.tag()->artist()); metaData["xesam:genre"] = QStringList(playingFile.tag()->genre()); metaData["mpris:length"] = qint64(playingFile.tag()->seconds() * 1000000); metaData["xesam:url"] = QString::fromLatin1( KUrl::fromLocalFile(playingFile.absFilePath()).toEncoded()); if(playingFile.coverInfo()->hasCover()) { QString fallbackFileName = KStandardDirs::locateLocal("tmp", QString("juk-cover-%1.png").arg(item->trackId())); QString path = fallbackFileName; if(!QFile::exists(path)) { path = playingFile.coverInfo()->localPathToCover(fallbackFileName); } metaData["mpris:artUrl"] = QString::fromLatin1(QUrl::fromLocalFile( path).toEncoded()); } return metaData; }
void PlayerManager::crossfadeToFile(const FileHandle &newFile) { int nextOutputPath = 1 - m_curOutputPath; // Don't need this anymore disconnect(m_media[m_curOutputPath], SIGNAL(finished()), this, 0); connect(m_media[nextOutputPath], SIGNAL(finished()), SLOT(slotFinished())); m_fader[nextOutputPath]->setVolume(0.0f); emit signalItemChanged(newFile); m_media[nextOutputPath]->setCurrentSource(QUrl::fromLocalFile(newFile.absFilePath())); m_media[nextOutputPath]->play(); m_fader[m_curOutputPath]->setVolume(1.0f); m_fader[m_curOutputPath]->fadeTo(0.0f, 2000); m_fader[nextOutputPath]->fadeTo(1.0f, 2000); m_curOutputPath = nextOutputPath; }
CollectionListItem::CollectionListItem(const FileHandle &file) : PlaylistItem(CollectionList::instance()), m_shuttingDown(false) { CollectionList *l = CollectionList::instance(); if(l) { l->addToDict(file.absFilePath(), this); data()->fileHandle = file; if(file.tag()) { refresh(); l->dataChanged(); // l->addWatched(m_path); } else kdError() << "CollectionListItem::CollectionListItem() -- Tag() could not be created." << endl; } else kdError(65432) << "CollectionListItems should not be created before " << "CollectionList::initialize() has been called." << endl; SplashScreen::increment(); }
void PlaylistItem::setFile(const FileHandle &file) { m_collectionItem->updateCollectionDict(d->fileHandle.absFilePath(), file.absFilePath()); d->fileHandle = file; refresh(); }