QSpotifyPlaylistContainer::QSpotifyPlaylistContainer(sp_playlistcontainer *container) : QSpotifyObject(true) , m_updateEventPosted(false) { m_container = container; g_containerObjects.insert(container, this); m_callbacks = new sp_playlistcontainer_callbacks; m_callbacks->container_loaded = callback_container_loaded; m_callbacks->playlist_added = callback_playlist_added; m_callbacks->playlist_moved = callback_playlist_moved; m_callbacks->playlist_removed = callback_playlist_removed; sp_playlistcontainer_add_callbacks(m_container, m_callbacks, 0); connect(QSpotifySession::instance(), SIGNAL(offlineModeChanged()), this, SLOT(updatePlaylists())); metadataUpdated(); }
bool QSpotifyPlaylistContainer::event(QEvent *e) { if (e->type() == QEvent::User) { metadataUpdated(); e->accept(); return true; } else if (e->type() == QEvent::User + 1) { // PlaylistAdded event QSpotifyPlaylistAddedEvent *ev = static_cast<QSpotifyPlaylistAddedEvent *>(e); addPlaylist(ev->playlist(), ev->position()); emit dataChanged(); postUpdateEvent(); e->accept(); return true; } else if (e->type() == QEvent::User + 2) { // PlaylistRemoved event QSpotifyPlaylistRemovedEvent *ev = static_cast<QSpotifyPlaylistRemovedEvent *>(e); int i = ev->position(); if (i >= 0 && i < m_playlists.count()) { QSpotifyPlaylist *pl = m_playlists.takeAt(i); delete pl; emit dataChanged(); } postUpdateEvent(); e->accept(); return true; } else if (e->type() == QEvent::User + 3) { // PlaylistMoved event QSpotifyPlaylistMovedEvent *ev = static_cast<QSpotifyPlaylistMovedEvent *>(e); int i = ev->position(); int newpos = ev->newPosition(); if (i >= 0 && i < m_playlists.count()) { QSpotifyPlaylist *pl = m_playlists.takeAt(i); m_playlists.insert(newpos > i ? newpos - 1 : newpos, pl); emit dataChanged(); } postUpdateEvent(); e->accept(); return true; } else if (e->type() == QEvent::User + 4) { updatePlaylists(); m_updateEventPosted = false; e->accept(); return true; } return QSpotifyObject::event(e); }
bool QSpotifyPlaylistContainer::updateData() { bool updated = false; if (m_playlists.isEmpty()) { int count = sp_playlistcontainer_num_playlists(m_container); for (int i = 0; i < count; ++i) { addPlaylist(sp_playlistcontainer_playlist(m_container, i), i); if(sp_playlistcontainer_playlist_type(m_container, i) == SP_PLAYLIST_TYPE_PLACEHOLDER) sp_playlistcontainer_remove_playlist(m_container, i); } updated = true; updatePlaylists(); } return updated; }
WelcomeWidget::WelcomeWidget( QWidget* parent ) : QWidget( parent ) , ui( new Ui::WelcomeWidget ) { ui->setupUi( this ); ui->playlistWidget->setItemDelegate( new PlaylistDelegate() ); WelcomePlaylistModel* model = new WelcomePlaylistModel( this ); ui->playlistWidget->setModel( model ); ui->playlistWidget->overlay()->resize( 380, 86 ); ui->tracksView->overlay()->setEnabled( false ); connect( model,SIGNAL( emptinessChanged( bool) ), this, SLOT( updatePlaylists() ) ); m_tracksModel = new PlaylistModel( ui->tracksView ); ui->tracksView->setPlaylistModel( m_tracksModel ); m_tracksModel->loadHistory( Tomahawk::source_ptr(), HISTORY_TRACK_ITEMS ); m_timer = new QTimer( this ); connect( m_timer, SIGNAL( timeout() ), SLOT( checkQueries() ) ); connect( SourceList::instance(), SIGNAL( sourceAdded( Tomahawk::source_ptr ) ), SLOT( onSourceAdded( Tomahawk::source_ptr ) ) ); connect( ui->playlistWidget, SIGNAL( activated( QModelIndex ) ), SLOT( onPlaylistActivated( QModelIndex ) ) ); connect( AudioEngine::instance() ,SIGNAL( playlistChanged( PlaylistInterface* ) ), this, SLOT( updatePlaylists() ), Qt::QueuedConnection ); }
void WelcomeWidget::updatePlaylists() { ui->playlistWidget->clear(); QList<Tomahawk::playlist_ptr> playlists = TomahawkSettings::instance()->recentlyPlayedPlaylists(); foreach( const Tomahawk::playlist_ptr& playlist, playlists ) { connect( playlist.data(), SIGNAL( revisionLoaded( Tomahawk::PlaylistRevision ) ), SLOT( updatePlaylists() ) ); PlaylistWidgetItem* item = new PlaylistWidgetItem( playlist ); ui->playlistWidget->addItem( item ); item->setData( Qt::DisplayRole, playlist->title() ); }