Ejemplo n.º 1
0
QSpotifyPlaylistContainer *QSpotifyUser::playlistContainer() const
{
    if (!m_playlistContainer) {
        sp_playlistcontainer *pc;
        if (QSpotifySession::instance()->user() == this) {
            pc = sp_session_playlistcontainer(QSpotifySession::instance()->m_sp_session);
            sp_playlistcontainer_add_ref(pc);
        } else {
            pc = sp_session_publishedcontainer_for_user_create(QSpotifySession::instance()->m_sp_session, m_canonicalName.toUtf8().constData());
        }
        m_playlistContainer = new QSpotifyPlaylistContainer(pc);
        m_playlistContainer->init();
        connect(m_playlistContainer, SIGNAL(playlistContainerDataChanged()), this, SIGNAL(playlistsChanged()));
        connect(m_playlistContainer, SIGNAL(playlistsNameChanged()), this, SIGNAL(playlistsNameChanged()));
    }
    return m_playlistContainer;
}
void QSpotifyPlaylistContainer::updatePlaylists()
{
    m_formattedAvailablePlaylists.clear();
    m_formattedUnavailablePlaylists.clear();
    m_playlistsFlat.clear();
    QStack<QSpotifyPlaylist *> folders;
    for (int i = 0; i < m_playlists.count(); ++i) {
        QSpotifyPlaylist *playlist = m_playlists.at(i);
        if (playlist->type() == QSpotifyPlaylist::Playlist) {
            m_playlistsFlat.append((QObject*)playlist);
            if (!QSpotifySession::instance()->offlineMode() || playlist->availableOffline()) {
                if (folders.isEmpty())
                    m_formattedAvailablePlaylists.append((QObject*)(playlist));
                else
                    folders.top()->m_availablePlaylists.append((QObject*)(playlist));
            } else {
                if (folders.isEmpty())
                    m_formattedUnavailablePlaylists.append((QObject*)(playlist));
                else
                    folders.top()->m_unavailablePlaylists.append((QObject*)(playlist));
            }
        } else if (playlist->type() == QSpotifyPlaylist::Folder) {
            playlist->clearPlaylists();
            folders.push(playlist);
        } else if (playlist->type() == QSpotifyPlaylist::FolderEnd) {
            if (folders.isEmpty())
                continue;
            QSpotifyPlaylist *folder = folders.pop();
            if (folders.isEmpty())
                m_formattedAvailablePlaylists.append((QObject *)(folder));
            else
                folders.top()->m_availablePlaylists.append(folder);
            emit folder->playlistsChanged();
        }
    }

    emit playlistContainerDataChanged();
}