aboutsummaryrefslogtreecommitdiff
path: root/launcher/minecraft/mod/tasks/ModFolderLoadTask.cpp
blob: fe807a29b28f0368176f6b54ef0b8effcc80a28f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "ModFolderLoadTask.h"
#include <QDebug>

#include "Application.h"
#include "minecraft/mod/MetadataHandler.h"

ModFolderLoadTask::ModFolderLoadTask(QDir& mods_dir, QDir& index_dir) 
    : m_mods_dir(mods_dir), m_index_dir(index_dir), m_result(new Result())
{}

void ModFolderLoadTask::run()
{
    if (!APPLICATION->settings()->get("ModMetadataDisabled").toBool()) {
        // Read metadata first
        getFromMetadata();
    }

    // Read JAR files that don't have metadata
    m_mods_dir.refresh();
    for (auto entry : m_mods_dir.entryInfoList()) {
        Mod mod(entry);
        if(m_result->mods.contains(mod.internal_id())){
            m_result->mods[mod.internal_id()].setStatus(ModStatus::Installed);
        }
        else {
            m_result->mods[mod.internal_id()] = mod;
            m_result->mods[mod.internal_id()].setStatus(ModStatus::NoMetadata);
        }
    }

    emit succeeded();
}

void ModFolderLoadTask::getFromMetadata()
{
    m_index_dir.refresh();
    for (auto entry : m_index_dir.entryList(QDir::Files)) {
        auto metadata = Metadata::get(m_index_dir, entry);

        if(!metadata.isValid()){
            return;
        }

        Mod mod(m_mods_dir, metadata);
        mod.setStatus(ModStatus::NotInstalled);
        m_result->mods[mod.internal_id()] = mod;
    }
}