void Seq::setScoreView(ScoreView* v) { if (oggInit) { ov_clear(&vf); oggInit = false; } if (cv !=v && cs) { unmarkNotes(); stopWait(); } cv = v; if (cs) disconnect(cs, SIGNAL(playlistChanged()), this, SLOT(setPlaylistChanged())); cs = cv ? cv->score() : 0; if (!heartBeatTimer->isActive()) heartBeatTimer->start(20); // msec playlistChanged = true; _synti->reset(); if (cs) { initInstruments(); connect(cs, SIGNAL(playlistChanged()), this, SLOT(setPlaylistChanged())); } }
/* * Fill Playlist Right Window */ void playlist::fillPL(){ QStringList curList; int count = 0, selID = 0; if(PLMODE == 0){ // browsing playlists for(int i= 0; i< pList.getSize(); i++){ curList << pList.getName(i); } emit playlistDirChanged(&pList); } else if(PLMODE == 1){ // browsing playlist items curPLlist = new int[pListItems.getSize()]; selID = pList.getID(pListSelect); for(int i = 0; i< pListItems.getSize(); i++){ if(pListItems.getPar(i) == selID){ curList << pListItems.getName(i); curPLlist[count] = pListItems.getID(i); count++; } } emit playlistChanged(selID, &pListItems, curPLlist, count, false, PlayMode); } else if(PLMODE == 2){ // new playlist items curPLlist = new int[pNewItems.getSize()]; for(int i = 0; i< pNewItems.getSize(); i++){ curList << pNewItems.getName(i); curPLlist[count] = pNewItems.getID(i); count++; } emit playlistChanged(0, &pNewItems, curPLlist, count, false, PlayMode); } pl_model = new QStringListModel(this); pl_model->setStringList(curList); ui->PLAYLIST->setModel(pl_model); }
void PlayerWidget::AddFilesToPlaylist(){ //Prompt the user to select multimedia files QFileDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint ); dlg.setFileMode(QFileDialog::ExistingFiles); dlg.setAcceptMode(QFileDialog::AcceptOpen); dlg.setNameFilter( tr("Multimedia Files")+" ("+LXDG::findAVFileExtensions().join(" ")+")"); dlg.setWindowTitle(tr("Select Multimedia Files")); dlg.setWindowIcon( LXDG::findIcon("file-open","") ); dlg.setDirectory(QDir::homePath()); //start in the home directory //ensure it is centered on the current screen QPoint center = QApplication::desktop()->screenGeometry(this).center(); dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) ); dlg.show(); while( dlg.isVisible() ){ QApplication::processEvents(); } QList<QUrl> files = dlg.selectedUrls(); if(files.isEmpty() || dlg.result()!=QDialog::Accepted){ return; } //cancelled //Make this use show/processEvents later //QList<QUrl> files = QFileDialog::getOpenFileUrls(0, tr("Select Multimedia Files"), QDir::homePath(), "Multimedia Files ("+LXDG::findAVFileExtensions().join(" ")+")"); QList<QMediaContent> urls; for(int i=0; i<files.length(); i++){ urls << QMediaContent(files[i]); } PLAYLIST->addMedia(urls); playlistChanged(); }
void PlayerWidget::AddDirToPlaylist(){ QFileDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint ); dlg.setFileMode(QFileDialog::Directory); dlg.setOption(QFileDialog::ShowDirsOnly, true); dlg.setAcceptMode(QFileDialog::AcceptOpen); dlg.setWindowTitle(tr("Select Multimedia Directory")); dlg.setWindowIcon( LXDG::findIcon("folder-open","") ); dlg.setDirectory(QDir::homePath()); //start in the home directory //ensure it is centered on the current screen QPoint center = QApplication::desktop()->screenGeometry(this).center(); dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) ); dlg.show(); while( dlg.isVisible() ){ QApplication::processEvents(); } if(dlg.result() != QDialog::Accepted){ return; } //cancelled QStringList sel = dlg.selectedFiles(); if(sel.isEmpty()){ return; } //cancelled QString dirpath = sel.first(); //QFileDialog::getExistingDirectory(0, tr("Select a Multimedia Directory"), QDir::homePath() ); if(dirpath.isEmpty()){ return; } //cancelled QDir dir(dirpath); QFileInfoList files = dir.entryInfoList(LXDG::findAVFileExtensions(), QDir::Files | QDir::NoDotAndDotDot, QDir::Name); if(files.isEmpty()){ return; } //nothing in this directory QList<QMediaContent> urls; for(int i=0; i<files.length(); i++){ urls << QMediaContent(QUrl::fromLocalFile(files[i].absoluteFilePath()) ); } PLAYLIST->addMedia(urls); playlistChanged(); }
// Offline mode item of a playlist PlaylistOfflineItem::PlaylistOfflineItem(const QSpotifyPlaylist & playlist) : ListItem(1), m_playlist(playlist) { connect(&playlist, SIGNAL(offlineStatusChanged()), this, SLOT(offlineChanged())); connect(&playlist, SIGNAL(playlistDataChanged()), this, SLOT(playlistChanged())); }
Playlist::Playlist(QObject * parent, Phonon::MediaObject * mediaObject) : QObject(parent) { m_parent = parent; m_mediaController = NULL; m_currentPlaylist = new MediaItemModel(this); m_currentPlaylist->setSuppressNoResultsMessage(true); m_nowPlaying = new MediaItemModel(this); m_nowPlaying->setSuppressTooltip(true); m_nowPlaying->setSuppressNoResultsMessage(true); m_queue = new MediaItemModel(this); m_queue->setSuppressNoResultsMessage(true); playWhenPlaylistChanges = false; m_shuffle = false; m_repeat = false; m_queueDepth = 10; m_state = Playlist::Finished; m_hadVideo = false; m_notificationRestrictions = 0; m_filterProxyModel = new MediaSortFilterProxyModel(); m_playbackInfoChecks = 0; m_powerManagementCookie = -1; setMediaObject(mediaObject); m_nepomukInited = Utilities::nepomukInited(); if (m_nepomukInited) { m_mediaIndexer = new MediaIndexer(this); } connect(m_currentPlaylist, SIGNAL(mediaListChanged()), this, SLOT(playlistChanged())); connect(m_currentPlaylist, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(playlistModelItemChanged(QStandardItem*))); }
void PlaylistModel::setPlaylist(QSpotifyPlaylist *playlist) { if (playlist == m_playlist) return; clear(); m_playlist = playlist; // Construct list beginInsertRows(QModelIndex(), 0, m_playlist->trackCount() - 1 + 2); addHeader(); addOffline(); addTracks(); endInsertRows(); emit playlistChanged(); emit countChanged(); }
void PlayerWidget::AddURLToPlaylist(){ QInputDialog dlg(0, Qt::Dialog | Qt::WindowStaysOnTopHint ); dlg.setInputMode(QInputDialog::TextInput); dlg.setLabelText(tr("Enter a valid URL for a multimedia file or stream:")); dlg.setTextEchoMode(QLineEdit::Normal); dlg.setWindowTitle(tr("Multimedia URL")); dlg.setWindowIcon( LXDG::findIcon("download","") ); //ensure it is centered on the current screen QPoint center = QApplication::desktop()->screenGeometry(this).center(); dlg.move( center.x()-(dlg.width()/2), center.y()-(dlg.height()/2) ); dlg.show(); while( dlg.isVisible() ){ QApplication::processEvents(); } QString url = dlg.textValue(); if(url.isEmpty() || dlg.result()!=QDialog::Accepted){ return; } //cancelled //QString url = QInputDialog::getText(0, tr("Multimedia URL"), tr("Enter a valid URL for a multimedia file or stream"), QLineEdit::Normal); //if(url.isEmpty()){ return; } QUrl newurl(url); if(!newurl.isValid()){ return; } //invalid URL PLAYLIST->addMedia(newurl); playlistChanged(); }
/* Execute the given command. In fact, it just will ask MPD to do it. * You will have to check the next "status" or "playlist" update (using the corresponding slot) * to know if the command has really been executed. */ void Player::executeCmd(EMSPlayerCmd cmd) { bool waitResponse = true; /* Wait the responase by default */ bool error = false; if (conn == NULL) { return; } /* Dispatch execution depending on the action */ switch (cmd.action) { case ACTION_ADD: { if(searchTrackInPlaylist(cmd.track) >= 0) { qDebug() << "Do not add track in the playlist as it already exist"; return; } QString filename = getMPDFilename(cmd.track); mpd_send_add(conn, filename.toStdString().c_str()); break; } case ACTION_DEL: { int pos = searchTrackInPlaylist(cmd.track); if (pos >= 0) { mpd_send_delete(conn, pos); } break; } case ACTION_DEL_ALL: { mpd_send_clear(conn); break; } case ACTION_PLAY_POS: { mutex.lock(); int size = playlist.tracks.size(); mutex.unlock(); if (size <= 0 || cmd.uintValue >= (unsigned int)size) { qDebug() << "Asked to play a track after the end of the current playlist"; error = true; break; } mpd_send_play_pos(conn, cmd.uintValue); break; } case ACTION_PLAY_TRACK: { int position = searchTrackInPlaylist(cmd.track); if (position < 0) { qDebug() << "Asked to play a track which is not in the current playlist"; error = true; break; } mpd_send_play_pos(conn, position); break; } case ACTION_PLAY: { mpd_send_play(conn); break; } case ACTION_SEEK: { /* Get current position */ int songId = getCurrentPos(); if (songId >= 0) { mpd_send_seek_pos(conn, songId, cmd.uintValue); } break; } case ACTION_PAUSE: { mpd_send_pause(conn, true); break; } case ACTION_TOGGLE: { mpd_send_toggle_pause(conn); break; } case ACTION_STOP: { mpd_send_stop(conn); break; } case ACTION_NEXT: { mpd_send_next(conn); break; } case ACTION_PREV: { mpd_send_previous(conn); break; } case ACTION_REPEAT: { mutex.lock(); bool repeatTmp = status.repeat; mutex.unlock(); if (cmd.boolValue != repeatTmp) { mpd_send_repeat(conn, cmd.boolValue); } break; } case ACTION_RANDOM: { mutex.lock(); bool randomTmp = status.random; mutex.unlock(); if (cmd.boolValue != randomTmp) { mpd_send_random(conn, cmd.boolValue); } break; } case ACTION_ENABLE_OUTPUT: { if (cmd.uintValue >= 1) { mpd_send_enable_output(conn, cmd.uintValue-1); } break; } case ACTION_DISABLE_OUTPUT: { if (cmd.uintValue >= 1) { mpd_send_disable_output(conn, cmd.uintValue-1); } break; } default: { qCritical() << "Unhandled action in the current command."; waitResponse = false; break; } } if (waitResponse && !mpd_response_finish(conn)) { error = true; qCritical() << "MPD could not execute the current command."; enum mpd_error errorMpd = mpd_connection_get_error(conn); if (errorMpd == MPD_ERROR_SERVER || errorMpd == MPD_ERROR_ARGUMENT) /* Problem with the command */ { QString errorMessage = QString::fromUtf8(mpd_connection_get_error_message(conn)); qCritical() << "Command error : " << errorMessage; if (!mpd_connection_clear_error(conn)) { qCritical() << "This error cannot be cleared, reconnecting..."; connectToMpd(); } } else if (errorMpd == MPD_ERROR_TIMEOUT || errorMpd == MPD_ERROR_RESOLVER || errorMpd == MPD_ERROR_MALFORMED || errorMpd == MPD_ERROR_CLOSED ) /* Assume there is a connection problem, try to reconnect... */ { QString errorMessage = QString::fromUtf8(mpd_connection_get_error_message(conn)); qCritical() << "Connexion error : " << errorMessage; qCritical() << "Reconnecting..."; connectToMpd(); mutex.lock(); queue.push_front(cmd); mutex.unlock(); cmdAvailable.release(1); } } /* Post-action depending on the command * Do the minimum here as the whole status will be * retrieve here. But for playlist ADD/DEL, we need to * store the EMSTrack structure. */ if(!error) { switch (cmd.action) { case ACTION_ADD: { EMSPlaylist newPlaylist; mutex.lock(); playlist.tracks.append(cmd.track); newPlaylist = playlist; mutex.unlock(); emit playlistChanged(newPlaylist); break; } case ACTION_DEL: { int pos = searchTrackInPlaylist(cmd.track); if (pos >= 0) { EMSPlaylist newPlaylist; mutex.lock(); playlist.tracks.removeAt(pos); newPlaylist = playlist; mutex.unlock(); emit playlistChanged(newPlaylist); } break; } case ACTION_DEL_ALL: { EMSPlaylist newPlaylist; mutex.lock(); playlist.tracks.clear(); newPlaylist = playlist; mutex.unlock(); emit playlistChanged(newPlaylist); break; } case ACTION_ENABLE_OUTPUT: { mutex.lock(); for(int i=0; i<outputs.size(); i++) { if (outputs.at(i).id_mpd == cmd.uintValue) { EMSSndCard card = outputs.at(i); card.enabled = true; outputs.replace(i, card); } } emit outputsChanged(outputs); mutex.unlock(); break; } case ACTION_DISABLE_OUTPUT: { mutex.lock(); for(int i=0; i<outputs.size(); i++) { if (outputs.at(i).id_mpd == cmd.uintValue) { EMSSndCard card = outputs.at(i); card.enabled = false; outputs.replace(i, card); } } emit outputsChanged(outputs); mutex.unlock(); break; } default: break; } } }
void PlayerWidget::ClearPlaylist(){ PLAYER->stop(); PLAYLIST->clear(); playlistChanged(); }