mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-13 09:34:53 +02:00
Make job counting generic
This commit is contained in:
@@ -45,6 +45,13 @@ JobStatusItem::collapseItem() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
JobStatusItem::concurrentJobLimit() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
JobStatusItem::hasCustomDelegate() const
|
JobStatusItem::hasCustomDelegate() const
|
||||||
{
|
{
|
||||||
|
@@ -58,6 +58,8 @@ public:
|
|||||||
virtual bool collapseItem() const;
|
virtual bool collapseItem() const;
|
||||||
virtual bool allowMultiLine() const;
|
virtual bool allowMultiLine() const;
|
||||||
|
|
||||||
|
virtual int concurrentJobLimit() const;
|
||||||
|
|
||||||
virtual bool hasCustomDelegate() const;
|
virtual bool hasCustomDelegate() const;
|
||||||
virtual void createDelegate( QObject* parent );
|
virtual void createDelegate( QObject* parent );
|
||||||
virtual QStyledItemDelegate* customDelegate() const;
|
virtual QStyledItemDelegate* customDelegate() const;
|
||||||
|
@@ -26,7 +26,6 @@
|
|||||||
|
|
||||||
JobStatusModel::JobStatusModel( QObject* parent )
|
JobStatusModel::JobStatusModel( QObject* parent )
|
||||||
: QAbstractListModel ( parent )
|
: QAbstractListModel ( parent )
|
||||||
, m_aclJobCount( 0 )
|
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -42,12 +41,19 @@ JobStatusModel::~JobStatusModel()
|
|||||||
void
|
void
|
||||||
JobStatusModel::addJob( JobStatusItem* item )
|
JobStatusModel::addJob( JobStatusItem* item )
|
||||||
{
|
{
|
||||||
if ( item->type() == "acljob" && m_aclJobCount >= 3 )
|
if ( item->concurrentJobLimit() > 0 )
|
||||||
{
|
{
|
||||||
m_aclJobQueue.enqueue( item );
|
if ( m_jobTypeCount[ item->type() ] >= item->concurrentJobLimit() )
|
||||||
return;
|
{
|
||||||
|
m_jobQueue[ item->type() ].enqueue( item );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int currentJobCount = m_jobTypeCount[ item->type() ];
|
||||||
|
currentJobCount++;
|
||||||
|
m_jobTypeCount[ item->type() ] = currentJobCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
connect( item, SIGNAL( statusChanged() ), this, SLOT( itemUpdated() ) );
|
connect( item, SIGNAL( statusChanged() ), this, SLOT( itemUpdated() ) );
|
||||||
connect( item, SIGNAL( finished() ), this, SLOT( itemFinished() ) );
|
connect( item, SIGNAL( finished() ), this, SLOT( itemFinished() ) );
|
||||||
|
|
||||||
@@ -184,16 +190,20 @@ JobStatusModel::itemFinished()
|
|||||||
if ( item->customDelegate() )
|
if ( item->customDelegate() )
|
||||||
emit customDelegateJobRemoved( idx );
|
emit customDelegateJobRemoved( idx );
|
||||||
|
|
||||||
if ( item->type() == "acljob" )
|
if ( item->concurrentJobLimit() > 0 )
|
||||||
m_aclJobCount--;
|
|
||||||
|
|
||||||
item->deleteLater();
|
|
||||||
|
|
||||||
if ( !m_aclJobQueue.empty() )
|
|
||||||
{
|
{
|
||||||
JobStatusItem* item = m_aclJobQueue.dequeue();
|
int currentJobs = m_jobTypeCount[ item->type() ];
|
||||||
QMetaObject::invokeMethod( this, "addJob", Qt::QueuedConnection, Q_ARG( JobStatusItem*, item ) );
|
currentJobs--;
|
||||||
|
m_jobTypeCount[ item->type() ] = currentJobs;
|
||||||
|
|
||||||
|
if ( !m_jobQueue[ item->type() ].isEmpty() )
|
||||||
|
{
|
||||||
|
JobStatusItem* item = m_jobQueue[ item->type() ].dequeue();
|
||||||
|
QMetaObject::invokeMethod( this, "addJob", Qt::QueuedConnection, Q_ARG( JobStatusItem*, item ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
item->deleteLater();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -60,8 +60,8 @@ private slots:
|
|||||||
private:
|
private:
|
||||||
QList< JobStatusItem* > m_items;
|
QList< JobStatusItem* > m_items;
|
||||||
QHash< QString, QList< JobStatusItem* > > m_collapseCount;
|
QHash< QString, QList< JobStatusItem* > > m_collapseCount;
|
||||||
QQueue< JobStatusItem* > m_aclJobQueue;
|
QHash< QString, QQueue< JobStatusItem* > > m_jobQueue;
|
||||||
int m_aclJobCount;
|
QHash< QString, int > m_jobTypeCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // JOBSTATUSMODEL_H
|
#endif // JOBSTATUSMODEL_H
|
||||||
|
Reference in New Issue
Block a user