summaryrefslogtreecommitdiff
path: root/src/downloadlist.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-12-26 20:58:06 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-12-26 20:58:06 -0500
commit106ed49baecc60dbdf4844ed684df750e5caf3aa (patch)
treef7485c0d4e995263b313ed08856869c9e8c8b6a1 /src/downloadlist.cpp
parent3eb64c32e8643a34ce2de07bdb0f2fae2869b69a (diff)
removed setUpdateDelay(false) calls, it's the default
FilterWidget for downloads tab
Diffstat (limited to 'src/downloadlist.cpp')
-rw-r--r--src/downloadlist.cpp80
1 files changed, 78 insertions, 2 deletions
diff --git a/src/downloadlist.cpp b/src/downloadlist.cpp
index 99347a79..3cfc1fea 100644
--- a/src/downloadlist.cpp
+++ b/src/downloadlist.cpp
@@ -41,9 +41,14 @@ void DownloadList::setMetaDisplay(bool metaDisplay)
}
-int DownloadList::rowCount(const QModelIndex&) const
+int DownloadList::rowCount(const QModelIndex& parent) const
{
- return m_Manager->numTotalDownloads() + m_Manager->numPendingDownloads();
+ if (!parent.isValid()) {
+ // root item
+ return m_Manager->numTotalDownloads() + m_Manager->numPendingDownloads();
+ } else {
+ return 0;
+ }
}
@@ -203,3 +208,74 @@ void DownloadList::update(int row)
else
log::error("invalid row {} in download list, update failed", row);
}
+
+bool DownloadList::lessThan(const QModelIndex &left, const QModelIndex &right)
+{
+ int leftIndex = left.row();
+ int rightIndex = right.row();
+ if ((leftIndex < m_Manager->numTotalDownloads())
+ && (rightIndex < m_Manager->numTotalDownloads())) {
+ if (left.column() == DownloadList::COL_NAME) {
+ return m_Manager->getFileName(left.row()).compare(m_Manager->getFileName(right.row()), Qt::CaseInsensitive) < 0;
+ } else if (left.column() == DownloadList::COL_MODNAME) {
+ QString leftName, rightName;
+
+ if (!m_Manager->isInfoIncomplete(left.row())) {
+ const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(left.row());
+ leftName = info->modName;
+ }
+
+ if (!m_Manager->isInfoIncomplete(right.row())) {
+ const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(right.row());
+ rightName = info->modName;
+ }
+
+ return leftName.compare(rightName, Qt::CaseInsensitive) < 0;
+ } else if (left.column() == DownloadList::COL_VERSION) {
+ MOBase::VersionInfo versionLeft, versionRight;
+
+ if (!m_Manager->isInfoIncomplete(left.row())) {
+ const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(left.row());
+ versionLeft = info->version;
+ }
+
+ if (!m_Manager->isInfoIncomplete(right.row())) {
+ const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(right.row());
+ versionRight = info->version;
+ }
+
+ return versionLeft < versionRight;
+ } else if (left.column() == DownloadList::COL_ID) {
+ int leftID=0, rightID=0;
+
+ if (!m_Manager->isInfoIncomplete(left.row())) {
+ const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(left.row());
+ leftID = info->modID;
+ }
+
+ if (!m_Manager->isInfoIncomplete(right.row())) {
+ const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(right.row());
+ rightID = info->modID;
+ }
+
+ return leftID < rightID;
+ } else if (left.column() == DownloadList::COL_STATUS) {
+ DownloadManager::DownloadState leftState = m_Manager->getState(left.row());
+ DownloadManager::DownloadState rightState = m_Manager->getState(right.row());
+ if (leftState == rightState)
+ return m_Manager->getFileTime(left.row()) < m_Manager->getFileTime(right.row());
+ else
+ return leftState > rightState;
+ } else if (left.column() == DownloadList::COL_SIZE) {
+ return m_Manager->getFileSize(left.row()) < m_Manager->getFileSize(right.row());
+ } else if (left.column() == DownloadList::COL_FILETIME) {
+ return m_Manager->getFileTime(left.row()) < m_Manager->getFileTime(right.row());
+ } else if (left.column() == DownloadList::COL_SOURCEGAME) {
+ return m_Manager->getDisplayGameName(left.row()) < m_Manager->getDisplayGameName(right.row());
+ } else {
+ return leftIndex < rightIndex;
+ }
+ } else {
+ return leftIndex < rightIndex;
+ }
+}