Ejemplo n.º 1
0
void PlaylistPlayer::handlePlayerEnd()
{
    if (_currentIndex == _playlist->count() - 1) {
        switch(_loop){
            case BIGLOOP:
                next(); // auto next
                play();
                break;
            case SINGLELOOP:
                playItemAt(_currentIndex);
                break;
            case NOLOOP:
                emit end();
                break;
            default:
                break;
        }
    } else {
        switch(_loop){
            case BIGLOOP:
                next(); // auto next
                play();
                break;
            case SINGLELOOP:
                playItemAt(_currentIndex);
                break;
            case NOLOOP:
                next(); // auto next
                play();
                break;
            default:
                break;
        }
    }
}
Ejemplo n.º 2
0
void PlaylistPlayer::next()
{
    if(_mediaPlayer->isStopped() || _mediaPlayer->isPaused()){
        if (_currentIndex >= _playlist->count() - 1) {
            initItemAt(0);
        } else {
            initItemAt(++_currentIndex);
        }
    }
    else
    {
        if (_currentIndex >= _playlist->count() - 1) {
            playItemAt(0);
        } else {
            playItemAt(++_currentIndex);
        }
    }
}
Ejemplo n.º 3
0
void PlaylistPlayer::previous()
{
    if(_mediaPlayer->isStopped() || _mediaPlayer->isPaused()){
        if (_currentIndex == 0) {
            initItemAt(_playlist->count() - 1);
        } else {
            initItemAt(--_currentIndex);
        }
    }
    else
    {
        if (_currentIndex == 0) {
            playItemAt(_playlist->count() - 1);
        } else {
            playItemAt(--_currentIndex);
        }
    }
}
Ejemplo n.º 4
0
void PlaylistPlayer::play()
{
    //Creation de la video window si elle n'existe pas
    ((MainWindow*)this->parent())->needVideoWindow();

    // play or resume playback
    QModelIndexList indexes = ((MainWindow*)this->parent())->currentPlaylistTableView()->selectionModel()->selectedRows();

    // if no selected item play current playlist from first item
    if (indexes.count() == 0) {
        playItemAt(0);

    // play playlist at selected item otherwise
    } else {
        const int index = indexes.first().row();
        playItemAt(index);
    }
}
void Playlist::playNext()
{
    if (m_mediaObject->state() == Phonon::PlayingState || m_mediaObject->state() == Phonon::PausedState || m_mediaObject->state() == Phonon::LoadingState || m_mediaObject->state() == Phonon::ErrorState) {
        //Add currently playing item to history
        if (m_queue->rowCount() > 1) {
            playItemAt(1, Playlist::QueueModel);
        }
    }
}
void Playlist::start()
{
    m_playlistIndices.clear();
    m_playlistIndicesHistory.clear();
    m_playlistUrlHistory.clear();
    m_queue->clearMediaListData();
    for (int i = 0; i < m_currentPlaylist->rowCount(); ++i) {
        m_playlistIndices.append(i);
    }
    if (!m_shuffle) {
        orderByPlaylist();
    } else {
        shuffle();
    }
    playItemAt(0, Playlist::QueueModel);
}
void Playlist::playPrevious()
{
    if (m_mediaObject->state() == Phonon::PlayingState || m_mediaObject->state() == Phonon::PausedState || m_mediaObject->state() == Phonon::LoadingState) {
        if (m_playlistIndicesHistory.count() > 0) {
            //Get previously played item and remove from history
            int previousRow = m_playlistIndicesHistory.last();
            m_playlistIndicesHistory.removeLast();
            m_playlistUrlHistory.removeLast();
            MediaItem previousItem = m_currentPlaylist->mediaItemAt(previousRow);
            previousItem.playlistIndex = previousRow;
            m_queue->insertMediaItemAt(0, previousItem);
            
            playItemAt(0, Playlist::QueueModel);
        }
    }
}
void Playlist::insertMediaItemAt(int row, Model model, const MediaItem &mediaItem)
{
    if (model == PlaylistModel) {
        if (row >= m_currentPlaylist->rowCount()) {
            return;
        }
        m_currentPlaylist->insertMediaItemAt(row, mediaItem, true);
    } else {
        if (row >= m_queue->rowCount()) {
            return;
        }
        //Update history
        int playlistIndex = m_currentPlaylist->rowOfUrl(mediaItem.url);
        if (m_playlistIndicesHistory.contains(playlistIndex)) {
            m_playlistIndicesHistory.removeAll(playlistIndex);
            m_playlistUrlHistory.removeAll(mediaItem.url);
        }
        if (m_playlistIndices.contains(playlistIndex)) {
            m_playlistIndices.removeAll(playlistIndex);
        }
        //Update Playlist
        int playlistRow = -1;
        if (m_shuffle) {
            m_currentPlaylist->loadMediaItem(mediaItem, false);
            playlistRow = m_currentPlaylist->rowCount() - 1;
        } else {
            MediaItem itemAtRow = m_queue->mediaItemAt(row);
            playlistRow = m_currentPlaylist->rowOfUrl(itemAtRow.url);
            if (playlistRow != -1) {
                m_currentPlaylist->insertMediaItemAt(playlistRow, mediaItem, false);
            }
        }
        //Update queue
        MediaItem queueItem = mediaItem;
        queueItem.playlistIndex = playlistRow;
        m_queue->insertMediaItemAt(row, queueItem);
        if (m_queue->rowCount() > m_queueDepth) {
            m_queue->removeMediaItemAt(m_queue->rowCount() - 1);
        }
        if (row == 0 && (m_mediaObject->state() == Phonon::PlayingState ||
                         m_mediaObject->state() == Phonon::PausedState)) {
            playItemAt(0, QueueModel);
        }
    }
}
Ejemplo n.º 9
0
void PlaylistPlayer::playPlaylist(Playlist *playlist)
{
    setPlaylist(playlist);
    playItemAt(0);
}
//--------------------------------
//--- MediaItemModel SLOTS     ---
//--------------------------------
void Playlist::playlistChanged()
{
    m_state = Playlist::Finished;
    if (playWhenPlaylistChanges && m_currentPlaylist->rowCount() > 0) {
        //Start playing with clean playlist, queue and history
        playWhenPlaylistChanges = false;
        if (m_currentPlaylist->mediaItemAt(0).type == "Audio" ||
            m_currentPlaylist->mediaItemAt(0).type == "Video") {
            start();
        } else {
            if (m_currentPlaylist->mediaItemAt(0).fields["messageType"].toString() == "No Results") {
                m_currentPlaylist->removeMediaItemAt(0,false);
            }
            m_mediaObject->stop();
            emit playlistFinished();
        }
    } else if (m_currentPlaylist->rowCount() > 0){
        //if playlist mode is normal (sequential)
        // - rebuild history to just before currently playing/paused url
        // - rebuild queue from currently playing item to queue depth
        // - rebuild playlist indices using remaining items
        if (!m_shuffle) {
            int currentRow = 0;
            if ((m_mediaObject->state() == Phonon::PlayingState) || (m_mediaObject->state() == Phonon::PausedState)) {
                //Starting with the currently playing item, check to see if item
                //is in the new playlist. If not continue through the existing queue
                //until an item is found in the playlist.
                for (int i = 0; i < m_queue->rowCount(); i++) {
                    QString url = m_queue->mediaItemAt(i).url;
                    currentRow = m_currentPlaylist->rowOfUrl(url);
                    if (currentRow != -1) {
                        break;
                    }
                }
            } else {
                currentRow = 0;
            }
            buildQueueFrom(currentRow);
        } else {
            //if playlist mode is shuffle
            // - remove from history any items NOT in the current playlist
            // - remove from queue any items NOT in the current playlist
            // - rebuild playlist indices using remaining items
            // - add items to queu to fill queue depth
            QList<QString> oldPlaylistUrlHistory = m_playlistUrlHistory;
            m_playlistIndicesHistory.clear();
            m_playlistUrlHistory.clear();
            for (int i = 0; i < oldPlaylistUrlHistory.count(); i++) {
                int rowOfUrl = m_currentPlaylist->rowOfUrl(oldPlaylistUrlHistory.at(i));
                if (rowOfUrl != -1) {
                    m_playlistIndicesHistory.append(rowOfUrl);
                    m_playlistUrlHistory.append(oldPlaylistUrlHistory.at(i));
                }
            }
            
            QList<MediaItem> newQueueMediaList;
            for (int i = 0; i < m_queue->rowCount(); i++) {
                MediaItem mediaItem = m_queue->mediaItemAt(i);
                QString urlToSearch = mediaItem.url;
                int rowOfUrl = m_currentPlaylist->rowOfUrl(urlToSearch);
                if (rowOfUrl != -1) {
                    newQueueMediaList.append(mediaItem);
                }
            }
            m_queue->clearMediaListData();
            m_queue->loadMediaList(newQueueMediaList);
            
            m_playlistIndices.clear();
            for (int i = 0; i < m_currentPlaylist->rowCount(); i++) {
                if (m_playlistIndicesHistory.indexOf(i) == -1) {
                    MediaItem mediaItem = m_currentPlaylist->mediaItemAt(i);
                    QString urlToSearch = mediaItem.url;
                    int rowInQueue = m_queue->rowOfUrl(urlToSearch);
                    if (rowInQueue == -1) {
                        m_playlistIndices.append(i);
                    }
                }
            }
            
            for (int i = m_queue->rowCount(); i < m_queueDepth; i++) {
                addToQueue();
            }
            
        }
        
        //if currently playing url is not at front of queueMediaList
        // stop playing and play item at front of queue
        if ((m_mediaObject->state() == Phonon::PlayingState) || (m_mediaObject->state() == Phonon::PausedState)) {
            if (m_currentUrl != QUrl::fromEncoded(m_queue->mediaItemAt(0).url.toUtf8()).toString()) {
                m_mediaObject->stop();
                playItemAt(0, Playlist::QueueModel);
            }
        }
    } else { //playlist was cleared
        stop();
    }
}