void ProgressModel::addJob(const QUuid &jobId, const QString &jobName, const QString &jobInitialStatus, int jobInitialState)
{
- if(m_jobList.contains(jobId) || m_jobListHidden.contains(jobId))
+ if(m_jobIdentifiers.contains(jobId))
{
return;
}
{
beginRemoveRows(QModelIndex(), 0, 0);
m_jobListHidden.append(m_jobList.takeFirst());
+ m_jobIndexCache.clear();
endRemoveRows();
}
m_jobStatus.insert(jobId, jobInitialStatus);
m_jobState.insert(jobId, jobInitialState);
m_jobLogFile.insert(jobId, QStringList());
+ m_jobIdentifiers.insert(jobId);
endInsertRows();
}
void ProgressModel::updateJob(const QUuid &jobId, const QString &newStatus, int newState)
{
- int row = m_jobList.indexOf(jobId);
-
- if(row < 0)
+ if(!m_jobIdentifiers.contains(jobId))
{
- if(m_jobListHidden.indexOf(jobId) >= 0)
- {
- if(!newStatus.isEmpty()) m_jobStatus.insert(jobId, newStatus);
- if(newState >= 0) m_jobState.insert(jobId, newState);
- }
return;
}
-
+
if(!newStatus.isEmpty()) m_jobStatus.insert(jobId, newStatus);
if(newState >= 0) m_jobState.insert(jobId, newState);
-
- emit dataChanged(index(row, 0), index(row, 1));
+
+ const int row = m_jobIndexCache.value(jobId, -1);
+
+ if(row >= 0)
+ {
+ emit dataChanged(index(row, 0), index(row, 1));
+ }
+ else
+ {
+ const int tmp = m_jobList.indexOf(jobId);
+ if(tmp >= 0)
+ {
+ m_jobIndexCache.insert(jobId, tmp);
+ emit dataChanged(index(tmp, 0), index(tmp, 1));
+ }
+ }
}
void ProgressModel::appendToLog(const QUuid &jobId, const QString &line)
{
- if(m_jobList.contains(jobId))
+ if(m_jobIdentifiers.contains(jobId))
{
m_jobLogFile[jobId].append(line.split('\n'));
}
{
const QUuid &jobId = QUuid::createUuid();
- if(m_jobList.contains(jobId))
+ if(m_jobIdentifiers.contains(jobId))
{
return;
}
{
beginRemoveRows(QModelIndex(), 0, 0);
m_jobListHidden.append(m_jobList.takeFirst());
+ m_jobIndexCache.clear();
endRemoveRows();
}
m_jobStatus.insert(jobId, QString());
m_jobState.insert(jobId, jobState);
m_jobLogFile.insert(jobId, QStringList());
+ m_jobIdentifiers.insert(jobId);
endInsertRows();
}
{
m_jobList.prepend(m_jobListHidden.takeLast());
}
+ m_jobIndexCache.clear();
endResetModel();
}
}
#include <QString>
#include <QStringList>
-#include <QMap>
+#include <QHash>
+#include <QSet>
+#include <QUuid>
#include <QIcon>
#include <QUuid>
private:
QList<QUuid> m_jobList;
QList<QUuid> m_jobListHidden;
- QMap<QUuid, QString> m_jobName;
- QMap<QUuid, QString> m_jobStatus;
- QMap<QUuid, int> m_jobState;
- QMap<QUuid, QStringList> m_jobLogFile;
+ QHash<QUuid, QString> m_jobName;
+ QHash<QUuid, QString> m_jobStatus;
+ QHash<QUuid, int> m_jobState;
+ QHash<QUuid, QStringList> m_jobLogFile;
+ QHash<QUuid, int> m_jobIndexCache;
+ QSet<QUuid> m_jobIdentifiers;
const QIcon m_iconRunning;
const QIcon m_iconPaused;