1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-06 14:16:32 +02:00

Lazy load NewReleasesWidget

This commit is contained in:
Hugo Lindström
2013-04-01 21:29:41 +02:00
parent bd6303a6e6
commit 94116cd7f2
3 changed files with 35 additions and 14 deletions

View File

@@ -76,7 +76,7 @@ ViewManager::ViewManager( QObject* parent )
, m_widget( new QWidget() ) , m_widget( new QWidget() )
, m_welcomeWidget( new WelcomeWidget() ) , m_welcomeWidget( new WelcomeWidget() )
, m_whatsHotWidget( 0 ) , m_whatsHotWidget( 0 )
, m_newReleasesWidget( new NewReleasesWidget() ) , m_newReleasesWidget( 0 )
, m_recentPlaysWidget( 0 ) , m_recentPlaysWidget( 0 )
, m_currentPage( 0 ) , m_currentPage( 0 )
, m_loaded( false ) , m_loaded( false )
@@ -110,7 +110,6 @@ ViewManager::ViewManager( QObject* parent )
connect( &m_filterTimer, SIGNAL( timeout() ), SLOT( applyFilter() ) ); connect( &m_filterTimer, SIGNAL( timeout() ), SLOT( applyFilter() ) );
connect( m_infobar, SIGNAL( filterTextChanged( QString ) ), SLOT( setFilter( QString ) ) ); connect( m_infobar, SIGNAL( filterTextChanged( QString ) ), SLOT( setFilter( QString ) ) );
connect( this, SIGNAL( tomahawkLoaded() ), m_newReleasesWidget, SLOT( fetchData() ) );
connect( this, SIGNAL( tomahawkLoaded() ), m_welcomeWidget, SLOT( loadData() ) ); connect( this, SIGNAL( tomahawkLoaded() ), m_welcomeWidget, SLOT( loadData() ) );
/* connect( m_infobar, SIGNAL( flatMode() ), SLOT( setTableMode() ) ); /* connect( m_infobar, SIGNAL( flatMode() ), SLOT( setTableMode() ) );
@@ -387,6 +386,13 @@ ViewManager::showWhatsHotPage()
Tomahawk::ViewPage* Tomahawk::ViewPage*
ViewManager::showNewReleasesPage() ViewManager::showNewReleasesPage()
{ {
if ( !m_newReleasesWidget )
{
m_newReleasesWidget = new NewReleasesWidget();
m_newReleasesWidget->fetchData();
}
return show( m_newReleasesWidget ); return show( m_newReleasesWidget );
} }

View File

@@ -36,7 +36,7 @@
#include "utils/TomahawkUtilsGui.h" #include "utils/TomahawkUtilsGui.h"
#include "utils/Logger.h" #include "utils/Logger.h"
#include "Pipeline.h" #include "Pipeline.h"
#include "utils/AnimatedSpinner.h"
#include <QPainter> #include <QPainter>
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QStandardItem> #include <QStandardItem>
@@ -56,6 +56,8 @@ NewReleasesWidget::NewReleasesWidget( QWidget* parent )
, ui( new Ui::NewReleasesWidget ) , ui( new Ui::NewReleasesWidget )
, m_sortedProxy( 0 ) , m_sortedProxy( 0 )
, m_workerThread( 0 ) , m_workerThread( 0 )
, m_spinner( 0 )
, m_loading( true )
{ {
ui->setupUi( this ); ui->setupUi( this );
@@ -72,8 +74,6 @@ NewReleasesWidget::NewReleasesWidget( QWidget* parent )
connect( ui->breadCrumbLeft, SIGNAL( activateIndex( QModelIndex ) ), SLOT( leftCrumbIndexChanged(QModelIndex) ) ); connect( ui->breadCrumbLeft, SIGNAL( activateIndex( QModelIndex ) ), SLOT( leftCrumbIndexChanged(QModelIndex) ) );
//m_playlistInterface = Tomahawk::playlistinterface_ptr( new ChartsPlaylistInterface( this ) );
m_workerThread = new QThread( this ); m_workerThread = new QThread( this );
m_workerThread->start(); m_workerThread->start();
@@ -82,6 +82,10 @@ NewReleasesWidget::NewReleasesWidget( QWidget* parent )
SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) ); SLOT( infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData, QVariant ) ) );
connect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( finished( QString ) ), SLOT( infoSystemFinished( QString ) ) ); connect( Tomahawk::InfoSystem::InfoSystem::instance(), SIGNAL( finished( QString ) ), SLOT( infoSystemFinished( QString ) ) );
ui->breadCrumbLeft->setVisible( false );
m_spinner = new AnimatedSpinner( ui->albumsView );
m_spinner->fadeIn();
} }
@@ -91,6 +95,7 @@ NewReleasesWidget::~NewReleasesWidget()
m_workers.clear(); m_workers.clear();
m_workerThread->exit(0); m_workerThread->exit(0);
m_playlistInterface.clear(); m_playlistInterface.clear();
delete m_spinner;
delete ui; delete ui;
} }
@@ -152,7 +157,7 @@ NewReleasesWidget::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData request
case InfoSystem::InfoNewReleaseCapabilities: case InfoSystem::InfoNewReleaseCapabilities:
{ {
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Got InfoNewReleaseCapabilities"; tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Got InfoNewReleaseCapabilities";
QStandardItem *rootItem= m_crumbModelLeft->invisibleRootItem(); QStandardItem *rootItem = m_crumbModelLeft->invisibleRootItem();
foreach ( const QString label, returnedData.keys() ) foreach ( const QString label, returnedData.keys() )
{ {
@@ -160,10 +165,6 @@ NewReleasesWidget::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData request
rootItem->appendRow(childItem); rootItem->appendRow(childItem);
tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "NewReleases:" << label; tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "NewReleases:" << label;
} }
m_sortedProxy->setSourceModel( m_crumbModelLeft );
m_sortedProxy->sort( 0, Qt::AscendingOrder );
ui->breadCrumbLeft->setModel( m_sortedProxy );
break; break;
} }
@@ -216,7 +217,21 @@ NewReleasesWidget::infoSystemInfo( Tomahawk::InfoSystem::InfoRequestData request
void void
NewReleasesWidget::infoSystemFinished( QString target ) NewReleasesWidget::infoSystemFinished( QString target )
{ {
Q_UNUSED( target ); if( m_loading )
{
if ( target != s_newReleasesIdentifier )
{
return;
}
m_sortedProxy->setSourceModel( m_crumbModelLeft );
m_sortedProxy->sort( 0, Qt::AscendingOrder );
ui->breadCrumbLeft->setModel( m_sortedProxy );
m_spinner->fadeOut();
ui->breadCrumbLeft->setVisible( true );
m_loading = false;
}
} }

View File

@@ -40,7 +40,7 @@ class PlaylistModel;
class TreeProxyModel; class TreeProxyModel;
class AlbumModel; class AlbumModel;
class PlayableModel; class PlayableModel;
class AnimatedSpinner;
namespace Ui namespace Ui
{ {
class NewReleasesWidget; class NewReleasesWidget;
@@ -115,8 +115,8 @@ private:
QHash< QString, PlayableModel* > m_albumModels; QHash< QString, PlayableModel* > m_albumModels;
QString m_queueItemToShow; QString m_queueItemToShow;
QSet< QString > m_queuedFetches; QSet< QString > m_queuedFetches;
QTimer* m_timer; AnimatedSpinner* m_spinner;
bool m_loading;
friend class Tomahawk::ChartsPlaylistInterface; friend class Tomahawk::ChartsPlaylistInterface;
}; };