feat: improve metadata gen. networking and performance

This makes the metadata generation code a lot messier and harder to use,
but there's not really much else that can be done about it while
preserving all it's capabilities :(

At least we now have speed

Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
flow
2022-06-16 11:45:29 -03:00
parent 91a5c4bdcb
commit 4e6978ff6f
7 changed files with 641 additions and 335 deletions

View File

@ -2,6 +2,7 @@
#include "ModIndex.h"
#include "tasks/SequentialTask.h"
#include "net/NetJob.h"
class Mod;
class QDir;
@ -11,7 +12,10 @@ class EnsureMetadataTask : public Task {
Q_OBJECT
public:
EnsureMetadataTask(Mod&, QDir&, bool try_all, ModPlatform::Provider = ModPlatform::Provider::MODRINTH);
EnsureMetadataTask(Mod&, QDir, ModPlatform::Provider = ModPlatform::Provider::MODRINTH);
EnsureMetadataTask(std::list<Mod>&, QDir, ModPlatform::Provider = ModPlatform::Provider::MODRINTH);
~EnsureMetadataTask() = default;
public slots:
bool abort() override;
@ -20,22 +24,31 @@ class EnsureMetadataTask : public Task {
private:
// FIXME: Move to their own namespace
void modrinthEnsureMetadata(SequentialTask&, QByteArray&);
void flameEnsureMetadata(SequentialTask&, QByteArray&);
auto modrinthVersionsTask() -> NetJob::Ptr;
auto modrinthProjectsTask() -> NetJob::Ptr;
auto flameVersionsTask() -> NetJob::Ptr;
auto flameProjectsTask() -> NetJob::Ptr;
// Helpers
void emitReady();
void emitFail();
void emitReady(Mod&);
void emitFail(Mod&);
auto getHash(Mod&) -> QString;
private slots:
void modrinthCallback(ModPlatform::IndexedPack& pack, ModPlatform::IndexedVersion& ver, Mod&);
void flameCallback(ModPlatform::IndexedPack& pack, ModPlatform::IndexedVersion& ver, Mod&);
signals:
void metadataReady();
void metadataFailed();
void metadataReady(Mod&);
void metadataFailed(Mod&);
private:
Mod& m_mod;
QDir& m_index_dir;
QHash<QString, Mod> m_mods;
QDir m_index_dir;
ModPlatform::Provider m_provider;
bool m_try_all;
MultipleOptionsTask* m_task_handler = nullptr;
QHash<QString, ModPlatform::IndexedVersion> m_temp_versions;
NetJob* m_current_task;
};