aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/pages/modplatform/ResourceModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'launcher/ui/pages/modplatform/ResourceModel.cpp')
-rw-r--r--launcher/ui/pages/modplatform/ResourceModel.cpp45
1 files changed, 36 insertions, 9 deletions
diff --git a/launcher/ui/pages/modplatform/ResourceModel.cpp b/launcher/ui/pages/modplatform/ResourceModel.cpp
index eedc5202..5bbd39d3 100644
--- a/launcher/ui/pages/modplatform/ResourceModel.cpp
+++ b/launcher/ui/pages/modplatform/ResourceModel.cpp
@@ -123,8 +123,8 @@ void ResourceModel::fetchMore(const QModelIndex& parent)
void ResourceModel::search()
{
- if (!m_current_job.isRunning())
- m_current_job.clear();
+ if (hasActiveSearchJob())
+ return;
auto args{ createSearchArguments() };
@@ -146,22 +146,22 @@ void ResourceModel::search()
};
if (auto job = m_api->searchProjects(std::move(args), std::move(callbacks)); job)
- addActiveJob(job);
+ runSearchJob(job);
}
void ResourceModel::loadEntry(QModelIndex& entry)
{
auto const& pack = m_packs[entry.row()];
- if (!m_current_job.isRunning())
- m_current_job.clear();
+ if (!hasActiveInfoJob())
+ m_current_info_job.clear();
if (!pack.versionsLoaded) {
auto args{ createVersionsArguments(entry) };
auto callbacks{ createVersionsCallbacks(entry) };
if (auto job = m_api->getProjectVersions(std::move(args), std::move(callbacks)); job)
- addActiveJob(job);
+ runInfoJob(job);
}
if (!pack.extraDataLoaded) {
@@ -169,14 +169,25 @@ void ResourceModel::loadEntry(QModelIndex& entry)
auto callbacks{ createInfoCallbacks(entry) };
if (auto job = m_api->getProjectInfo(std::move(args), std::move(callbacks)); job)
- addActiveJob(job);
+ runInfoJob(job);
}
}
void ResourceModel::refresh()
{
- if (m_current_job.isRunning()) {
- m_current_job.abort();
+ bool reset_requested = false;
+
+ if (hasActiveInfoJob()) {
+ m_current_info_job.abort();
+ reset_requested = true;
+ }
+
+ if (hasActiveSearchJob()) {
+ m_current_search_job->abort();
+ reset_requested = true;
+ }
+
+ if (reset_requested) {
m_search_state = SearchState::ResetRequested;
return;
}
@@ -195,6 +206,22 @@ void ResourceModel::clearData()
endResetModel();
}
+void ResourceModel::runSearchJob(NetJob::Ptr ptr)
+{
+ m_current_search_job = ptr;
+ m_current_search_job->start();
+}
+void ResourceModel::runInfoJob(Task::Ptr ptr)
+{
+ if (!m_current_info_job.isRunning())
+ m_current_info_job.clear();
+
+ m_current_info_job.addTask(ptr);
+
+ if (!m_current_info_job.isRunning())
+ m_current_info_job.run();
+}
+
std::optional<QIcon> ResourceModel::getIcon(QModelIndex& index, const QUrl& url)
{
QPixmap pixmap;