force online in case the offline load failed

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97 2024-06-22 12:33:32 +03:00
parent 2af6902b42
commit 06e1cab41f
No known key found for this signature in database
GPG Key ID: 55EF5DA53DB36318
4 changed files with 25 additions and 7 deletions

View File

@ -122,7 +122,10 @@ void BaseEntityLoadTask::executeTask()
} }
} }
// if we need remote update, run the update task // if we need remote update, run the update task
if (m_mode == Net::Mode::Offline || (!m_entity->m_sha256.isEmpty() && m_entity->m_sha256 == m_entity->m_file_sha256)) { auto hashMatches = !m_entity->m_sha256.isEmpty() && m_entity->m_sha256 == m_entity->m_file_sha256;
auto wasLoadedOffline = m_entity->m_load_status != BaseEntity::LoadStatus::NotLoaded && m_mode == Net::Mode::Offline;
if (wasLoadedOffline || hashMatches) {
m_entity->m_load_status = BaseEntity::LoadStatus::Local;
emitSucceeded(); emitSucceeded();
return; return;
} }

View File

@ -13,6 +13,7 @@
#include "net/Mode.h" #include "net/Mode.h"
#include "Application.h" #include "Application.h"
#include "tasks/Task.h"
/* /*
* This is responsible for loading the components of a component list AND resolving dependency issues between them * This is responsible for loading the components of a component list AND resolving dependency issues between them
@ -142,7 +143,6 @@ void ComponentUpdateTask::loadComponents()
size_t componentIndex = 0; size_t componentIndex = 0;
d->remoteLoadSuccessful = true; d->remoteLoadSuccessful = true;
m_load_tasks.clear();
// load all the components OR their lists... // load all the components OR their lists...
for (auto component : d->m_list->d->components) { for (auto component : d->m_list->d->components) {
Task::Ptr loadTask; Task::Ptr loadTask;
@ -175,14 +175,14 @@ void ComponentUpdateTask::loadComponents()
} }
result = composeLoadResult(result, singleResult); result = composeLoadResult(result, singleResult);
if (loadTask) { if (loadTask) {
m_load_tasks.append(loadTask);
qDebug() << "Remote loading is being run for" << component->getName(); qDebug() << "Remote loading is being run for" << component->getName();
connect(loadTask.get(), &Task::succeeded, [=]() { remoteLoadSucceeded(taskIndex); }); connect(loadTask.get(), &Task::succeeded, this, [this, taskIndex]() { remoteLoadSucceeded(taskIndex); });
connect(loadTask.get(), &Task::failed, [=](const QString& error) { remoteLoadFailed(taskIndex, error); }); connect(loadTask.get(), &Task::failed, this, [this, taskIndex](const QString& error) { remoteLoadFailed(taskIndex, error); });
connect(loadTask.get(), &Task::aborted, [=]() { remoteLoadFailed(taskIndex, tr("Aborted")); }); connect(loadTask.get(), &Task::aborted, this, [this, taskIndex]() { remoteLoadFailed(taskIndex, tr("Aborted")); });
RemoteLoadStatus status; RemoteLoadStatus status;
status.type = loadType; status.type = loadType;
status.PackProfileIndex = componentIndex; status.PackProfileIndex = componentIndex;
status.task = loadTask;
d->remoteLoadStatusList.append(status); d->remoteLoadStatusList.append(status);
taskIndex++; taskIndex++;
} }
@ -489,7 +489,14 @@ void ComponentUpdateTask::resolveDependencies(bool checkOnly)
void ComponentUpdateTask::remoteLoadSucceeded(size_t taskIndex) void ComponentUpdateTask::remoteLoadSucceeded(size_t taskIndex)
{ {
if (static_cast<size_t>(d->remoteLoadStatusList.size()) < taskIndex) {
qWarning() << "Got task index outside of results" << taskIndex;
return;
}
auto& taskSlot = d->remoteLoadStatusList[taskIndex]; auto& taskSlot = d->remoteLoadStatusList[taskIndex];
disconnect(taskSlot.task.get(), &Task::succeeded, this, nullptr);
disconnect(taskSlot.task.get(), &Task::failed, this, nullptr);
disconnect(taskSlot.task.get(), &Task::aborted, this, nullptr);
if (taskSlot.finished) { if (taskSlot.finished) {
qWarning() << "Got multiple results from remote load task" << taskIndex; qWarning() << "Got multiple results from remote load task" << taskIndex;
return; return;
@ -509,7 +516,14 @@ void ComponentUpdateTask::remoteLoadSucceeded(size_t taskIndex)
void ComponentUpdateTask::remoteLoadFailed(size_t taskIndex, const QString& msg) void ComponentUpdateTask::remoteLoadFailed(size_t taskIndex, const QString& msg)
{ {
if (static_cast<size_t>(d->remoteLoadStatusList.size()) < taskIndex) {
qWarning() << "Got task index outside of results" << taskIndex;
return;
}
auto& taskSlot = d->remoteLoadStatusList[taskIndex]; auto& taskSlot = d->remoteLoadStatusList[taskIndex];
disconnect(taskSlot.task.get(), &Task::succeeded, this, nullptr);
disconnect(taskSlot.task.get(), &Task::failed, this, nullptr);
disconnect(taskSlot.task.get(), &Task::aborted, this, nullptr);
if (taskSlot.finished) { if (taskSlot.finished) {
qWarning() << "Got multiple results from remote load task" << taskIndex; qWarning() << "Got multiple results from remote load task" << taskIndex;
return; return;

View File

@ -29,5 +29,4 @@ class ComponentUpdateTask : public Task {
private: private:
std::unique_ptr<ComponentUpdateTaskData> d; std::unique_ptr<ComponentUpdateTaskData> d;
QList<Task::Ptr> m_load_tasks;
}; };

View File

@ -4,6 +4,7 @@
#include <QString> #include <QString>
#include <cstddef> #include <cstddef>
#include "net/Mode.h" #include "net/Mode.h"
#include "tasks/Task.h"
class PackProfile; class PackProfile;
@ -13,6 +14,7 @@ struct RemoteLoadStatus {
bool finished = false; bool finished = false;
bool succeeded = false; bool succeeded = false;
QString error; QString error;
Task::Ptr task;
}; };
struct ComponentUpdateTaskData { struct ComponentUpdateTaskData {