New, better, liteloader support
This commit is contained in:
parent
5cf599673d
commit
7146724607
@ -460,6 +460,8 @@ logic/lists/ForgeVersionList.h
|
|||||||
logic/lists/ForgeVersionList.cpp
|
logic/lists/ForgeVersionList.cpp
|
||||||
logic/lists/JavaVersionList.h
|
logic/lists/JavaVersionList.h
|
||||||
logic/lists/JavaVersionList.cpp
|
logic/lists/JavaVersionList.cpp
|
||||||
|
logic/lists/LiteLoaderVersionList.h
|
||||||
|
logic/lists/LiteLoaderVersionList.cpp
|
||||||
|
|
||||||
# Icons
|
# Icons
|
||||||
logic/icons/MMCIcon.h
|
logic/icons/MMCIcon.h
|
||||||
|
10
MultiMC.cpp
10
MultiMC.cpp
@ -17,6 +17,7 @@
|
|||||||
#include "logic/lists/LwjglVersionList.h"
|
#include "logic/lists/LwjglVersionList.h"
|
||||||
#include "logic/lists/MinecraftVersionList.h"
|
#include "logic/lists/MinecraftVersionList.h"
|
||||||
#include "logic/lists/ForgeVersionList.h"
|
#include "logic/lists/ForgeVersionList.h"
|
||||||
|
#include "logic/lists/LiteLoaderVersionList.h"
|
||||||
|
|
||||||
#include "logic/news/NewsChecker.h"
|
#include "logic/news/NewsChecker.h"
|
||||||
|
|
||||||
@ -536,6 +537,15 @@ std::shared_ptr<ForgeVersionList> MultiMC::forgelist()
|
|||||||
return m_forgelist;
|
return m_forgelist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<LiteLoaderVersionList> MultiMC::liteloaderlist()
|
||||||
|
{
|
||||||
|
if (!m_liteloaderlist)
|
||||||
|
{
|
||||||
|
m_liteloaderlist.reset(new LiteLoaderVersionList());
|
||||||
|
}
|
||||||
|
return m_liteloaderlist;
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<MinecraftVersionList> MultiMC::minecraftlist()
|
std::shared_ptr<MinecraftVersionList> MultiMC::minecraftlist()
|
||||||
{
|
{
|
||||||
if (!m_minecraftlist)
|
if (!m_minecraftlist)
|
||||||
|
@ -17,6 +17,7 @@ class MojangAccountList;
|
|||||||
class IconList;
|
class IconList;
|
||||||
class QNetworkAccessManager;
|
class QNetworkAccessManager;
|
||||||
class ForgeVersionList;
|
class ForgeVersionList;
|
||||||
|
class LiteLoaderVersionList;
|
||||||
class JavaVersionList;
|
class JavaVersionList;
|
||||||
class UpdateChecker;
|
class UpdateChecker;
|
||||||
class NotificationChecker;
|
class NotificationChecker;
|
||||||
@ -123,6 +124,8 @@ public:
|
|||||||
|
|
||||||
std::shared_ptr<ForgeVersionList> forgelist();
|
std::shared_ptr<ForgeVersionList> forgelist();
|
||||||
|
|
||||||
|
std::shared_ptr<LiteLoaderVersionList> liteloaderlist();
|
||||||
|
|
||||||
std::shared_ptr<MinecraftVersionList> minecraftlist();
|
std::shared_ptr<MinecraftVersionList> minecraftlist();
|
||||||
|
|
||||||
std::shared_ptr<JavaVersionList> javalist();
|
std::shared_ptr<JavaVersionList> javalist();
|
||||||
@ -196,6 +199,7 @@ private:
|
|||||||
std::shared_ptr<HttpMetaCache> m_metacache;
|
std::shared_ptr<HttpMetaCache> m_metacache;
|
||||||
std::shared_ptr<LWJGLVersionList> m_lwjgllist;
|
std::shared_ptr<LWJGLVersionList> m_lwjgllist;
|
||||||
std::shared_ptr<ForgeVersionList> m_forgelist;
|
std::shared_ptr<ForgeVersionList> m_forgelist;
|
||||||
|
std::shared_ptr<LiteLoaderVersionList> m_liteloaderlist;
|
||||||
std::shared_ptr<MinecraftVersionList> m_minecraftlist;
|
std::shared_ptr<MinecraftVersionList> m_minecraftlist;
|
||||||
std::shared_ptr<JavaVersionList> m_javalist;
|
std::shared_ptr<JavaVersionList> m_javalist;
|
||||||
QsLogging::DestinationPtr m_fileDestination;
|
QsLogging::DestinationPtr m_fileDestination;
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
#include "logic/OneSixVersion.h"
|
#include "logic/OneSixVersion.h"
|
||||||
#include "logic/EnabledItemFilter.h"
|
#include "logic/EnabledItemFilter.h"
|
||||||
#include "logic/lists/ForgeVersionList.h"
|
#include "logic/lists/ForgeVersionList.h"
|
||||||
|
#include "logic/lists/LiteLoaderVersionList.h"
|
||||||
#include "logic/ForgeInstaller.h"
|
#include "logic/ForgeInstaller.h"
|
||||||
#include "logic/LiteLoaderInstaller.h"
|
#include "logic/LiteLoaderInstaller.h"
|
||||||
#include "logic/OneSixVersionBuilder.h"
|
#include "logic/OneSixVersionBuilder.h"
|
||||||
@ -108,7 +109,7 @@ OneSixModEditDialog::~OneSixModEditDialog()
|
|||||||
void OneSixModEditDialog::updateVersionControls()
|
void OneSixModEditDialog::updateVersionControls()
|
||||||
{
|
{
|
||||||
ui->forgeBtn->setEnabled(true);
|
ui->forgeBtn->setEnabled(true);
|
||||||
ui->liteloaderBtn->setEnabled(LiteLoaderInstaller().canApply(m_inst));
|
ui->liteloaderBtn->setEnabled(true);
|
||||||
ui->mainClassEdit->setText(m_version->mainClass);
|
ui->mainClassEdit->setText(m_version->mainClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,24 +291,27 @@ void OneSixModEditDialog::on_liteloaderBtn_clicked()
|
|||||||
QDir(m_inst->instanceRoot()).remove("custom.json");
|
QDir(m_inst->instanceRoot()).remove("custom.json");
|
||||||
m_inst->reloadVersion(this);
|
m_inst->reloadVersion(this);
|
||||||
}
|
}
|
||||||
LiteLoaderInstaller liteloader;
|
VersionSelectDialog vselect(MMC->liteloaderlist().get(), tr("Select LiteLoader version"), this);
|
||||||
if (!liteloader.canApply(m_inst))
|
vselect.setFilter(1, m_inst->currentVersionId());
|
||||||
|
vselect.setEmptyString(tr("No LiteLoader versions are currently available for Minecraft ") +
|
||||||
|
m_inst->currentVersionId());
|
||||||
|
if (vselect.exec() && vselect.selectedVersion())
|
||||||
{
|
{
|
||||||
QMessageBox::critical(
|
LiteLoaderVersionPtr liteloaderVersion =
|
||||||
this, tr("LiteLoader"),
|
std::dynamic_pointer_cast<LiteLoaderVersion>(vselect.selectedVersion());
|
||||||
tr("There is no information available on how to install LiteLoader "
|
if (!liteloaderVersion)
|
||||||
"into this version of Minecraft"));
|
return;
|
||||||
return;
|
LiteLoaderInstaller liteloader(liteloaderVersion);
|
||||||
}
|
if (!liteloader.add(m_inst))
|
||||||
if (!liteloader.add(m_inst))
|
{
|
||||||
{
|
QMessageBox::critical(this, tr("LiteLoader"),
|
||||||
QMessageBox::critical(this, tr("LiteLoader"),
|
tr("For reasons unknown, the LiteLoader installation failed. "
|
||||||
tr("For reasons unknown, the LiteLoader installation failed. "
|
"Check your MultiMC log files for details."));
|
||||||
"Check your MultiMC log files for details."));
|
}
|
||||||
}
|
else
|
||||||
else
|
{
|
||||||
{
|
m_inst->reloadVersion(this);
|
||||||
m_inst->reloadVersion(this);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,6 +82,7 @@ void VersionSelectDialog::loadList()
|
|||||||
Task *loadTask = m_vlist->getLoadTask();
|
Task *loadTask = m_vlist->getLoadTask();
|
||||||
loadTask->setParent(taskDlg);
|
loadTask->setParent(taskDlg);
|
||||||
taskDlg->exec(loadTask);
|
taskDlg->exec(loadTask);
|
||||||
|
delete taskDlg;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseVersionPtr VersionSelectDialog::selectedVersion() const
|
BaseVersionPtr VersionSelectDialog::selectedVersion() const
|
||||||
|
@ -26,7 +26,6 @@ class BaseInstaller
|
|||||||
public:
|
public:
|
||||||
BaseInstaller();
|
BaseInstaller();
|
||||||
|
|
||||||
virtual bool canApply(OneSixInstance *instance) const { return true; }
|
|
||||||
bool isApplied(OneSixInstance *on);
|
bool isApplied(OneSixInstance *on);
|
||||||
|
|
||||||
virtual bool add(OneSixInstance *to);
|
virtual bool add(OneSixInstance *to);
|
||||||
|
@ -24,23 +24,9 @@
|
|||||||
#include "OneSixLibrary.h"
|
#include "OneSixLibrary.h"
|
||||||
#include "OneSixInstance.h"
|
#include "OneSixInstance.h"
|
||||||
|
|
||||||
QMap<QString, QString> LiteLoaderInstaller::m_launcherWrapperVersionMapping;
|
LiteLoaderInstaller::LiteLoaderInstaller(LiteLoaderVersionPtr version)
|
||||||
|
: BaseInstaller(), m_version(version)
|
||||||
LiteLoaderInstaller::LiteLoaderInstaller()
|
|
||||||
: BaseInstaller()
|
|
||||||
{
|
{
|
||||||
if (m_launcherWrapperVersionMapping.isEmpty())
|
|
||||||
{
|
|
||||||
m_launcherWrapperVersionMapping["1.6.2"] = "1.3";
|
|
||||||
m_launcherWrapperVersionMapping["1.6.4"] = "1.8";
|
|
||||||
//m_launcherWrapperVersionMapping["1.7.2"] = "1.8";
|
|
||||||
//m_launcherWrapperVersionMapping["1.7.4"] = "1.8";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool LiteLoaderInstaller::canApply(OneSixInstance *instance) const
|
|
||||||
{
|
|
||||||
return m_launcherWrapperVersionMapping.contains(instance->intendedVersionId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LiteLoaderInstaller::add(OneSixInstance *to)
|
bool LiteLoaderInstaller::add(OneSixInstance *to)
|
||||||
@ -53,24 +39,26 @@ bool LiteLoaderInstaller::add(OneSixInstance *to)
|
|||||||
QJsonObject obj;
|
QJsonObject obj;
|
||||||
|
|
||||||
obj.insert("mainClass", QString("net.minecraft.launchwrapper.Launch"));
|
obj.insert("mainClass", QString("net.minecraft.launchwrapper.Launch"));
|
||||||
obj.insert("+tweakers", QJsonArray::fromStringList(QStringList() << "com.mumfrey.liteloader.launch.LiteLoaderTweaker"));
|
obj.insert("+tweakers", QJsonArray::fromStringList(QStringList() << m_version->tweakClass));
|
||||||
obj.insert("order", 10);
|
obj.insert("order", 10);
|
||||||
|
|
||||||
QJsonArray libraries;
|
QJsonArray libraries;
|
||||||
|
|
||||||
// launchwrapper
|
for (auto libStr : m_version->libraries)
|
||||||
{
|
{
|
||||||
OneSixLibrary launchwrapperLib("net.minecraft:launchwrapper:" + m_launcherWrapperVersionMapping[to->intendedVersionId()]);
|
OneSixLibrary lib(libStr);
|
||||||
launchwrapperLib.finalize();
|
lib.finalize();
|
||||||
QJsonObject lwLibObj = launchwrapperLib.toJson();
|
QJsonObject libObj = lib.toJson();
|
||||||
lwLibObj.insert("insert", QString("prepend"));
|
libObj.insert("insert", QString("prepend"));
|
||||||
libraries.append(lwLibObj);
|
libraries.append(libObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
// liteloader
|
// liteloader
|
||||||
{
|
{
|
||||||
OneSixLibrary liteloaderLib("com.mumfrey:liteloader:" + to->intendedVersionId());
|
OneSixLibrary liteloaderLib("com.mumfrey:liteloader:" + m_version->version);
|
||||||
liteloaderLib.setBaseUrl("http://dl.liteloader.com/versions/");
|
liteloaderLib.setAbsoluteUrl(
|
||||||
|
QString("http://dl.liteloader.com/versions/com/mumfrey/liteloader/%1/%2")
|
||||||
|
.arg(m_version->mcVersion, m_version->file));
|
||||||
liteloaderLib.finalize();
|
liteloaderLib.finalize();
|
||||||
QJsonObject llLibObj = liteloaderLib.toJson();
|
QJsonObject llLibObj = liteloaderLib.toJson();
|
||||||
llLibObj.insert("insert", QString("prepend"));
|
llLibObj.insert("insert", QString("prepend"));
|
||||||
@ -87,7 +75,8 @@ bool LiteLoaderInstaller::add(OneSixInstance *to)
|
|||||||
QFile file(filename(to->instanceRoot()));
|
QFile file(filename(to->instanceRoot()));
|
||||||
if (!file.open(QFile::WriteOnly))
|
if (!file.open(QFile::WriteOnly))
|
||||||
{
|
{
|
||||||
QLOG_ERROR() << "Error opening" << file.fileName() << "for reading:" << file.errorString();
|
QLOG_ERROR() << "Error opening" << file.fileName()
|
||||||
|
<< "for reading:" << file.errorString();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
file.write(QJsonDocument(obj).toJson());
|
file.write(QJsonDocument(obj).toJson());
|
||||||
|
@ -20,16 +20,19 @@
|
|||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
|
|
||||||
|
#include "logic/lists/LiteLoaderVersionList.h"
|
||||||
|
|
||||||
class LiteLoaderInstaller : public BaseInstaller
|
class LiteLoaderInstaller : public BaseInstaller
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LiteLoaderInstaller();
|
LiteLoaderInstaller(LiteLoaderVersionPtr version);
|
||||||
|
|
||||||
bool canApply(OneSixInstance *instance) const override;
|
|
||||||
bool add(OneSixInstance *to) override;
|
bool add(OneSixInstance *to) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual QString id() const override { return "com.mumfrey.liteloader"; }
|
virtual QString id() const override
|
||||||
|
{
|
||||||
static QMap<QString, QString> m_launcherWrapperVersionMapping;
|
return "com.mumfrey.liteloader";
|
||||||
|
}
|
||||||
|
LiteLoaderVersionPtr m_version;
|
||||||
};
|
};
|
||||||
|
190
logic/lists/LiteLoaderVersionList.cpp
Normal file
190
logic/lists/LiteLoaderVersionList.cpp
Normal file
@ -0,0 +1,190 @@
|
|||||||
|
/* Copyright 2013 MultiMC Contributors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "LiteLoaderVersionList.h"
|
||||||
|
#include "MultiMC.h"
|
||||||
|
#include "logic/net/URLConstants.h"
|
||||||
|
|
||||||
|
#include <QtXml>
|
||||||
|
|
||||||
|
#include <QJsonDocument>
|
||||||
|
#include <QJsonObject>
|
||||||
|
#include <QJsonArray>
|
||||||
|
#include <QJsonValue>
|
||||||
|
#include <QJsonParseError>
|
||||||
|
|
||||||
|
#include <QtAlgorithms>
|
||||||
|
|
||||||
|
#include <QtNetwork>
|
||||||
|
|
||||||
|
LiteLoaderVersionList::LiteLoaderVersionList(QObject *parent) : BaseVersionList(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Task *LiteLoaderVersionList::getLoadTask()
|
||||||
|
{
|
||||||
|
return new LLListLoadTask(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LiteLoaderVersionList::isLoaded()
|
||||||
|
{
|
||||||
|
return m_loaded;
|
||||||
|
}
|
||||||
|
|
||||||
|
const BaseVersionPtr LiteLoaderVersionList::at(int i) const
|
||||||
|
{
|
||||||
|
return m_vlist.at(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
int LiteLoaderVersionList::count() const
|
||||||
|
{
|
||||||
|
return m_vlist.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool cmpVersions(BaseVersionPtr first, BaseVersionPtr second)
|
||||||
|
{
|
||||||
|
auto left = std::dynamic_pointer_cast<LiteLoaderVersion>(first);
|
||||||
|
auto right = std::dynamic_pointer_cast<LiteLoaderVersion>(second);
|
||||||
|
return left->timestamp > right->timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LiteLoaderVersionList::sort()
|
||||||
|
{
|
||||||
|
beginResetModel();
|
||||||
|
qSort(m_vlist.begin(), m_vlist.end(), cmpVersions);
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseVersionPtr LiteLoaderVersionList::getLatestStable() const
|
||||||
|
{
|
||||||
|
for (int i = 0; i < m_vlist.length(); i++)
|
||||||
|
{
|
||||||
|
auto ver = std::dynamic_pointer_cast<LiteLoaderVersion>(m_vlist.at(i));
|
||||||
|
if (ver->isLatest)
|
||||||
|
{
|
||||||
|
return m_vlist.at(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return BaseVersionPtr();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LiteLoaderVersionList::updateListData(QList<BaseVersionPtr> versions)
|
||||||
|
{
|
||||||
|
beginResetModel();
|
||||||
|
m_vlist = versions;
|
||||||
|
m_loaded = true;
|
||||||
|
qSort(m_vlist.begin(), m_vlist.end(), cmpVersions);
|
||||||
|
endResetModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
LLListLoadTask::LLListLoadTask(LiteLoaderVersionList *vlist)
|
||||||
|
{
|
||||||
|
m_list = vlist;
|
||||||
|
vlistReply = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
LLListLoadTask::~LLListLoadTask()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void LLListLoadTask::executeTask()
|
||||||
|
{
|
||||||
|
setStatus(tr("Loading LiteLoader version list..."));
|
||||||
|
auto worker = MMC->qnam();
|
||||||
|
vlistReply = worker->get(QNetworkRequest(QUrl(URLConstants::LITELOADER_URL)));
|
||||||
|
connect(vlistReply, SIGNAL(finished()), this, SLOT(listDownloaded()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void LLListLoadTask::listDownloaded()
|
||||||
|
{
|
||||||
|
if (vlistReply->error() != QNetworkReply::NoError)
|
||||||
|
{
|
||||||
|
vlistReply->deleteLater();
|
||||||
|
emitFailed("Failed to load LiteLoader version list" + vlistReply->errorString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QJsonParseError jsonError;
|
||||||
|
QJsonDocument jsonDoc = QJsonDocument::fromJson(vlistReply->readAll(), &jsonError);
|
||||||
|
vlistReply->deleteLater();
|
||||||
|
|
||||||
|
if (jsonError.error != QJsonParseError::NoError)
|
||||||
|
{
|
||||||
|
emitFailed("Error parsing version list JSON:" + jsonError.errorString());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!jsonDoc.isObject())
|
||||||
|
{
|
||||||
|
emitFailed("Error parsing version list JSON: jsonDoc is not an object");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QJsonObject root = jsonDoc.object();
|
||||||
|
|
||||||
|
// Now, get the array of versions.
|
||||||
|
if (!root.value("versions").isObject())
|
||||||
|
{
|
||||||
|
emitFailed("Error parsing version list JSON: missing 'versions' object");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const QJsonObject versions = root.value("versions").toObject();
|
||||||
|
|
||||||
|
QList<BaseVersionPtr> tempList;
|
||||||
|
for (auto vIt = versions.begin(); vIt != versions.end(); ++vIt)
|
||||||
|
{
|
||||||
|
const QString mcVersion = vIt.key();
|
||||||
|
QString latest;
|
||||||
|
const QJsonObject artefacts = vIt.value()
|
||||||
|
.toObject()
|
||||||
|
.value("artefacts")
|
||||||
|
.toObject()
|
||||||
|
.value("com.mumfrey:liteloader")
|
||||||
|
.toObject();
|
||||||
|
QList<BaseVersionPtr> perMcVersionList;
|
||||||
|
for (auto aIt = artefacts.begin(); aIt != artefacts.end(); ++aIt)
|
||||||
|
{
|
||||||
|
const QString identifier = aIt.key();
|
||||||
|
const QJsonObject artefact = aIt.value().toObject();
|
||||||
|
if (identifier == "latest")
|
||||||
|
{
|
||||||
|
latest = artefact.value("version").toString();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
LiteLoaderVersionPtr version(new LiteLoaderVersion());
|
||||||
|
version->version = artefact.value("version").toString();
|
||||||
|
version->file = artefact.value("file").toString();
|
||||||
|
version->mcVersion = mcVersion;
|
||||||
|
version->md5 = artefact.value("md5").toString();
|
||||||
|
version->timestamp = artefact.value("timestamp").toDouble();
|
||||||
|
version->tweakClass = artefact.value("tweakClass").toString();
|
||||||
|
const QJsonArray libs = artefact.value("libraries").toArray();
|
||||||
|
for (auto lIt = libs.begin(); lIt != libs.end(); ++lIt)
|
||||||
|
{
|
||||||
|
version->libraries.append((*lIt).toObject().value("name").toString());
|
||||||
|
}
|
||||||
|
perMcVersionList.append(version);
|
||||||
|
}
|
||||||
|
for (auto version : perMcVersionList)
|
||||||
|
{
|
||||||
|
auto v = std::dynamic_pointer_cast<LiteLoaderVersion>(version);
|
||||||
|
v->isLatest = v->version == latest;
|
||||||
|
}
|
||||||
|
tempList.append(perMcVersionList);
|
||||||
|
}
|
||||||
|
m_list->updateListData(tempList);
|
||||||
|
|
||||||
|
emitSucceeded();
|
||||||
|
}
|
101
logic/lists/LiteLoaderVersionList.h
Normal file
101
logic/lists/LiteLoaderVersionList.h
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
/* Copyright 2013 MultiMC Contributors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include "BaseVersionList.h"
|
||||||
|
#include "logic/tasks/Task.h"
|
||||||
|
#include "logic/BaseVersion.h"
|
||||||
|
|
||||||
|
class LLListLoadTask;
|
||||||
|
class QNetworkReply;
|
||||||
|
|
||||||
|
class LiteLoaderVersion : public BaseVersion
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QString descriptor() override
|
||||||
|
{
|
||||||
|
if (isLatest)
|
||||||
|
{
|
||||||
|
return QObject::tr("Latest");
|
||||||
|
}
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
QString typeString() const override
|
||||||
|
{
|
||||||
|
return mcVersion;
|
||||||
|
}
|
||||||
|
QString name() override
|
||||||
|
{
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString version;
|
||||||
|
QString file;
|
||||||
|
QString mcVersion;
|
||||||
|
QString md5;
|
||||||
|
int timestamp;
|
||||||
|
bool isLatest;
|
||||||
|
QString tweakClass;
|
||||||
|
QStringList libraries;
|
||||||
|
};
|
||||||
|
typedef std::shared_ptr<LiteLoaderVersion> LiteLoaderVersionPtr;
|
||||||
|
|
||||||
|
class LiteLoaderVersionList : public BaseVersionList
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
friend class LLListLoadTask;
|
||||||
|
|
||||||
|
explicit LiteLoaderVersionList(QObject *parent = 0);
|
||||||
|
|
||||||
|
virtual Task *getLoadTask();
|
||||||
|
virtual bool isLoaded();
|
||||||
|
virtual const BaseVersionPtr at(int i) const;
|
||||||
|
virtual int count() const;
|
||||||
|
virtual void sort();
|
||||||
|
|
||||||
|
virtual BaseVersionPtr getLatestStable() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QList<BaseVersionPtr> m_vlist;
|
||||||
|
|
||||||
|
bool m_loaded = false;
|
||||||
|
|
||||||
|
protected
|
||||||
|
slots:
|
||||||
|
virtual void updateListData(QList<BaseVersionPtr> versions);
|
||||||
|
};
|
||||||
|
|
||||||
|
class LLListLoadTask : public Task
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit LLListLoadTask(LiteLoaderVersionList *vlist);
|
||||||
|
~LLListLoadTask();
|
||||||
|
|
||||||
|
virtual void executeTask();
|
||||||
|
|
||||||
|
protected
|
||||||
|
slots:
|
||||||
|
void listDownloaded();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QNetworkReply *vlistReply;
|
||||||
|
LiteLoaderVersionList *m_list;
|
||||||
|
};
|
@ -53,7 +53,7 @@ int MinecraftVersionList::count() const
|
|||||||
return m_vlist.count();
|
return m_vlist.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cmpVersions(BaseVersionPtr first, BaseVersionPtr second)
|
static bool cmpVersions(BaseVersionPtr first, BaseVersionPtr second)
|
||||||
{
|
{
|
||||||
auto left = std::dynamic_pointer_cast<MinecraftVersion>(first);
|
auto left = std::dynamic_pointer_cast<MinecraftVersion>(first);
|
||||||
auto right = std::dynamic_pointer_cast<MinecraftVersion>(second);
|
auto right = std::dynamic_pointer_cast<MinecraftVersion>(second);
|
||||||
|
@ -33,4 +33,5 @@ const QString FORGE_LEGACY_URL("http://files.minecraftforge.net/minecraftforge/j
|
|||||||
const QString FORGE_GRADLE_URL("http://files.minecraftforge.net/maven/net/minecraftforge/forge/json");
|
const QString FORGE_GRADLE_URL("http://files.minecraftforge.net/maven/net/minecraftforge/forge/json");
|
||||||
const QString MOJANG_STATUS_URL("http://status.mojang.com/check");
|
const QString MOJANG_STATUS_URL("http://status.mojang.com/check");
|
||||||
const QString MOJANG_STATUS_NEWS_URL("http://status.mojang.com/news");
|
const QString MOJANG_STATUS_NEWS_URL("http://status.mojang.com/news");
|
||||||
|
const QString LITELOADER_URL("http://dl.liteloader.com/versions/versions.json");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user