Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
790e077ca8 | |||
10ac6cb266 | |||
4c9859b16e | |||
4b2c7a8a64 | |||
0120d170b7 | |||
79617d0c50 | |||
6e58635bfb | |||
3aee1d60d8 | |||
a1fbf2b137 | |||
0b98a0884e | |||
1582bb57ed |
@ -34,6 +34,11 @@ set(CMAKE_C_STANDARD 11)
|
|||||||
include(GenerateExportHeader)
|
include(GenerateExportHeader)
|
||||||
set(CMAKE_CXX_FLAGS "-Wall -pedantic -fstack-protector-strong --param=ssp-buffer-size=4 ${CMAKE_CXX_FLAGS}")
|
set(CMAKE_CXX_FLAGS "-Wall -pedantic -fstack-protector-strong --param=ssp-buffer-size=4 ${CMAKE_CXX_FLAGS}")
|
||||||
|
|
||||||
|
# ATL's packlist needs more than the default 1 Mib stack on windows
|
||||||
|
if(WIN32)
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--stack,8388608 ${CMAKE_EXE_LINKER_FLAGS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Fix build with Qt 5.13
|
# Fix build with Qt 5.13
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_DEPRECATED_WARNINGS=Y")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_DEPRECATED_WARNINGS=Y")
|
||||||
|
|
||||||
@ -77,7 +82,7 @@ set(Launcher_HELP_URL "https://prismlauncher.org/wiki/help-pages/%1" CACHE STRIN
|
|||||||
|
|
||||||
######## Set version numbers ########
|
######## Set version numbers ########
|
||||||
set(Launcher_VERSION_MAJOR 5)
|
set(Launcher_VERSION_MAJOR 5)
|
||||||
set(Launcher_VERSION_MINOR 1)
|
set(Launcher_VERSION_MINOR 2)
|
||||||
|
|
||||||
set(Launcher_VERSION_NAME "${Launcher_VERSION_MAJOR}.${Launcher_VERSION_MINOR}")
|
set(Launcher_VERSION_NAME "${Launcher_VERSION_MAJOR}.${Launcher_VERSION_MINOR}")
|
||||||
set(Launcher_VERSION_NAME4 "${Launcher_VERSION_MAJOR}.${Launcher_VERSION_MINOR}.0.0")
|
set(Launcher_VERSION_NAME4 "${Launcher_VERSION_MAJOR}.${Launcher_VERSION_MINOR}.0.0")
|
||||||
|
@ -17,13 +17,14 @@
|
|||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
#include "BaseVersion.h"
|
||||||
|
|
||||||
class MinecraftInstance;
|
class MinecraftInstance;
|
||||||
class QDir;
|
class QDir;
|
||||||
class QString;
|
class QString;
|
||||||
class QObject;
|
class QObject;
|
||||||
class Task;
|
class Task;
|
||||||
class BaseVersion;
|
class BaseVersion;
|
||||||
typedef std::shared_ptr<BaseVersion> BaseVersionPtr;
|
|
||||||
|
|
||||||
class BaseInstaller
|
class BaseInstaller
|
||||||
{
|
{
|
||||||
@ -35,7 +36,7 @@ public:
|
|||||||
virtual bool add(MinecraftInstance *to);
|
virtual bool add(MinecraftInstance *to);
|
||||||
virtual bool remove(MinecraftInstance *from);
|
virtual bool remove(MinecraftInstance *from);
|
||||||
|
|
||||||
virtual Task *createInstallTask(MinecraftInstance *instance, BaseVersionPtr version, QObject *parent) = 0;
|
virtual Task *createInstallTask(MinecraftInstance *instance, BaseVersion::Ptr version, QObject *parent) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual QString id() const = 0;
|
virtual QString id() const = 0;
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
class BaseVersion
|
class BaseVersion
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
using Ptr = std::shared_ptr<BaseVersion>;
|
||||||
virtual ~BaseVersion() {}
|
virtual ~BaseVersion() {}
|
||||||
/*!
|
/*!
|
||||||
* A string used to identify this version in config files.
|
* A string used to identify this version in config files.
|
||||||
@ -54,6 +55,4 @@ public:
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::shared_ptr<BaseVersion> BaseVersionPtr;
|
Q_DECLARE_METATYPE(BaseVersion::Ptr)
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(BaseVersionPtr)
|
|
||||||
|
@ -40,20 +40,20 @@ BaseVersionList::BaseVersionList(QObject *parent) : QAbstractListModel(parent)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseVersionPtr BaseVersionList::findVersion(const QString &descriptor)
|
BaseVersion::Ptr BaseVersionList::findVersion(const QString &descriptor)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < count(); i++)
|
for (int i = 0; i < count(); i++)
|
||||||
{
|
{
|
||||||
if (at(i)->descriptor() == descriptor)
|
if (at(i)->descriptor() == descriptor)
|
||||||
return at(i);
|
return at(i);
|
||||||
}
|
}
|
||||||
return BaseVersionPtr();
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseVersionPtr BaseVersionList::getRecommended() const
|
BaseVersion::Ptr BaseVersionList::getRecommended() const
|
||||||
{
|
{
|
||||||
if (count() <= 0)
|
if (count() <= 0)
|
||||||
return BaseVersionPtr();
|
return nullptr;
|
||||||
else
|
else
|
||||||
return at(0);
|
return at(0);
|
||||||
}
|
}
|
||||||
@ -66,7 +66,7 @@ QVariant BaseVersionList::data(const QModelIndex &index, int role) const
|
|||||||
if (index.row() > count())
|
if (index.row() > count())
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
||||||
BaseVersionPtr version = at(index.row());
|
BaseVersion::Ptr version = at(index.row());
|
||||||
|
|
||||||
switch (role)
|
switch (role)
|
||||||
{
|
{
|
||||||
|
@ -70,7 +70,7 @@ public:
|
|||||||
virtual bool isLoaded() = 0;
|
virtual bool isLoaded() = 0;
|
||||||
|
|
||||||
//! Gets the version at the given index.
|
//! Gets the version at the given index.
|
||||||
virtual const BaseVersionPtr at(int i) const = 0;
|
virtual const BaseVersion::Ptr at(int i) const = 0;
|
||||||
|
|
||||||
//! Returns the number of versions in the list.
|
//! Returns the number of versions in the list.
|
||||||
virtual int count() const = 0;
|
virtual int count() const = 0;
|
||||||
@ -90,13 +90,13 @@ public:
|
|||||||
* \return A const pointer to the version with the given descriptor. NULL if
|
* \return A const pointer to the version with the given descriptor. NULL if
|
||||||
* one doesn't exist.
|
* one doesn't exist.
|
||||||
*/
|
*/
|
||||||
virtual BaseVersionPtr findVersion(const QString &descriptor);
|
virtual BaseVersion::Ptr findVersion(const QString &descriptor);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the recommended version from this list
|
* \brief Gets the recommended version from this list
|
||||||
* If the list doesn't support recommended versions, this works exactly as getLatestStable
|
* If the list doesn't support recommended versions, this works exactly as getLatestStable
|
||||||
*/
|
*/
|
||||||
virtual BaseVersionPtr getRecommended() const;
|
virtual BaseVersion::Ptr getRecommended() const;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Sorts the version list.
|
* Sorts the version list.
|
||||||
@ -117,5 +117,5 @@ slots:
|
|||||||
* then copies the versions and sets their parents correctly.
|
* then copies the versions and sets their parents correctly.
|
||||||
* \param versions List of versions whose parents should be set.
|
* \param versions List of versions whose parents should be set.
|
||||||
*/
|
*/
|
||||||
virtual void updateListData(QList<BaseVersionPtr> versions) = 0;
|
virtual void updateListData(QList<BaseVersion::Ptr> versions) = 0;
|
||||||
};
|
};
|
||||||
|
@ -24,8 +24,8 @@ set(CORE_SOURCES
|
|||||||
NullInstance.h
|
NullInstance.h
|
||||||
MMCZip.h
|
MMCZip.h
|
||||||
MMCZip.cpp
|
MMCZip.cpp
|
||||||
MMCStrings.h
|
StringUtils.h
|
||||||
MMCStrings.cpp
|
StringUtils.cpp
|
||||||
RuntimeContext.h
|
RuntimeContext.h
|
||||||
|
|
||||||
# Basic instance manipulation tasks (derived from InstanceTask)
|
# Basic instance manipulation tasks (derived from InstanceTask)
|
||||||
|
@ -44,7 +44,9 @@
|
|||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
|
||||||
#include "DesktopServices.h"
|
#include "DesktopServices.h"
|
||||||
|
#include "StringUtils.h"
|
||||||
|
|
||||||
#if defined Q_OS_WIN32
|
#if defined Q_OS_WIN32
|
||||||
#include <objbase.h>
|
#include <objbase.h>
|
||||||
@ -79,22 +81,6 @@ namespace fs = std::filesystem;
|
|||||||
namespace fs = ghc::filesystem;
|
namespace fs = ghc::filesystem;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined Q_OS_WIN32
|
|
||||||
|
|
||||||
std::wstring toStdString(QString s)
|
|
||||||
{
|
|
||||||
return s.toStdWString();
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
std::string toStdString(QString s)
|
|
||||||
{
|
|
||||||
return s.toStdString();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace FS {
|
namespace FS {
|
||||||
|
|
||||||
void ensureExists(const QDir& dir)
|
void ensureExists(const QDir& dir)
|
||||||
@ -191,7 +177,7 @@ bool copy::operator()(const QString& offset)
|
|||||||
auto dst_path = PathCombine(dst, relative_dst_path);
|
auto dst_path = PathCombine(dst, relative_dst_path);
|
||||||
ensureFilePathExists(dst_path);
|
ensureFilePathExists(dst_path);
|
||||||
|
|
||||||
fs::copy(toStdString(src_path), toStdString(dst_path), opt, err);
|
fs::copy(StringUtils::toStdString(src_path), StringUtils::toStdString(dst_path), opt, err);
|
||||||
if (err) {
|
if (err) {
|
||||||
qWarning() << "Failed to copy files:" << QString::fromStdString(err.message());
|
qWarning() << "Failed to copy files:" << QString::fromStdString(err.message());
|
||||||
qDebug() << "Source file:" << src_path;
|
qDebug() << "Source file:" << src_path;
|
||||||
@ -213,7 +199,7 @@ bool copy::operator()(const QString& offset)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If the root src is not a directory, the previous iterator won't run.
|
// If the root src is not a directory, the previous iterator won't run.
|
||||||
if (!fs::is_directory(toStdString(src)))
|
if (!fs::is_directory(StringUtils::toStdString(src)))
|
||||||
copy_file(src, "");
|
copy_file(src, "");
|
||||||
|
|
||||||
return err.value() == 0;
|
return err.value() == 0;
|
||||||
@ -223,7 +209,7 @@ bool deletePath(QString path)
|
|||||||
{
|
{
|
||||||
std::error_code err;
|
std::error_code err;
|
||||||
|
|
||||||
fs::remove_all(toStdString(path), err);
|
fs::remove_all(StringUtils::toStdString(path), err);
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
qWarning() << "Failed to remove files:" << QString::fromStdString(err.message());
|
qWarning() << "Failed to remove files:" << QString::fromStdString(err.message());
|
||||||
@ -414,7 +400,7 @@ bool overrideFolder(QString overwritten_path, QString override_path)
|
|||||||
fs::copy_options opt = copy_opts::recursive | copy_opts::overwrite_existing;
|
fs::copy_options opt = copy_opts::recursive | copy_opts::overwrite_existing;
|
||||||
|
|
||||||
// FIXME: hello traveller! Apparently std::copy does NOT overwrite existing files on GNU libstdc++ on Windows?
|
// FIXME: hello traveller! Apparently std::copy does NOT overwrite existing files on GNU libstdc++ on Windows?
|
||||||
fs::copy(toStdString(override_path), toStdString(overwritten_path), opt, err);
|
fs::copy(StringUtils::toStdString(override_path), StringUtils::toStdString(overwritten_path), opt, err);
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
qCritical() << QString("Failed to apply override from %1 to %2").arg(override_path, overwritten_path);
|
qCritical() << QString("Failed to apply override from %1 to %2").arg(override_path, overwritten_path);
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
#include "JavaCommon.h"
|
#include "JavaCommon.h"
|
||||||
#include "java/JavaUtils.h"
|
#include "java/JavaUtils.h"
|
||||||
#include "ui/dialogs/CustomMessageBox.h"
|
#include "ui/dialogs/CustomMessageBox.h"
|
||||||
#include <MMCStrings.h>
|
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
|
||||||
bool JavaCommon::checkJVMArgs(QString jvmargs, QWidget *parent)
|
bool JavaCommon::checkJVMArgs(QString jvmargs, QWidget *parent)
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <QString>
|
|
||||||
|
|
||||||
namespace Strings
|
|
||||||
{
|
|
||||||
int naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs);
|
|
||||||
}
|
|
@ -1,4 +1,6 @@
|
|||||||
#include "MMCStrings.h"
|
#include "StringUtils.h"
|
||||||
|
|
||||||
|
/// If you're wondering where these came from exactly, then know you're not the only one =D
|
||||||
|
|
||||||
/// TAKEN FROM Qt, because it doesn't expose it intelligently
|
/// TAKEN FROM Qt, because it doesn't expose it intelligently
|
||||||
static inline QChar getNextChar(const QString& s, int location)
|
static inline QChar getNextChar(const QString& s, int location)
|
||||||
@ -7,20 +9,20 @@ static inline QChar getNextChar(const QString &s, int location)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// TAKEN FROM Qt, because it doesn't expose it intelligently
|
/// TAKEN FROM Qt, because it doesn't expose it intelligently
|
||||||
int Strings::naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs)
|
int StringUtils::naturalCompare(const QString& s1, const QString& s2, Qt::CaseSensitivity cs)
|
||||||
{
|
|
||||||
for (int l1 = 0, l2 = 0; l1 <= s1.count() && l2 <= s2.count(); ++l1, ++l2)
|
|
||||||
{
|
{
|
||||||
|
int l1 = 0, l2 = 0;
|
||||||
|
while (l1 <= s1.count() && l2 <= s2.count()) {
|
||||||
// skip spaces, tabs and 0's
|
// skip spaces, tabs and 0's
|
||||||
QChar c1 = getNextChar(s1, l1);
|
QChar c1 = getNextChar(s1, l1);
|
||||||
while (c1.isSpace())
|
while (c1.isSpace())
|
||||||
c1 = getNextChar(s1, ++l1);
|
c1 = getNextChar(s1, ++l1);
|
||||||
|
|
||||||
QChar c2 = getNextChar(s2, l2);
|
QChar c2 = getNextChar(s2, l2);
|
||||||
while (c2.isSpace())
|
while (c2.isSpace())
|
||||||
c2 = getNextChar(s2, ++l2);
|
c2 = getNextChar(s2, ++l2);
|
||||||
|
|
||||||
if (c1.isDigit() && c2.isDigit())
|
if (c1.isDigit() && c2.isDigit()) {
|
||||||
{
|
|
||||||
while (c1.digitValue() == 0)
|
while (c1.digitValue() == 0)
|
||||||
c1 = getNextChar(s1, ++l1);
|
c1 = getNextChar(s1, ++l1);
|
||||||
while (c2.digitValue() == 0)
|
while (c2.digitValue() == 0)
|
||||||
@ -30,11 +32,8 @@ int Strings::naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensit
|
|||||||
int lookAheadLocation2 = l2;
|
int lookAheadLocation2 = l2;
|
||||||
int currentReturnValue = 0;
|
int currentReturnValue = 0;
|
||||||
// find the last digit, setting currentReturnValue as we go if it isn't equal
|
// find the last digit, setting currentReturnValue as we go if it isn't equal
|
||||||
for (QChar lookAhead1 = c1, lookAhead2 = c2;
|
for (QChar lookAhead1 = c1, lookAhead2 = c2; (lookAheadLocation1 <= s1.length() && lookAheadLocation2 <= s2.length());
|
||||||
(lookAheadLocation1 <= s1.length() && lookAheadLocation2 <= s2.length());
|
lookAhead1 = getNextChar(s1, ++lookAheadLocation1), lookAhead2 = getNextChar(s2, ++lookAheadLocation2)) {
|
||||||
lookAhead1 = getNextChar(s1, ++lookAheadLocation1),
|
|
||||||
lookAhead2 = getNextChar(s2, ++lookAheadLocation2))
|
|
||||||
{
|
|
||||||
bool is1ADigit = !lookAhead1.isNull() && lookAhead1.isDigit();
|
bool is1ADigit = !lookAhead1.isNull() && lookAhead1.isDigit();
|
||||||
bool is2ADigit = !lookAhead2.isNull() && lookAhead2.isDigit();
|
bool is2ADigit = !lookAhead2.isNull() && lookAhead2.isDigit();
|
||||||
if (!is1ADigit && !is2ADigit)
|
if (!is1ADigit && !is2ADigit)
|
||||||
@ -43,14 +42,10 @@ int Strings::naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensit
|
|||||||
return -1;
|
return -1;
|
||||||
if (!is2ADigit)
|
if (!is2ADigit)
|
||||||
return 1;
|
return 1;
|
||||||
if (currentReturnValue == 0)
|
if (currentReturnValue == 0) {
|
||||||
{
|
if (lookAhead1 < lookAhead2) {
|
||||||
if (lookAhead1 < lookAhead2)
|
|
||||||
{
|
|
||||||
currentReturnValue = -1;
|
currentReturnValue = -1;
|
||||||
}
|
} else if (lookAhead1 > lookAhead2) {
|
||||||
else if (lookAhead1 > lookAhead2)
|
|
||||||
{
|
|
||||||
currentReturnValue = 1;
|
currentReturnValue = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,19 +53,24 @@ int Strings::naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensit
|
|||||||
if (currentReturnValue != 0)
|
if (currentReturnValue != 0)
|
||||||
return currentReturnValue;
|
return currentReturnValue;
|
||||||
}
|
}
|
||||||
if (cs == Qt::CaseInsensitive)
|
|
||||||
{
|
if (cs == Qt::CaseInsensitive) {
|
||||||
if (!c1.isLower())
|
if (!c1.isLower())
|
||||||
c1 = c1.toLower();
|
c1 = c1.toLower();
|
||||||
if (!c2.isLower())
|
if (!c2.isLower())
|
||||||
c2 = c2.toLower();
|
c2 = c2.toLower();
|
||||||
}
|
}
|
||||||
|
|
||||||
int r = QString::localeAwareCompare(c1, c2);
|
int r = QString::localeAwareCompare(c1, c2);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return -1;
|
return -1;
|
||||||
if (r > 0)
|
if (r > 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
l1 += 1;
|
||||||
|
l2 += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The two strings are the same (02 == 2) so fall back to the normal sort
|
// The two strings are the same (02 == 2) so fall back to the normal sort
|
||||||
return QString::compare(s1, s2, cs);
|
return QString::compare(s1, s2, cs);
|
||||||
}
|
}
|
32
launcher/StringUtils.h
Normal file
32
launcher/StringUtils.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
namespace StringUtils {
|
||||||
|
|
||||||
|
#if defined Q_OS_WIN32
|
||||||
|
using string = std::wstring;
|
||||||
|
|
||||||
|
inline string toStdString(QString s)
|
||||||
|
{
|
||||||
|
return s.toStdWString();
|
||||||
|
}
|
||||||
|
inline QString fromStdString(string s)
|
||||||
|
{
|
||||||
|
return QString::fromStdWString(s);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
using string = std::string;
|
||||||
|
|
||||||
|
inline string toStdString(QString s)
|
||||||
|
{
|
||||||
|
return s.toStdString();
|
||||||
|
}
|
||||||
|
inline QString fromStdString(string s)
|
||||||
|
{
|
||||||
|
return QString::fromStdString(s);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int naturalCompare(const QString& s1, const QString& s2, Qt::CaseSensitivity cs);
|
||||||
|
} // namespace StringUtils
|
@ -1,9 +1,10 @@
|
|||||||
#include "JavaInstall.h"
|
#include "JavaInstall.h"
|
||||||
#include <MMCStrings.h>
|
|
||||||
|
#include "StringUtils.h"
|
||||||
|
|
||||||
bool JavaInstall::operator<(const JavaInstall &rhs)
|
bool JavaInstall::operator<(const JavaInstall &rhs)
|
||||||
{
|
{
|
||||||
auto archCompare = Strings::naturalCompare(arch, rhs.arch, Qt::CaseInsensitive);
|
auto archCompare = StringUtils::naturalCompare(arch, rhs.arch, Qt::CaseInsensitive);
|
||||||
if(archCompare != 0)
|
if(archCompare != 0)
|
||||||
return archCompare < 0;
|
return archCompare < 0;
|
||||||
if(id < rhs.id)
|
if(id < rhs.id)
|
||||||
@ -14,7 +15,7 @@ bool JavaInstall::operator<(const JavaInstall &rhs)
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return Strings::naturalCompare(path, rhs.path, Qt::CaseInsensitive) < 0;
|
return StringUtils::naturalCompare(path, rhs.path, Qt::CaseInsensitive) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JavaInstall::operator==(const JavaInstall &rhs)
|
bool JavaInstall::operator==(const JavaInstall &rhs)
|
||||||
|
@ -41,7 +41,6 @@
|
|||||||
#include "java/JavaInstallList.h"
|
#include "java/JavaInstallList.h"
|
||||||
#include "java/JavaCheckerJob.h"
|
#include "java/JavaCheckerJob.h"
|
||||||
#include "java/JavaUtils.h"
|
#include "java/JavaUtils.h"
|
||||||
#include "MMCStrings.h"
|
|
||||||
#include "minecraft/VersionFilterData.h"
|
#include "minecraft/VersionFilterData.h"
|
||||||
|
|
||||||
JavaInstallList::JavaInstallList(QObject *parent) : BaseVersionList(parent)
|
JavaInstallList::JavaInstallList(QObject *parent) : BaseVersionList(parent)
|
||||||
@ -73,7 +72,7 @@ void JavaInstallList::load()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const BaseVersionPtr JavaInstallList::at(int i) const
|
const BaseVersion::Ptr JavaInstallList::at(int i) const
|
||||||
{
|
{
|
||||||
return m_vlist.at(i);
|
return m_vlist.at(i);
|
||||||
}
|
}
|
||||||
@ -122,7 +121,7 @@ BaseVersionList::RoleList JavaInstallList::providesRoles() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void JavaInstallList::updateListData(QList<BaseVersionPtr> versions)
|
void JavaInstallList::updateListData(QList<BaseVersion::Ptr> versions)
|
||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
m_vlist = versions;
|
m_vlist = versions;
|
||||||
@ -137,7 +136,7 @@ void JavaInstallList::updateListData(QList<BaseVersionPtr> versions)
|
|||||||
m_loadTask.reset();
|
m_loadTask.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sortJavas(BaseVersionPtr left, BaseVersionPtr right)
|
bool sortJavas(BaseVersion::Ptr left, BaseVersion::Ptr right)
|
||||||
{
|
{
|
||||||
auto rleft = std::dynamic_pointer_cast<JavaInstall>(right);
|
auto rleft = std::dynamic_pointer_cast<JavaInstall>(right);
|
||||||
auto rright = std::dynamic_pointer_cast<JavaInstall>(left);
|
auto rright = std::dynamic_pointer_cast<JavaInstall>(left);
|
||||||
@ -210,11 +209,11 @@ void JavaListLoadTask::javaCheckerFinished()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<BaseVersionPtr> javas_bvp;
|
QList<BaseVersion::Ptr> javas_bvp;
|
||||||
for (auto java : candidates)
|
for (auto java : candidates)
|
||||||
{
|
{
|
||||||
//qDebug() << java->id << java->arch << " at " << java->path;
|
//qDebug() << java->id << java->arch << " at " << java->path;
|
||||||
BaseVersionPtr bp_java = std::dynamic_pointer_cast<BaseVersion>(java);
|
BaseVersion::Ptr bp_java = std::dynamic_pointer_cast<BaseVersion>(java);
|
||||||
|
|
||||||
if (bp_java)
|
if (bp_java)
|
||||||
{
|
{
|
||||||
|
@ -42,7 +42,7 @@ public:
|
|||||||
|
|
||||||
Task::Ptr getLoadTask() override;
|
Task::Ptr getLoadTask() override;
|
||||||
bool isLoaded() override;
|
bool isLoaded() override;
|
||||||
const BaseVersionPtr at(int i) const override;
|
const BaseVersion::Ptr at(int i) const override;
|
||||||
int count() const override;
|
int count() const override;
|
||||||
void sortVersions() override;
|
void sortVersions() override;
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ public:
|
|||||||
RoleList providesRoles() const override;
|
RoleList providesRoles() const override;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void updateListData(QList<BaseVersionPtr> versions) override;
|
void updateListData(QList<BaseVersion::Ptr> versions) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void load();
|
void load();
|
||||||
@ -59,7 +59,7 @@ protected:
|
|||||||
protected:
|
protected:
|
||||||
Status m_status = Status::NotDone;
|
Status m_status = Status::NotDone;
|
||||||
shared_qobject_ptr<JavaListLoadTask> m_loadTask;
|
shared_qobject_ptr<JavaListLoadTask> m_loadTask;
|
||||||
QList<BaseVersionPtr> m_vlist;
|
QList<BaseVersion::Ptr> m_vlist;
|
||||||
};
|
};
|
||||||
|
|
||||||
class JavaListLoadTask : public Task
|
class JavaListLoadTask : public Task
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include "JavaVersion.h"
|
#include "JavaVersion.h"
|
||||||
#include <MMCStrings.h>
|
|
||||||
|
#include "StringUtils.h"
|
||||||
|
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
@ -98,12 +99,12 @@ bool JavaVersion::operator<(const JavaVersion &rhs)
|
|||||||
else if(thisPre && rhsPre)
|
else if(thisPre && rhsPre)
|
||||||
{
|
{
|
||||||
// both are prereleases - use natural compare...
|
// both are prereleases - use natural compare...
|
||||||
return Strings::naturalCompare(m_prerelease, rhs.m_prerelease, Qt::CaseSensitive) < 0;
|
return StringUtils::naturalCompare(m_prerelease, rhs.m_prerelease, Qt::CaseSensitive) < 0;
|
||||||
}
|
}
|
||||||
// neither is prerelease, so they are the same -> this cannot be less than rhs
|
// neither is prerelease, so they are the same -> this cannot be less than rhs
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else return Strings::naturalCompare(m_string, rhs.m_string, Qt::CaseSensitive) < 0;
|
else return StringUtils::naturalCompare(m_string, rhs.m_string, Qt::CaseSensitive) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JavaVersion::operator==(const JavaVersion &rhs)
|
bool JavaVersion::operator==(const JavaVersion &rhs)
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
|
|
||||||
#include "launch/LaunchTask.h"
|
#include "launch/LaunchTask.h"
|
||||||
#include "MessageLevel.h"
|
#include "MessageLevel.h"
|
||||||
#include "MMCStrings.h"
|
|
||||||
#include "java/JavaChecker.h"
|
#include "java/JavaChecker.h"
|
||||||
#include "tasks/Task.h"
|
#include "tasks/Task.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
@ -90,5 +90,7 @@ int main(int argc, char *argv[])
|
|||||||
return 1;
|
return 1;
|
||||||
case Application::Succeeded:
|
case Application::Succeeded:
|
||||||
return 0;
|
return 0;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ Index::Index(QObject *parent)
|
|||||||
: QAbstractListModel(parent)
|
: QAbstractListModel(parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
Index::Index(const QVector<VersionListPtr> &lists, QObject *parent)
|
Index::Index(const QVector<VersionList::Ptr> &lists, QObject *parent)
|
||||||
: QAbstractListModel(parent), m_lists(lists)
|
: QAbstractListModel(parent), m_lists(lists)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < m_lists.size(); ++i)
|
for (int i = 0; i < m_lists.size(); ++i)
|
||||||
@ -41,7 +41,7 @@ QVariant Index::data(const QModelIndex &index, int role) const
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionListPtr list = m_lists.at(index.row());
|
VersionList::Ptr list = m_lists.at(index.row());
|
||||||
switch (role)
|
switch (role)
|
||||||
{
|
{
|
||||||
case Qt::DisplayRole:
|
case Qt::DisplayRole:
|
||||||
@ -81,9 +81,9 @@ bool Index::hasUid(const QString &uid) const
|
|||||||
return m_uids.contains(uid);
|
return m_uids.contains(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionListPtr Index::get(const QString &uid)
|
VersionList::Ptr Index::get(const QString &uid)
|
||||||
{
|
{
|
||||||
VersionListPtr out = m_uids.value(uid, nullptr);
|
VersionList::Ptr out = m_uids.value(uid, nullptr);
|
||||||
if(!out)
|
if(!out)
|
||||||
{
|
{
|
||||||
out = std::make_shared<VersionList>(uid);
|
out = std::make_shared<VersionList>(uid);
|
||||||
@ -92,7 +92,7 @@ VersionListPtr Index::get(const QString &uid)
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionPtr Index::get(const QString &uid, const QString &version)
|
Version::Ptr Index::get(const QString &uid, const QString &version)
|
||||||
{
|
{
|
||||||
auto list = get(uid);
|
auto list = get(uid);
|
||||||
return list->getVersion(version);
|
return list->getVersion(version);
|
||||||
@ -105,7 +105,7 @@ void Index::parse(const QJsonObject& obj)
|
|||||||
|
|
||||||
void Index::merge(const std::shared_ptr<Index> &other)
|
void Index::merge(const std::shared_ptr<Index> &other)
|
||||||
{
|
{
|
||||||
const QVector<VersionListPtr> lists = std::dynamic_pointer_cast<Index>(other)->m_lists;
|
const QVector<VersionList::Ptr> lists = std::dynamic_pointer_cast<Index>(other)->m_lists;
|
||||||
// initial load, no need to merge
|
// initial load, no need to merge
|
||||||
if (m_lists.isEmpty())
|
if (m_lists.isEmpty())
|
||||||
{
|
{
|
||||||
@ -120,7 +120,7 @@ void Index::merge(const std::shared_ptr<Index> &other)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (const VersionListPtr &list : lists)
|
for (const VersionList::Ptr &list : lists)
|
||||||
{
|
{
|
||||||
if (m_uids.contains(list->uid()))
|
if (m_uids.contains(list->uid()))
|
||||||
{
|
{
|
||||||
@ -138,7 +138,7 @@ void Index::merge(const std::shared_ptr<Index> &other)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Index::connectVersionList(const int row, const VersionListPtr &list)
|
void Index::connectVersionList(const int row, const VersionList::Ptr &list)
|
||||||
{
|
{
|
||||||
connect(list.get(), &VersionList::nameChanged, this, [this, row]()
|
connect(list.get(), &VersionList::nameChanged, this, [this, row]()
|
||||||
{
|
{
|
||||||
|
@ -19,20 +19,19 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#include "BaseEntity.h"
|
#include "BaseEntity.h"
|
||||||
|
#include "meta/VersionList.h"
|
||||||
|
|
||||||
class Task;
|
class Task;
|
||||||
|
|
||||||
namespace Meta
|
namespace Meta
|
||||||
{
|
{
|
||||||
using VersionListPtr = std::shared_ptr<class VersionList>;
|
|
||||||
using VersionPtr = std::shared_ptr<class Version>;
|
|
||||||
|
|
||||||
class Index : public QAbstractListModel, public BaseEntity
|
class Index : public QAbstractListModel, public BaseEntity
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit Index(QObject *parent = nullptr);
|
explicit Index(QObject *parent = nullptr);
|
||||||
explicit Index(const QVector<VersionListPtr> &lists, QObject *parent = nullptr);
|
explicit Index(const QVector<VersionList::Ptr> &lists, QObject *parent = nullptr);
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -49,21 +48,21 @@ public:
|
|||||||
QString localFilename() const override { return "index.json"; }
|
QString localFilename() const override { return "index.json"; }
|
||||||
|
|
||||||
// queries
|
// queries
|
||||||
VersionListPtr get(const QString &uid);
|
VersionList::Ptr get(const QString &uid);
|
||||||
VersionPtr get(const QString &uid, const QString &version);
|
Version::Ptr get(const QString &uid, const QString &version);
|
||||||
bool hasUid(const QString &uid) const;
|
bool hasUid(const QString &uid) const;
|
||||||
|
|
||||||
QVector<VersionListPtr> lists() const { return m_lists; }
|
QVector<VersionList::Ptr> lists() const { return m_lists; }
|
||||||
|
|
||||||
public: // for usage by parsers only
|
public: // for usage by parsers only
|
||||||
void merge(const std::shared_ptr<Index> &other);
|
void merge(const std::shared_ptr<Index> &other);
|
||||||
void parse(const QJsonObject &obj) override;
|
void parse(const QJsonObject &obj) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVector<VersionListPtr> m_lists;
|
QVector<VersionList::Ptr> m_lists;
|
||||||
QHash<QString, VersionListPtr> m_uids;
|
QHash<QString, VersionList::Ptr> m_uids;
|
||||||
|
|
||||||
void connectVersionList(const int row, const VersionListPtr &list);
|
void connectVersionList(const int row, const VersionList::Ptr &list);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,11 +37,11 @@ MetadataVersion currentFormatVersion()
|
|||||||
static std::shared_ptr<Index> parseIndexInternal(const QJsonObject &obj)
|
static std::shared_ptr<Index> parseIndexInternal(const QJsonObject &obj)
|
||||||
{
|
{
|
||||||
const QVector<QJsonObject> objects = requireIsArrayOf<QJsonObject>(obj, "packages");
|
const QVector<QJsonObject> objects = requireIsArrayOf<QJsonObject>(obj, "packages");
|
||||||
QVector<VersionListPtr> lists;
|
QVector<VersionList::Ptr> lists;
|
||||||
lists.reserve(objects.size());
|
lists.reserve(objects.size());
|
||||||
std::transform(objects.begin(), objects.end(), std::back_inserter(lists), [](const QJsonObject &obj)
|
std::transform(objects.begin(), objects.end(), std::back_inserter(lists), [](const QJsonObject &obj)
|
||||||
{
|
{
|
||||||
VersionListPtr list = std::make_shared<VersionList>(requireString(obj, "uid"));
|
VersionList::Ptr list = std::make_shared<VersionList>(requireString(obj, "uid"));
|
||||||
list->setName(ensureString(obj, "name", QString()));
|
list->setName(ensureString(obj, "name", QString()));
|
||||||
return list;
|
return list;
|
||||||
});
|
});
|
||||||
@ -49,9 +49,9 @@ static std::shared_ptr<Index> parseIndexInternal(const QJsonObject &obj)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Version
|
// Version
|
||||||
static VersionPtr parseCommonVersion(const QString &uid, const QJsonObject &obj)
|
static Version::Ptr parseCommonVersion(const QString &uid, const QJsonObject &obj)
|
||||||
{
|
{
|
||||||
VersionPtr version = std::make_shared<Version>(uid, requireString(obj, "version"));
|
Version::Ptr version = std::make_shared<Version>(uid, requireString(obj, "version"));
|
||||||
version->setTime(QDateTime::fromString(requireString(obj, "releaseTime"), Qt::ISODate).toMSecsSinceEpoch() / 1000);
|
version->setTime(QDateTime::fromString(requireString(obj, "releaseTime"), Qt::ISODate).toMSecsSinceEpoch() / 1000);
|
||||||
version->setType(ensureString(obj, "type", QString()));
|
version->setType(ensureString(obj, "type", QString()));
|
||||||
version->setRecommended(ensureBoolean(obj, QString("recommended"), false));
|
version->setRecommended(ensureBoolean(obj, QString("recommended"), false));
|
||||||
@ -63,9 +63,9 @@ static VersionPtr parseCommonVersion(const QString &uid, const QJsonObject &obj)
|
|||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::shared_ptr<Version> parseVersionInternal(const QJsonObject &obj)
|
static Version::Ptr parseVersionInternal(const QJsonObject &obj)
|
||||||
{
|
{
|
||||||
VersionPtr version = parseCommonVersion(requireString(obj, "uid"), obj);
|
Version::Ptr version = parseCommonVersion(requireString(obj, "uid"), obj);
|
||||||
|
|
||||||
version->setData(OneSixVersionFormat::versionFileFromJson(QJsonDocument(obj),
|
version->setData(OneSixVersionFormat::versionFileFromJson(QJsonDocument(obj),
|
||||||
QString("%1/%2.json").arg(version->uid(), version->version()),
|
QString("%1/%2.json").arg(version->uid(), version->version()),
|
||||||
@ -74,12 +74,12 @@ static std::shared_ptr<Version> parseVersionInternal(const QJsonObject &obj)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Version list / package
|
// Version list / package
|
||||||
static std::shared_ptr<VersionList> parseVersionListInternal(const QJsonObject &obj)
|
static VersionList::Ptr parseVersionListInternal(const QJsonObject &obj)
|
||||||
{
|
{
|
||||||
const QString uid = requireString(obj, "uid");
|
const QString uid = requireString(obj, "uid");
|
||||||
|
|
||||||
const QVector<QJsonObject> versionsRaw = requireIsArrayOf<QJsonObject>(obj, "versions");
|
const QVector<QJsonObject> versionsRaw = requireIsArrayOf<QJsonObject>(obj, "versions");
|
||||||
QVector<VersionPtr> versions;
|
QVector<Version::Ptr> versions;
|
||||||
versions.reserve(versionsRaw.size());
|
versions.reserve(versionsRaw.size());
|
||||||
std::transform(versionsRaw.begin(), versionsRaw.end(), std::back_inserter(versions), [uid](const QJsonObject &vObj)
|
std::transform(versionsRaw.begin(), versionsRaw.end(), std::back_inserter(versions), [uid](const QJsonObject &vObj)
|
||||||
{
|
{
|
||||||
@ -88,7 +88,7 @@ static std::shared_ptr<VersionList> parseVersionListInternal(const QJsonObject &
|
|||||||
return version;
|
return version;
|
||||||
});
|
});
|
||||||
|
|
||||||
VersionListPtr list = std::make_shared<VersionList>(uid);
|
VersionList::Ptr list = std::make_shared<VersionList>(uid);
|
||||||
list->setName(ensureString(obj, "name", QString()));
|
list->setName(ensureString(obj, "name", QString()));
|
||||||
list->setVersions(versions);
|
list->setVersions(versions);
|
||||||
return list;
|
return list;
|
||||||
|
@ -54,7 +54,7 @@ void Meta::Version::parse(const QJsonObject& obj)
|
|||||||
parseVersion(obj, this);
|
parseVersion(obj, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Meta::Version::mergeFromList(const Meta::VersionPtr& other)
|
void Meta::Version::mergeFromList(const Meta::Version::Ptr& other)
|
||||||
{
|
{
|
||||||
if(other->m_providesRecommendations)
|
if(other->m_providesRecommendations)
|
||||||
{
|
{
|
||||||
@ -85,7 +85,7 @@ void Meta::Version::mergeFromList(const Meta::VersionPtr& other)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Meta::Version::merge(const VersionPtr &other)
|
void Meta::Version::merge(const Version::Ptr &other)
|
||||||
{
|
{
|
||||||
mergeFromList(other);
|
mergeFromList(other);
|
||||||
if(other->m_data)
|
if(other->m_data)
|
||||||
|
@ -30,13 +30,14 @@
|
|||||||
|
|
||||||
namespace Meta
|
namespace Meta
|
||||||
{
|
{
|
||||||
using VersionPtr = std::shared_ptr<class Version>;
|
|
||||||
|
|
||||||
class Version : public QObject, public BaseVersion, public BaseEntity
|
class Version : public QObject, public BaseVersion, public BaseEntity
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public: /* con/des */
|
public:
|
||||||
|
using Ptr = std::shared_ptr<Version>;
|
||||||
|
|
||||||
explicit Version(const QString &uid, const QString &version);
|
explicit Version(const QString &uid, const QString &version);
|
||||||
virtual ~Version();
|
virtual ~Version();
|
||||||
|
|
||||||
@ -78,8 +79,8 @@ public: /* con/des */
|
|||||||
return m_data != nullptr;
|
return m_data != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void merge(const VersionPtr &other);
|
void merge(const Version::Ptr &other);
|
||||||
void mergeFromList(const VersionPtr &other);
|
void mergeFromList(const Version::Ptr &other);
|
||||||
void parse(const QJsonObject &obj) override;
|
void parse(const QJsonObject &obj) override;
|
||||||
|
|
||||||
QString localFilename() const override;
|
QString localFilename() const override;
|
||||||
@ -113,4 +114,4 @@ private:
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(Meta::VersionPtr)
|
Q_DECLARE_METATYPE(Meta::Version::Ptr)
|
||||||
|
@ -40,7 +40,7 @@ bool VersionList::isLoaded()
|
|||||||
return BaseEntity::isLoaded();
|
return BaseEntity::isLoaded();
|
||||||
}
|
}
|
||||||
|
|
||||||
const BaseVersionPtr VersionList::at(int i) const
|
const BaseVersion::Ptr VersionList::at(int i) const
|
||||||
{
|
{
|
||||||
return m_versions.at(i);
|
return m_versions.at(i);
|
||||||
}
|
}
|
||||||
@ -52,7 +52,7 @@ int VersionList::count() const
|
|||||||
void VersionList::sortVersions()
|
void VersionList::sortVersions()
|
||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
std::sort(m_versions.begin(), m_versions.end(), [](const VersionPtr &a, const VersionPtr &b)
|
std::sort(m_versions.begin(), m_versions.end(), [](const Version::Ptr &a, const Version::Ptr &b)
|
||||||
{
|
{
|
||||||
return *a.get() < *b.get();
|
return *a.get() < *b.get();
|
||||||
});
|
});
|
||||||
@ -66,7 +66,7 @@ QVariant VersionList::data(const QModelIndex &index, int role) const
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionPtr version = m_versions.at(index.row());
|
Version::Ptr version = m_versions.at(index.row());
|
||||||
|
|
||||||
switch (role)
|
switch (role)
|
||||||
{
|
{
|
||||||
@ -129,9 +129,9 @@ QString VersionList::humanReadable() const
|
|||||||
return m_name.isEmpty() ? m_uid : m_name;
|
return m_name.isEmpty() ? m_uid : m_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
VersionPtr VersionList::getVersion(const QString &version)
|
Version::Ptr VersionList::getVersion(const QString &version)
|
||||||
{
|
{
|
||||||
VersionPtr out = m_lookup.value(version, nullptr);
|
Version::Ptr out = m_lookup.value(version, nullptr);
|
||||||
if(!out)
|
if(!out)
|
||||||
{
|
{
|
||||||
out = std::make_shared<Version>(m_uid, version);
|
out = std::make_shared<Version>(m_uid, version);
|
||||||
@ -143,7 +143,7 @@ VersionPtr VersionList::getVersion(const QString &version)
|
|||||||
bool VersionList::hasVersion(QString version) const
|
bool VersionList::hasVersion(QString version) const
|
||||||
{
|
{
|
||||||
auto ver = std::find_if(m_versions.constBegin(), m_versions.constEnd(),
|
auto ver = std::find_if(m_versions.constBegin(), m_versions.constEnd(),
|
||||||
[&](Meta::VersionPtr const& a){ return a->version() == version; });
|
[&](Meta::Version::Ptr const& a){ return a->version() == version; });
|
||||||
return (ver != m_versions.constEnd());
|
return (ver != m_versions.constEnd());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,11 +153,11 @@ void VersionList::setName(const QString &name)
|
|||||||
emit nameChanged(name);
|
emit nameChanged(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VersionList::setVersions(const QVector<VersionPtr> &versions)
|
void VersionList::setVersions(const QVector<Version::Ptr> &versions)
|
||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
m_versions = versions;
|
m_versions = versions;
|
||||||
std::sort(m_versions.begin(), m_versions.end(), [](const VersionPtr &a, const VersionPtr &b)
|
std::sort(m_versions.begin(), m_versions.end(), [](const Version::Ptr &a, const Version::Ptr &b)
|
||||||
{
|
{
|
||||||
return a->rawTime() > b->rawTime();
|
return a->rawTime() > b->rawTime();
|
||||||
});
|
});
|
||||||
@ -168,7 +168,7 @@ void VersionList::setVersions(const QVector<VersionPtr> &versions)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: this is dumb, we have 'recommended' as part of the metadata already...
|
// FIXME: this is dumb, we have 'recommended' as part of the metadata already...
|
||||||
auto recommendedIt = std::find_if(m_versions.constBegin(), m_versions.constEnd(), [](const VersionPtr &ptr) { return ptr->type() == "release"; });
|
auto recommendedIt = std::find_if(m_versions.constBegin(), m_versions.constEnd(), [](const Version::Ptr &ptr) { return ptr->type() == "release"; });
|
||||||
m_recommended = recommendedIt == m_versions.constEnd() ? nullptr : *recommendedIt;
|
m_recommended = recommendedIt == m_versions.constEnd() ? nullptr : *recommendedIt;
|
||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
@ -179,7 +179,7 @@ void VersionList::parse(const QJsonObject& obj)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: this is dumb, we have 'recommended' as part of the metadata already...
|
// FIXME: this is dumb, we have 'recommended' as part of the metadata already...
|
||||||
static const Meta::VersionPtr &getBetterVersion(const Meta::VersionPtr &a, const Meta::VersionPtr &b)
|
static const Meta::Version::Ptr &getBetterVersion(const Meta::Version::Ptr &a, const Meta::Version::Ptr &b)
|
||||||
{
|
{
|
||||||
if(!a)
|
if(!a)
|
||||||
return b;
|
return b;
|
||||||
@ -194,7 +194,7 @@ static const Meta::VersionPtr &getBetterVersion(const Meta::VersionPtr &a, const
|
|||||||
return (a->type() == "release" ? a : b);
|
return (a->type() == "release" ? a : b);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VersionList::mergeFromIndex(const VersionListPtr &other)
|
void VersionList::mergeFromIndex(const VersionList::Ptr &other)
|
||||||
{
|
{
|
||||||
if (m_name != other->m_name)
|
if (m_name != other->m_name)
|
||||||
{
|
{
|
||||||
@ -202,7 +202,7 @@ void VersionList::mergeFromIndex(const VersionListPtr &other)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VersionList::merge(const VersionListPtr &other)
|
void VersionList::merge(const VersionList::Ptr &other)
|
||||||
{
|
{
|
||||||
if (m_name != other->m_name)
|
if (m_name != other->m_name)
|
||||||
{
|
{
|
||||||
@ -216,7 +216,7 @@ void VersionList::merge(const VersionListPtr &other)
|
|||||||
{
|
{
|
||||||
qWarning() << "Empty list loaded ...";
|
qWarning() << "Empty list loaded ...";
|
||||||
}
|
}
|
||||||
for (const VersionPtr &version : other->m_versions)
|
for (const Version::Ptr &version : other->m_versions)
|
||||||
{
|
{
|
||||||
// we already have the version. merge the contents
|
// we already have the version. merge the contents
|
||||||
if (m_lookup.contains(version->version()))
|
if (m_lookup.contains(version->version()))
|
||||||
@ -235,7 +235,7 @@ void VersionList::merge(const VersionListPtr &other)
|
|||||||
endResetModel();
|
endResetModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VersionList::setupAddedVersion(const int row, const VersionPtr &version)
|
void VersionList::setupAddedVersion(const int row, const Version::Ptr &version)
|
||||||
{
|
{
|
||||||
// FIXME: do not disconnect from everythin, disconnect only the lambdas here
|
// FIXME: do not disconnect from everythin, disconnect only the lambdas here
|
||||||
version->disconnect();
|
version->disconnect();
|
||||||
@ -244,7 +244,7 @@ void VersionList::setupAddedVersion(const int row, const VersionPtr &version)
|
|||||||
connect(version.get(), &Version::typeChanged, this, [this, row]() { emit dataChanged(index(row), index(row), QVector<int>() << TypeRole); });
|
connect(version.get(), &Version::typeChanged, this, [this, row]() { emit dataChanged(index(row), index(row), QVector<int>() << TypeRole); });
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseVersionPtr VersionList::getRecommended() const
|
BaseVersion::Ptr VersionList::getRecommended() const
|
||||||
{
|
{
|
||||||
return m_recommended;
|
return m_recommended;
|
||||||
}
|
}
|
||||||
|
@ -20,10 +20,10 @@
|
|||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
#include "meta/Version.h"
|
||||||
|
|
||||||
namespace Meta
|
namespace Meta
|
||||||
{
|
{
|
||||||
using VersionPtr = std::shared_ptr<class Version>;
|
|
||||||
using VersionListPtr = std::shared_ptr<class VersionList>;
|
|
||||||
|
|
||||||
class VersionList : public BaseVersionList, public BaseEntity
|
class VersionList : public BaseVersionList, public BaseEntity
|
||||||
{
|
{
|
||||||
@ -33,6 +33,8 @@ class VersionList : public BaseVersionList, public BaseEntity
|
|||||||
public:
|
public:
|
||||||
explicit VersionList(const QString &uid, QObject *parent = nullptr);
|
explicit VersionList(const QString &uid, QObject *parent = nullptr);
|
||||||
|
|
||||||
|
using Ptr = std::shared_ptr<VersionList>;
|
||||||
|
|
||||||
enum Roles
|
enum Roles
|
||||||
{
|
{
|
||||||
UidRole = Qt::UserRole + 100,
|
UidRole = Qt::UserRole + 100,
|
||||||
@ -43,11 +45,11 @@ public:
|
|||||||
|
|
||||||
Task::Ptr getLoadTask() override;
|
Task::Ptr getLoadTask() override;
|
||||||
bool isLoaded() override;
|
bool isLoaded() override;
|
||||||
const BaseVersionPtr at(int i) const override;
|
const BaseVersion::Ptr at(int i) const override;
|
||||||
int count() const override;
|
int count() const override;
|
||||||
void sortVersions() override;
|
void sortVersions() override;
|
||||||
|
|
||||||
BaseVersionPtr getRecommended() const override;
|
BaseVersion::Ptr getRecommended() const override;
|
||||||
|
|
||||||
QVariant data(const QModelIndex &index, int role) const override;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
RoleList providesRoles() const override;
|
RoleList providesRoles() const override;
|
||||||
@ -65,38 +67,38 @@ public:
|
|||||||
}
|
}
|
||||||
QString humanReadable() const;
|
QString humanReadable() const;
|
||||||
|
|
||||||
VersionPtr getVersion(const QString &version);
|
Version::Ptr getVersion(const QString &version);
|
||||||
bool hasVersion(QString version) const;
|
bool hasVersion(QString version) const;
|
||||||
|
|
||||||
QVector<VersionPtr> versions() const
|
QVector<Version::Ptr> versions() const
|
||||||
{
|
{
|
||||||
return m_versions;
|
return m_versions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public: // for usage only by parsers
|
public: // for usage only by parsers
|
||||||
void setName(const QString &name);
|
void setName(const QString &name);
|
||||||
void setVersions(const QVector<VersionPtr> &versions);
|
void setVersions(const QVector<Version::Ptr> &versions);
|
||||||
void merge(const VersionListPtr &other);
|
void merge(const VersionList::Ptr &other);
|
||||||
void mergeFromIndex(const VersionListPtr &other);
|
void mergeFromIndex(const VersionList::Ptr &other);
|
||||||
void parse(const QJsonObject &obj) override;
|
void parse(const QJsonObject &obj) override;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void nameChanged(const QString &name);
|
void nameChanged(const QString &name);
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void updateListData(QList<BaseVersionPtr>) override
|
void updateListData(QList<BaseVersion::Ptr>) override
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVector<VersionPtr> m_versions;
|
QVector<Version::Ptr> m_versions;
|
||||||
QHash<QString, VersionPtr> m_lookup;
|
QHash<QString, Version::Ptr> m_lookup;
|
||||||
QString m_uid;
|
QString m_uid;
|
||||||
QString m_name;
|
QString m_name;
|
||||||
|
|
||||||
VersionPtr m_recommended;
|
Version::Ptr m_recommended;
|
||||||
|
|
||||||
void setupAddedVersion(const int row, const VersionPtr &version);
|
void setupAddedVersion(const int row, const Version::Ptr &version);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
Q_DECLARE_METATYPE(Meta::VersionListPtr)
|
Q_DECLARE_METATYPE(Meta::VersionList::Ptr)
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
#include "settings/SettingsObject.h"
|
#include "settings/SettingsObject.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
|
||||||
#include "MMCStrings.h"
|
|
||||||
#include "pathmatcher/RegexpMatcher.h"
|
#include "pathmatcher/RegexpMatcher.h"
|
||||||
#include "pathmatcher/MultiMatcher.h"
|
#include "pathmatcher/MultiMatcher.h"
|
||||||
#include "FileSystem.h"
|
#include "FileSystem.h"
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
#include "minecraft/PackProfile.h"
|
#include "minecraft/PackProfile.h"
|
||||||
#include "settings/INISettingsObject.h"
|
#include "settings/INISettingsObject.h"
|
||||||
|
|
||||||
VanillaCreationTask::VanillaCreationTask(BaseVersionPtr version, QString loader, BaseVersionPtr loader_version)
|
VanillaCreationTask::VanillaCreationTask(BaseVersion::Ptr version, QString loader, BaseVersion::Ptr loader_version)
|
||||||
: InstanceCreationTask(), m_version(std::move(version)), m_using_loader(true), m_loader(std::move(loader)), m_loader_version(std::move(loader_version))
|
: InstanceCreationTask(), m_version(std::move(version)), m_using_loader(true), m_loader(std::move(loader)), m_loader_version(std::move(loader_version))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -7,16 +7,16 @@
|
|||||||
class VanillaCreationTask final : public InstanceCreationTask {
|
class VanillaCreationTask final : public InstanceCreationTask {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
VanillaCreationTask(BaseVersionPtr version) : InstanceCreationTask(), m_version(std::move(version)) {}
|
VanillaCreationTask(BaseVersion::Ptr version) : InstanceCreationTask(), m_version(std::move(version)) {}
|
||||||
VanillaCreationTask(BaseVersionPtr version, QString loader, BaseVersionPtr loader_version);
|
VanillaCreationTask(BaseVersion::Ptr version, QString loader, BaseVersion::Ptr loader_version);
|
||||||
|
|
||||||
bool createInstance() override;
|
bool createInstance() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Version to update to / create of the instance.
|
// Version to update to / create of the instance.
|
||||||
BaseVersionPtr m_version;
|
BaseVersion::Ptr m_version;
|
||||||
|
|
||||||
bool m_using_loader = false;
|
bool m_using_loader = false;
|
||||||
QString m_loader;
|
QString m_loader;
|
||||||
BaseVersionPtr m_loader_version;
|
BaseVersion::Ptr m_loader_version;
|
||||||
};
|
};
|
||||||
|
@ -71,5 +71,7 @@ void VerifyJavaInstall::executeTask() {
|
|||||||
{
|
{
|
||||||
emit logLine(tr("Java version %1").arg(major), MessageLevel::Error);
|
emit logLine(tr("Java version %1").arg(major), MessageLevel::Error);
|
||||||
}
|
}
|
||||||
|
emit logLine(tr("Go to instance Java settings to change your Java version or disable the Java compatibility check if you know what you're doing."), MessageLevel::Error);
|
||||||
|
|
||||||
emitFailed(QString("Incompatible Java major version"));
|
emitFailed(QString("Incompatible Java major version"));
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ LocalModUpdateTask::LocalModUpdateTask(QDir index_dir, ModPlatform::IndexedPack&
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Q_OS_WIN32
|
#ifdef Q_OS_WIN32
|
||||||
SetFileAttributesA(index_dir.path().toStdString().c_str(), FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED);
|
SetFileAttributesW(index_dir.path().toStdWString().c_str(), FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@
|
|||||||
|
|
||||||
namespace ATLauncher {
|
namespace ATLauncher {
|
||||||
|
|
||||||
static Meta::VersionPtr getComponentVersion(const QString& uid, const QString& version);
|
static Meta::Version::Ptr getComponentVersion(const QString& uid, const QString& version);
|
||||||
|
|
||||||
PackInstallTask::PackInstallTask(UserInteractionSupport *support, QString packName, QString version, InstallMode installMode)
|
PackInstallTask::PackInstallTask(UserInteractionSupport *support, QString packName, QString version, InstallMode installMode)
|
||||||
{
|
{
|
||||||
@ -1037,7 +1037,7 @@ void PackInstallTask::install()
|
|||||||
emitSucceeded();
|
emitSucceeded();
|
||||||
}
|
}
|
||||||
|
|
||||||
static Meta::VersionPtr getComponentVersion(const QString& uid, const QString& version)
|
static Meta::Version::Ptr getComponentVersion(const QString& uid, const QString& version)
|
||||||
{
|
{
|
||||||
auto vlist = APPLICATION->metadataIndex()->get(uid);
|
auto vlist = APPLICATION->metadataIndex()->get(uid);
|
||||||
if (!vlist)
|
if (!vlist)
|
||||||
|
@ -68,7 +68,7 @@ public:
|
|||||||
* Requests a user interaction to select a component version from a given version list
|
* Requests a user interaction to select a component version from a given version list
|
||||||
* and constrained to a given Minecraft version.
|
* and constrained to a given Minecraft version.
|
||||||
*/
|
*/
|
||||||
virtual QString chooseVersion(Meta::VersionListPtr vlist, QString minecraftVersion) = 0;
|
virtual QString chooseVersion(Meta::VersionList::Ptr vlist, QString minecraftVersion) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Requests a user interaction to display a message.
|
* Requests a user interaction to display a message.
|
||||||
@ -137,8 +137,8 @@ private:
|
|||||||
|
|
||||||
QString archivePath;
|
QString archivePath;
|
||||||
QStringList jarmods;
|
QStringList jarmods;
|
||||||
Meta::VersionPtr minecraftVersion;
|
Meta::Version::Ptr minecraftVersion;
|
||||||
QMap<QString, Meta::VersionPtr> componentsToInstall;
|
QMap<QString, Meta::Version::Ptr> componentsToInstall;
|
||||||
|
|
||||||
QFuture<std::optional<QStringList>> m_extractFuture;
|
QFuture<std::optional<QStringList>> m_extractFuture;
|
||||||
QFutureWatcher<std::optional<QStringList>> m_extractFutureWatcher;
|
QFutureWatcher<std::optional<QStringList>> m_extractFutureWatcher;
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
|
||||||
#include "FileSystem.h"
|
#include "FileSystem.h"
|
||||||
|
#include "StringUtils.h"
|
||||||
|
|
||||||
#include <MurmurHash2.h>
|
#include <MurmurHash2.h>
|
||||||
|
|
||||||
@ -66,7 +67,7 @@ void FlameHasher::executeTask()
|
|||||||
// CF-specific
|
// CF-specific
|
||||||
auto should_filter_out = [](char c) { return (c == 9 || c == 10 || c == 13 || c == 32); };
|
auto should_filter_out = [](char c) { return (c == 9 || c == 10 || c == 13 || c == 32); };
|
||||||
|
|
||||||
std::ifstream file_stream(m_path.toStdString(), std::ifstream::binary);
|
std::ifstream file_stream(StringUtils::toStdString(m_path), std::ifstream::binary);
|
||||||
// TODO: This is very heavy work, but apparently QtConcurrent can't use move semantics, so we can't boop this to another thread.
|
// TODO: This is very heavy work, but apparently QtConcurrent can't use move semantics, so we can't boop this to another thread.
|
||||||
// How do we make this non-blocking then?
|
// How do we make this non-blocking then?
|
||||||
m_hash = QString::number(MurmurHash2(std::move(file_stream), 4 * MiB, should_filter_out));
|
m_hash = QString::number(MurmurHash2(std::move(file_stream), 4 * MiB, should_filter_out));
|
||||||
|
@ -22,10 +22,14 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
#include <toml++/toml.h>
|
#include "FileSystem.h"
|
||||||
|
#include "StringUtils.h"
|
||||||
|
|
||||||
#include "minecraft/mod/Mod.h"
|
#include "minecraft/mod/Mod.h"
|
||||||
#include "modplatform/ModIndex.h"
|
#include "modplatform/ModIndex.h"
|
||||||
|
|
||||||
|
#include <toml++/toml.h>
|
||||||
|
|
||||||
namespace Packwiz {
|
namespace Packwiz {
|
||||||
|
|
||||||
auto getRealIndexName(QDir& index_dir, QString normalized_fname, bool should_find_match) -> QString
|
auto getRealIndexName(QDir& index_dir, QString normalized_fname, bool should_find_match) -> QString
|
||||||
@ -63,22 +67,22 @@ static inline auto indexFileName(QString const& mod_slug) -> QString
|
|||||||
static ModPlatform::ProviderCapabilities ProviderCaps;
|
static ModPlatform::ProviderCapabilities ProviderCaps;
|
||||||
|
|
||||||
// Helper functions for extracting data from the TOML file
|
// Helper functions for extracting data from the TOML file
|
||||||
auto stringEntry(toml::table table, const std::string entry_name) -> QString
|
auto stringEntry(toml::table table, QString entry_name) -> QString
|
||||||
{
|
{
|
||||||
auto node = table[entry_name];
|
auto node = table[StringUtils::toStdString(entry_name)];
|
||||||
if (!node) {
|
if (!node) {
|
||||||
qCritical() << QString::fromStdString("Failed to read str property '" + entry_name + "' in mod metadata.");
|
qCritical() << "Failed to read str property '" + entry_name + "' in mod metadata.";
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
return QString::fromStdString(node.value_or(""));
|
return node.value_or("");
|
||||||
}
|
}
|
||||||
|
|
||||||
auto intEntry(toml::table table, const std::string entry_name) -> int
|
auto intEntry(toml::table table, QString entry_name) -> int
|
||||||
{
|
{
|
||||||
auto node = table[entry_name];
|
auto node = table[StringUtils::toStdString(entry_name)];
|
||||||
if (!node) {
|
if (!node) {
|
||||||
qCritical() << QString::fromStdString("Failed to read int property '" + entry_name + "' in mod metadata.");
|
qCritical() << "Failed to read int property '" + entry_name + "' in mod metadata.";
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,6 +149,8 @@ void V1::updateModIndex(QDir& index_dir, Mod& mod)
|
|||||||
// they want to do!
|
// they want to do!
|
||||||
if (index_file.exists()) {
|
if (index_file.exists()) {
|
||||||
index_file.remove();
|
index_file.remove();
|
||||||
|
} else {
|
||||||
|
FS::ensureFilePathExists(index_file.fileName());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!index_file.open(QIODevice::ReadWrite)) {
|
if (!index_file.open(QIODevice::ReadWrite)) {
|
||||||
@ -228,14 +234,14 @@ auto V1::getIndexForMod(QDir& index_dir, QString slug) -> Mod
|
|||||||
toml::table table;
|
toml::table table;
|
||||||
#if TOML_EXCEPTIONS
|
#if TOML_EXCEPTIONS
|
||||||
try {
|
try {
|
||||||
table = toml::parse_file(index_dir.absoluteFilePath(real_fname).toStdString());
|
table = toml::parse_file(StringUtils::toStdString(index_dir.absoluteFilePath(real_fname)));
|
||||||
} catch (const toml::parse_error& err) {
|
} catch (const toml::parse_error& err) {
|
||||||
qWarning() << QString("Could not open file %1!").arg(normalized_fname);
|
qWarning() << QString("Could not open file %1!").arg(normalized_fname);
|
||||||
qWarning() << "Reason: " << QString(err.what());
|
qWarning() << "Reason: " << QString(err.what());
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
table = toml::parse_file(index_dir.absoluteFilePath(real_fname).toStdString());
|
table = toml::parse_file(StringUtils::toStdString(index_dir.absoluteFilePath(real_fname)));
|
||||||
if (!table) {
|
if (!table) {
|
||||||
qWarning() << QString("Could not open file %1!").arg(normalized_fname);
|
qWarning() << QString("Could not open file %1!").arg(normalized_fname);
|
||||||
qWarning() << "Reason: " << QString(table.error().what());
|
qWarning() << "Reason: " << QString(table.error().what());
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
|
|
||||||
struct toml_table_t;
|
|
||||||
class QDir;
|
class QDir;
|
||||||
|
|
||||||
// Mod from launcher/minecraft/mod/Mod.h
|
// Mod from launcher/minecraft/mod/Mod.h
|
||||||
@ -34,9 +33,6 @@ namespace Packwiz {
|
|||||||
|
|
||||||
auto getRealIndexName(QDir& index_dir, QString normalized_index_name, bool should_match = false) -> QString;
|
auto getRealIndexName(QDir& index_dir, QString normalized_index_name, bool should_match = false) -> QString;
|
||||||
|
|
||||||
auto stringEntry(toml_table_t* parent, const char* entry_name) -> QString;
|
|
||||||
auto intEntry(toml_table_t* parent, const char* entry_name) -> int;
|
|
||||||
|
|
||||||
class V1 {
|
class V1 {
|
||||||
public:
|
public:
|
||||||
struct Mod {
|
struct Mod {
|
||||||
|
@ -1880,6 +1880,7 @@ void MainWindow::on_actionReportBug_triggered()
|
|||||||
void MainWindow::on_actionClearMetadata_triggered()
|
void MainWindow::on_actionClearMetadata_triggered()
|
||||||
{
|
{
|
||||||
APPLICATION->metacache()->evictAll();
|
APPLICATION->metacache()->evictAll();
|
||||||
|
APPLICATION->metacache()->SaveNow();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionOpenWiki_triggered()
|
void MainWindow::on_actionOpenWiki_triggered()
|
||||||
|
@ -73,17 +73,12 @@ QString getCreditsHtml()
|
|||||||
stream << "<h3>" << QObject::tr("%1 Developers", "About Credits").arg(BuildConfig.LAUNCHER_DISPLAYNAME) << "</h3>\n";
|
stream << "<h3>" << QObject::tr("%1 Developers", "About Credits").arg(BuildConfig.LAUNCHER_DISPLAYNAME) << "</h3>\n";
|
||||||
stream << QString("<p>Sefa Eyeoglu (Scrumplex) %1</p>\n") .arg(getWebsite("https://scrumplex.net"));
|
stream << QString("<p>Sefa Eyeoglu (Scrumplex) %1</p>\n") .arg(getWebsite("https://scrumplex.net"));
|
||||||
stream << QString("<p>dada513 %1</p>\n") .arg(getGitHub("dada513"));
|
stream << QString("<p>dada513 %1</p>\n") .arg(getGitHub("dada513"));
|
||||||
stream << QString("<p>txtsd %1</p>\n") .arg(getGitHub("txtsd"));
|
stream << QString("<p>txtsd %1</p>\n") .arg(getWebsite("https://ihavea.quest"));
|
||||||
stream << QString("<p>timoreo %1</p>\n") .arg(getGitHub("timoreo22"));
|
stream << QString("<p>timoreo %1</p>\n") .arg(getGitHub("timoreo22"));
|
||||||
stream << QString("<p>Ezekiel Smith (ZekeSmith) %1</p>\n") .arg(getGitHub("ZekeSmith"));
|
stream << QString("<p>Ezekiel Smith (ZekeSmith) %1</p>\n") .arg(getGitHub("ZekeSmith"));
|
||||||
stream << QString("<p>cozyGalvinism %1</p>\n") .arg(getGitHub("cozyGalvinism"));
|
stream << QString("<p>cozyGalvinism %1</p>\n") .arg(getGitHub("cozyGalvinism"));
|
||||||
stream << "<br />\n";
|
|
||||||
|
|
||||||
//: %1 is the name of the launcher, determined at build time, e.g. "Prism Launcher Contributors"
|
|
||||||
stream << "<h3>" << QObject::tr("%1 Contributors", "About Credits").arg(BuildConfig.LAUNCHER_DISPLAYNAME) << "</h3>\n";
|
|
||||||
stream << QString("<p>DioEgizio %1</p>\n") .arg(getGitHub("DioEgizio"));
|
stream << QString("<p>DioEgizio %1</p>\n") .arg(getGitHub("DioEgizio"));
|
||||||
stream << QString("<p>flowln %1</p>\n") .arg(getGitHub("flowln"));
|
stream << QString("<p>flowln %1</p>\n") .arg(getGitHub("flowln"));
|
||||||
stream << QString("<p>swirl %1</p>\n") .arg(getWebsite("https://swurl.xyz/"));
|
|
||||||
stream << "<br />\n";
|
stream << "<br />\n";
|
||||||
|
|
||||||
// TODO: possibly retrieve from git history at build time?
|
// TODO: possibly retrieve from git history at build time?
|
||||||
|
@ -39,13 +39,12 @@
|
|||||||
#include <MMCZip.h>
|
#include <MMCZip.h>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <qfilesystemmodel.h>
|
#include <QFileSystemModel>
|
||||||
|
|
||||||
#include <QSortFilterProxyModel>
|
#include <QSortFilterProxyModel>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <qstack.h>
|
|
||||||
#include <QSaveFile>
|
#include <QSaveFile>
|
||||||
#include "MMCStrings.h"
|
#include "StringUtils.h"
|
||||||
#include "SeparatorPrefixTree.h"
|
#include "SeparatorPrefixTree.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include <icons/IconList.h>
|
#include <icons/IconList.h>
|
||||||
@ -85,7 +84,7 @@ public:
|
|||||||
// sort and proxy model breaks the original model...
|
// sort and proxy model breaks the original model...
|
||||||
if (sortColumn() == 0)
|
if (sortColumn() == 0)
|
||||||
{
|
{
|
||||||
return Strings::naturalCompare(leftFileInfo.fileName(), rightFileInfo.fileName(),
|
return StringUtils::naturalCompare(leftFileInfo.fileName(), rightFileInfo.fileName(),
|
||||||
Qt::CaseInsensitive) < 0;
|
Qt::CaseInsensitive) < 0;
|
||||||
}
|
}
|
||||||
if (sortColumn() == 1)
|
if (sortColumn() == 1)
|
||||||
@ -94,7 +93,7 @@ public:
|
|||||||
auto rightSize = rightFileInfo.size();
|
auto rightSize = rightFileInfo.size();
|
||||||
if ((leftSize == rightSize) || (leftFileInfo.isDir() && rightFileInfo.isDir()))
|
if ((leftSize == rightSize) || (leftFileInfo.isDir() && rightFileInfo.isDir()))
|
||||||
{
|
{
|
||||||
return Strings::naturalCompare(leftFileInfo.fileName(),
|
return StringUtils::naturalCompare(leftFileInfo.fileName(),
|
||||||
rightFileInfo.fileName(),
|
rightFileInfo.fileName(),
|
||||||
Qt::CaseInsensitive) < 0
|
Qt::CaseInsensitive) < 0
|
||||||
? asc
|
? asc
|
||||||
|
@ -120,7 +120,7 @@ void VersionSelectDialog::selectRecommended()
|
|||||||
m_versionWidget->selectRecommended();
|
m_versionWidget->selectRecommended();
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseVersionPtr VersionSelectDialog::selectedVersion() const
|
BaseVersion::Ptr VersionSelectDialog::selectedVersion() const
|
||||||
{
|
{
|
||||||
return m_versionWidget->selectedVersion();
|
return m_versionWidget->selectedVersion();
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ public:
|
|||||||
|
|
||||||
int exec() override;
|
int exec() override;
|
||||||
|
|
||||||
BaseVersionPtr selectedVersion() const;
|
BaseVersion::Ptr selectedVersion() const;
|
||||||
|
|
||||||
void setCurrentVersion(const QString & version);
|
void setCurrentVersion(const QString & version);
|
||||||
void setFuzzyFilter(BaseVersionList::ModelRoles role, QString filter);
|
void setFuzzyFilter(BaseVersionList::ModelRoles role, QString filter);
|
||||||
|
@ -27,11 +27,7 @@
|
|||||||
<item row="4" column="1" colspan="3">
|
<item row="4" column="1" colspan="3">
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QLineEdit" name="filterEdit">
|
<widget class="QLineEdit" name="filterEdit"/>
|
||||||
<property name="clearButtonEnabled">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="filterLabel">
|
<widget class="QLabel" name="filterLabel">
|
||||||
|
@ -48,11 +48,7 @@
|
|||||||
<item>
|
<item>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QLineEdit" name="filterEdit">
|
<widget class="QLineEdit" name="filterEdit"/>
|
||||||
<property name="clearButtonEnabled">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="filterLabel">
|
<widget class="QLabel" name="filterLabel">
|
||||||
|
@ -187,12 +187,12 @@ void VanillaPage::retranslate()
|
|||||||
ui->retranslateUi(this);
|
ui->retranslateUi(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseVersionPtr VanillaPage::selectedVersion() const
|
BaseVersion::Ptr VanillaPage::selectedVersion() const
|
||||||
{
|
{
|
||||||
return m_selectedVersion;
|
return m_selectedVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseVersionPtr VanillaPage::selectedLoaderVersion() const
|
BaseVersion::Ptr VanillaPage::selectedLoaderVersion() const
|
||||||
{
|
{
|
||||||
return m_selectedLoaderVersion;
|
return m_selectedLoaderVersion;
|
||||||
}
|
}
|
||||||
@ -227,14 +227,14 @@ void VanillaPage::suggestCurrent()
|
|||||||
dialog->setSuggestedIcon("default");
|
dialog->setSuggestedIcon("default");
|
||||||
}
|
}
|
||||||
|
|
||||||
void VanillaPage::setSelectedVersion(BaseVersionPtr version)
|
void VanillaPage::setSelectedVersion(BaseVersion::Ptr version)
|
||||||
{
|
{
|
||||||
m_selectedVersion = version;
|
m_selectedVersion = version;
|
||||||
suggestCurrent();
|
suggestCurrent();
|
||||||
loaderFilterChanged();
|
loaderFilterChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VanillaPage::setSelectedLoaderVersion(BaseVersionPtr version)
|
void VanillaPage::setSelectedLoaderVersion(BaseVersion::Ptr version)
|
||||||
{
|
{
|
||||||
m_selectedLoaderVersion = version;
|
m_selectedLoaderVersion = version;
|
||||||
suggestCurrent();
|
suggestCurrent();
|
||||||
|
@ -76,13 +76,13 @@ public:
|
|||||||
|
|
||||||
void openedImpl() override;
|
void openedImpl() override;
|
||||||
|
|
||||||
BaseVersionPtr selectedVersion() const;
|
BaseVersion::Ptr selectedVersion() const;
|
||||||
BaseVersionPtr selectedLoaderVersion() const;
|
BaseVersion::Ptr selectedLoaderVersion() const;
|
||||||
QString selectedLoader() const;
|
QString selectedLoader() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setSelectedVersion(BaseVersionPtr version);
|
void setSelectedVersion(BaseVersion::Ptr version);
|
||||||
void setSelectedLoaderVersion(BaseVersionPtr version);
|
void setSelectedLoaderVersion(BaseVersion::Ptr version);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void filterChanged();
|
void filterChanged();
|
||||||
@ -98,7 +98,7 @@ private:
|
|||||||
NewInstanceDialog *dialog = nullptr;
|
NewInstanceDialog *dialog = nullptr;
|
||||||
Ui::VanillaPage *ui = nullptr;
|
Ui::VanillaPage *ui = nullptr;
|
||||||
bool m_versionSetByUser = false;
|
bool m_versionSetByUser = false;
|
||||||
BaseVersionPtr m_selectedVersion;
|
BaseVersion::Ptr m_selectedVersion;
|
||||||
BaseVersionPtr m_selectedLoaderVersion;
|
BaseVersion::Ptr m_selectedLoaderVersion;
|
||||||
QString m_selectedLoader;
|
QString m_selectedLoader;
|
||||||
};
|
};
|
||||||
|
@ -20,7 +20,8 @@
|
|||||||
|
|
||||||
#include <modplatform/atlauncher/ATLPackIndex.h>
|
#include <modplatform/atlauncher/ATLPackIndex.h>
|
||||||
#include <Version.h>
|
#include <Version.h>
|
||||||
#include <MMCStrings.h>
|
|
||||||
|
#include "StringUtils.h"
|
||||||
|
|
||||||
namespace Atl {
|
namespace Atl {
|
||||||
|
|
||||||
@ -86,7 +87,7 @@ bool FilterModel::lessThan(const QModelIndex &left, const QModelIndex &right) co
|
|||||||
return lv < rv;
|
return lv < rv;
|
||||||
}
|
}
|
||||||
else if (currentSorting == ByName) {
|
else if (currentSorting == ByName) {
|
||||||
return Strings::naturalCompare(leftPack.name, rightPack.name, Qt::CaseSensitive) >= 0;
|
return StringUtils::naturalCompare(leftPack.name, rightPack.name, Qt::CaseSensitive) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invalid sorting set, somehow...
|
// Invalid sorting set, somehow...
|
||||||
|
@ -53,7 +53,7 @@ std::optional<QVector<QString>> AtlUserInteractionSupportImpl::chooseOptionalMod
|
|||||||
return optionalModDialog.getResult();
|
return optionalModDialog.getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString AtlUserInteractionSupportImpl::chooseVersion(Meta::VersionListPtr vlist, QString minecraftVersion)
|
QString AtlUserInteractionSupportImpl::chooseVersion(Meta::VersionList::Ptr vlist, QString minecraftVersion)
|
||||||
{
|
{
|
||||||
VersionSelectDialog vselect(vlist.get(), "Choose Version", m_parent, false);
|
VersionSelectDialog vselect(vlist.get(), "Choose Version", m_parent, false);
|
||||||
if (minecraftVersion != nullptr) {
|
if (minecraftVersion != nullptr) {
|
||||||
|
@ -46,7 +46,7 @@ public:
|
|||||||
AtlUserInteractionSupportImpl(QWidget* parent);
|
AtlUserInteractionSupportImpl(QWidget* parent);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString chooseVersion(Meta::VersionListPtr vlist, QString minecraftVersion) override;
|
QString chooseVersion(Meta::VersionList::Ptr vlist, QString minecraftVersion) override;
|
||||||
std::optional<QVector<QString>> chooseOptionalMods(ATLauncher::PackVersion version, QVector<ATLauncher::VersionMod> mods) override;
|
std::optional<QVector<QString>> chooseOptionalMods(ATLauncher::PackVersion version, QVector<ATLauncher::VersionMod> mods) override;
|
||||||
void displayMessage(QString message) override;
|
void displayMessage(QString message) override;
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
#include <Json.h>
|
#include <Json.h>
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
|
||||||
#include <MMCStrings.h>
|
|
||||||
#include <Version.h>
|
#include <Version.h>
|
||||||
|
|
||||||
#include <QtMath>
|
#include <QtMath>
|
||||||
|
@ -19,7 +19,8 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include "modplatform/modpacksch/FTBPackManifest.h"
|
#include "modplatform/modpacksch/FTBPackManifest.h"
|
||||||
#include <MMCStrings.h>
|
|
||||||
|
#include "StringUtils.h"
|
||||||
|
|
||||||
namespace Ftb {
|
namespace Ftb {
|
||||||
|
|
||||||
@ -81,7 +82,7 @@ bool FilterModel::lessThan(const QModelIndex &left, const QModelIndex &right) co
|
|||||||
return leftPack.installs < rightPack.installs;
|
return leftPack.installs < rightPack.installs;
|
||||||
}
|
}
|
||||||
else if (currentSorting == ByName) {
|
else if (currentSorting == ByName) {
|
||||||
return Strings::naturalCompare(leftPack.name, rightPack.name, Qt::CaseSensitive) >= 0;
|
return StringUtils::naturalCompare(leftPack.name, rightPack.name, Qt::CaseSensitive) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Invalid sorting set, somehow...
|
// Invalid sorting set, somehow...
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
#include "ListModel.h"
|
#include "ListModel.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
|
||||||
#include <MMCStrings.h>
|
#include "StringUtils.h"
|
||||||
#include <Version.h>
|
#include <Version.h>
|
||||||
|
|
||||||
#include <QtMath>
|
#include <QtMath>
|
||||||
@ -66,7 +66,7 @@ bool FilterModel::lessThan(const QModelIndex &left, const QModelIndex &right) co
|
|||||||
return lv < rv;
|
return lv < rv;
|
||||||
|
|
||||||
} else if(currentSorting == Sorting::ByName) {
|
} else if(currentSorting == Sorting::ByName) {
|
||||||
return Strings::naturalCompare(leftPack.name, rightPack.name, Qt::CaseSensitive) >= 0;
|
return StringUtils::naturalCompare(leftPack.name, rightPack.name, Qt::CaseSensitive) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//UHM, some inavlid value set?!
|
//UHM, some inavlid value set?!
|
||||||
|
@ -245,7 +245,7 @@ void JavaSettingsWidget::memoryValueChanged(int)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JavaSettingsWidget::javaVersionSelected(BaseVersionPtr version)
|
void JavaSettingsWidget::javaVersionSelected(BaseVersion::Ptr version)
|
||||||
{
|
{
|
||||||
auto java = std::dynamic_pointer_cast<JavaInstall>(version);
|
auto java = std::dynamic_pointer_cast<JavaInstall>(version);
|
||||||
if(!java)
|
if(!java)
|
||||||
|
@ -60,7 +60,7 @@ public:
|
|||||||
protected slots:
|
protected slots:
|
||||||
void memoryValueChanged(int);
|
void memoryValueChanged(int);
|
||||||
void javaPathEdited(const QString &path);
|
void javaPathEdited(const QString &path);
|
||||||
void javaVersionSelected(BaseVersionPtr version);
|
void javaVersionSelected(BaseVersion::Ptr version);
|
||||||
void on_javaBrowseBtn_clicked();
|
void on_javaBrowseBtn_clicked();
|
||||||
void on_javaStatusBtn_clicked();
|
void on_javaStatusBtn_clicked();
|
||||||
void checkFinished(JavaCheckResult result);
|
void checkFinished(JavaCheckResult result);
|
||||||
|
@ -49,7 +49,7 @@ public:
|
|||||||
auto getFilter() -> std::shared_ptr<Filter>;
|
auto getFilter() -> std::shared_ptr<Filter>;
|
||||||
auto changed() const -> bool { return m_last_version_id != m_version_id; }
|
auto changed() const -> bool { return m_last_version_id != m_version_id; }
|
||||||
|
|
||||||
Meta::VersionListPtr versionList() { return m_version_list; }
|
Meta::VersionList::Ptr versionList() { return m_version_list; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ModFilterWidget(Version def, QWidget* parent = nullptr);
|
ModFilterWidget(Version def, QWidget* parent = nullptr);
|
||||||
@ -73,7 +73,7 @@ private:
|
|||||||
/* Version stuff */
|
/* Version stuff */
|
||||||
QButtonGroup m_mcVersion_buttons;
|
QButtonGroup m_mcVersion_buttons;
|
||||||
|
|
||||||
Meta::VersionListPtr m_version_list;
|
Meta::VersionList::Ptr m_version_list;
|
||||||
|
|
||||||
/* Used to tell if the filter was changed since the last getFilter() call */
|
/* Used to tell if the filter was changed since the last getFilter() call */
|
||||||
VersionButtonID m_last_version_id = VersionButtonID::Strict;
|
VersionButtonID m_last_version_id = VersionButtonID::Strict;
|
||||||
|
@ -142,7 +142,7 @@ void VersionSelectWidget::changeProgress(qint64 current, qint64 total)
|
|||||||
void VersionSelectWidget::currentRowChanged(const QModelIndex& current, const QModelIndex&)
|
void VersionSelectWidget::currentRowChanged(const QModelIndex& current, const QModelIndex&)
|
||||||
{
|
{
|
||||||
auto variant = m_proxyModel->data(current, BaseVersionList::VersionPointerRole);
|
auto variant = m_proxyModel->data(current, BaseVersionList::VersionPointerRole);
|
||||||
emit selectedVersionChanged(variant.value<BaseVersionPtr>());
|
emit selectedVersionChanged(variant.value<BaseVersion::Ptr>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void VersionSelectWidget::preselect()
|
void VersionSelectWidget::preselect()
|
||||||
@ -186,11 +186,11 @@ bool VersionSelectWidget::hasVersions() const
|
|||||||
return m_proxyModel->rowCount(QModelIndex()) != 0;
|
return m_proxyModel->rowCount(QModelIndex()) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseVersionPtr VersionSelectWidget::selectedVersion() const
|
BaseVersion::Ptr VersionSelectWidget::selectedVersion() const
|
||||||
{
|
{
|
||||||
auto currentIndex = listView->selectionModel()->currentIndex();
|
auto currentIndex = listView->selectionModel()->currentIndex();
|
||||||
auto variant = m_proxyModel->data(currentIndex, BaseVersionList::VersionPointerRole);
|
auto variant = m_proxyModel->data(currentIndex, BaseVersionList::VersionPointerRole);
|
||||||
return variant.value<BaseVersionPtr>();
|
return variant.value<BaseVersion::Ptr>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VersionSelectWidget::setExactFilter(BaseVersionList::ModelRoles role, QString filter)
|
void VersionSelectWidget::setExactFilter(BaseVersionList::ModelRoles role, QString filter)
|
||||||
|
@ -40,7 +40,7 @@ public:
|
|||||||
void loadList();
|
void loadList();
|
||||||
|
|
||||||
bool hasVersions() const;
|
bool hasVersions() const;
|
||||||
BaseVersionPtr selectedVersion() const;
|
BaseVersion::Ptr selectedVersion() const;
|
||||||
void selectRecommended();
|
void selectRecommended();
|
||||||
void selectCurrent();
|
void selectCurrent();
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ public:
|
|||||||
void setResizeOn(int column);
|
void setResizeOn(int column);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void selectedVersionChanged(BaseVersionPtr version);
|
void selectedVersionChanged(BaseVersion::Ptr version);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void closeEvent ( QCloseEvent* );
|
virtual void closeEvent ( QCloseEvent* );
|
||||||
|
Submodule libraries/tomlplusplus updated: 4b166b69f2...cc741c9f5f
@ -21,12 +21,12 @@ set(Launcher_Domain "prismlauncher.org" PARENT_SCOPE)
|
|||||||
set(Launcher_UserAgent "${Launcher_CommonName}/${Launcher_VERSION_NAME}" PARENT_SCOPE)
|
set(Launcher_UserAgent "${Launcher_CommonName}/${Launcher_VERSION_NAME}" PARENT_SCOPE)
|
||||||
set(Launcher_ConfigFile "prismlauncher.cfg" PARENT_SCOPE)
|
set(Launcher_ConfigFile "prismlauncher.cfg" PARENT_SCOPE)
|
||||||
set(Launcher_Git "https://github.com/PrismLauncher/PrismLauncher" PARENT_SCOPE)
|
set(Launcher_Git "https://github.com/PrismLauncher/PrismLauncher" PARENT_SCOPE)
|
||||||
set(Launcher_DesktopFileName "org.prismlauncher.PrismLauncher.desktop")
|
set(Launcher_DesktopFileName "org.prismlauncher.PrismLauncher.desktop" PARENT_SCOPE)
|
||||||
set(Launcher_SVGFileName "org.prismlauncher.PrismLauncher.svg")
|
set(Launcher_SVGFileName "org.prismlauncher.PrismLauncher.svg" PARENT_SCOPE)
|
||||||
|
|
||||||
set(Launcher_Desktop "program_info/${Launcher_DesktopFileName}" PARENT_SCOPE)
|
set(Launcher_Desktop "program_info/org.prismlauncher.PrismLauncher.desktop" PARENT_SCOPE)
|
||||||
set(Launcher_MetaInfo "program_info/org.prismlauncher.PrismLauncher.metainfo.xml" PARENT_SCOPE)
|
set(Launcher_MetaInfo "program_info/org.prismlauncher.PrismLauncher.metainfo.xml" PARENT_SCOPE)
|
||||||
set(Launcher_SVG "program_info/${Launcher_SVGFileName}" PARENT_SCOPE)
|
set(Launcher_SVG "program_info/org.prismlauncher.PrismLauncher.svg" PARENT_SCOPE)
|
||||||
set(Launcher_Branding_ICNS "program_info/prismlauncher.icns" PARENT_SCOPE)
|
set(Launcher_Branding_ICNS "program_info/prismlauncher.icns" PARENT_SCOPE)
|
||||||
set(Launcher_Branding_ICO "program_info/prismlauncher.ico")
|
set(Launcher_Branding_ICO "program_info/prismlauncher.ico")
|
||||||
set(Launcher_Branding_ICO "${Launcher_Branding_ICO}" PARENT_SCOPE)
|
set(Launcher_Branding_ICO "${Launcher_Branding_ICO}" PARENT_SCOPE)
|
||||||
|
Reference in New Issue
Block a user