Recommend java major
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
parent
5d3549a5e9
commit
0ac62f9ddf
@ -1,16 +1,12 @@
|
|||||||
#include "Filter.h"
|
#include "Filter.h"
|
||||||
|
|
||||||
Filter::~Filter() {}
|
|
||||||
|
|
||||||
ContainsFilter::ContainsFilter(const QString& pattern) : pattern(pattern) {}
|
ContainsFilter::ContainsFilter(const QString& pattern) : pattern(pattern) {}
|
||||||
ContainsFilter::~ContainsFilter() {}
|
|
||||||
bool ContainsFilter::accepts(const QString& value)
|
bool ContainsFilter::accepts(const QString& value)
|
||||||
{
|
{
|
||||||
return value.contains(pattern);
|
return value.contains(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
ExactFilter::ExactFilter(const QString& pattern) : pattern(pattern) {}
|
ExactFilter::ExactFilter(const QString& pattern) : pattern(pattern) {}
|
||||||
ExactFilter::~ExactFilter() {}
|
|
||||||
bool ExactFilter::accepts(const QString& value)
|
bool ExactFilter::accepts(const QString& value)
|
||||||
{
|
{
|
||||||
return value == pattern;
|
return value == pattern;
|
||||||
@ -27,10 +23,15 @@ RegexpFilter::RegexpFilter(const QString& regexp, bool invert) : invert(invert)
|
|||||||
pattern.setPattern(regexp);
|
pattern.setPattern(regexp);
|
||||||
pattern.optimize();
|
pattern.optimize();
|
||||||
}
|
}
|
||||||
RegexpFilter::~RegexpFilter() {}
|
|
||||||
bool RegexpFilter::accepts(const QString& value)
|
bool RegexpFilter::accepts(const QString& value)
|
||||||
{
|
{
|
||||||
auto match = pattern.match(value);
|
auto match = pattern.match(value);
|
||||||
bool matched = match.hasMatch();
|
bool matched = match.hasMatch();
|
||||||
return invert ? (!matched) : (matched);
|
return invert ? (!matched) : (matched);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ExactListFilter::ExactListFilter(const QStringList& pattern) : m_pattern(pattern) {}
|
||||||
|
bool ExactListFilter::accepts(const QString& value)
|
||||||
|
{
|
||||||
|
return m_pattern.isEmpty() || m_pattern.contains(value);
|
||||||
|
}
|
@ -5,14 +5,14 @@
|
|||||||
|
|
||||||
class Filter {
|
class Filter {
|
||||||
public:
|
public:
|
||||||
virtual ~Filter();
|
virtual ~Filter() = default;
|
||||||
virtual bool accepts(const QString& value) = 0;
|
virtual bool accepts(const QString& value) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ContainsFilter : public Filter {
|
class ContainsFilter : public Filter {
|
||||||
public:
|
public:
|
||||||
ContainsFilter(const QString& pattern);
|
ContainsFilter(const QString& pattern);
|
||||||
virtual ~ContainsFilter();
|
virtual ~ContainsFilter() = default;
|
||||||
bool accepts(const QString& value) override;
|
bool accepts(const QString& value) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -22,7 +22,7 @@ class ContainsFilter : public Filter {
|
|||||||
class ExactFilter : public Filter {
|
class ExactFilter : public Filter {
|
||||||
public:
|
public:
|
||||||
ExactFilter(const QString& pattern);
|
ExactFilter(const QString& pattern);
|
||||||
virtual ~ExactFilter();
|
virtual ~ExactFilter() = default;
|
||||||
bool accepts(const QString& value) override;
|
bool accepts(const QString& value) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -32,7 +32,7 @@ class ExactFilter : public Filter {
|
|||||||
class ExactIfPresentFilter : public Filter {
|
class ExactIfPresentFilter : public Filter {
|
||||||
public:
|
public:
|
||||||
ExactIfPresentFilter(const QString& pattern);
|
ExactIfPresentFilter(const QString& pattern);
|
||||||
~ExactIfPresentFilter() override = default;
|
virtual ~ExactIfPresentFilter() override = default;
|
||||||
bool accepts(const QString& value) override;
|
bool accepts(const QString& value) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -42,10 +42,20 @@ class ExactIfPresentFilter : public Filter {
|
|||||||
class RegexpFilter : public Filter {
|
class RegexpFilter : public Filter {
|
||||||
public:
|
public:
|
||||||
RegexpFilter(const QString& regexp, bool invert);
|
RegexpFilter(const QString& regexp, bool invert);
|
||||||
virtual ~RegexpFilter();
|
virtual ~RegexpFilter() = default;
|
||||||
bool accepts(const QString& value) override;
|
bool accepts(const QString& value) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QRegularExpression pattern;
|
QRegularExpression pattern;
|
||||||
bool invert = false;
|
bool invert = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ExactListFilter : public Filter {
|
||||||
|
public:
|
||||||
|
ExactListFilter(const QStringList& pattern = {});
|
||||||
|
virtual ~ExactListFilter() = default;
|
||||||
|
bool accepts(const QString& value) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
const QStringList& m_pattern;
|
||||||
|
};
|
||||||
|
@ -56,7 +56,7 @@ class MinecraftInstance : public BaseInstance {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
MinecraftInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr settings, const QString& rootDir);
|
MinecraftInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr settings, const QString& rootDir);
|
||||||
virtual ~MinecraftInstance() {};
|
virtual ~MinecraftInstance() = default;
|
||||||
virtual void saveNow() override;
|
virtual void saveNow() override;
|
||||||
|
|
||||||
void loadSpecificSettings() override;
|
void loadSpecificSettings() override;
|
||||||
|
@ -101,7 +101,7 @@ class VersionFile : public ProblemContainer {
|
|||||||
/// Mojang: list of compatible java majors
|
/// Mojang: list of compatible java majors
|
||||||
QList<int> compatibleJavaMajors;
|
QList<int> compatibleJavaMajors;
|
||||||
|
|
||||||
/// Mojang: the name of recomended java version
|
/// Mojang: the name of recommended java version
|
||||||
QString compatibleJavaName;
|
QString compatibleJavaName;
|
||||||
|
|
||||||
/// Mojang: type of the Minecraft version
|
/// Mojang: type of the Minecraft version
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include "InstallJavaDialog.h"
|
#include "InstallJavaDialog.h"
|
||||||
|
|
||||||
|
#include <QCheckBox>
|
||||||
#include <QDialogButtonBox>
|
#include <QDialogButtonBox>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
@ -27,10 +28,13 @@
|
|||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "BaseVersionList.h"
|
#include "BaseVersionList.h"
|
||||||
#include "FileSystem.h"
|
#include "FileSystem.h"
|
||||||
|
#include "Filter.h"
|
||||||
#include "java/download/ArchiveDownloadTask.h"
|
#include "java/download/ArchiveDownloadTask.h"
|
||||||
#include "java/download/ManifestDownloadTask.h"
|
#include "java/download/ManifestDownloadTask.h"
|
||||||
#include "meta/Index.h"
|
#include "meta/Index.h"
|
||||||
#include "meta/VersionList.h"
|
#include "meta/VersionList.h"
|
||||||
|
#include "minecraft/MinecraftInstance.h"
|
||||||
|
#include "minecraft/PackProfile.h"
|
||||||
#include "ui/dialogs/CustomMessageBox.h"
|
#include "ui/dialogs/CustomMessageBox.h"
|
||||||
#include "ui/dialogs/ProgressDialog.h"
|
#include "ui/dialogs/ProgressDialog.h"
|
||||||
#include "ui/java/VersionList.h"
|
#include "ui/java/VersionList.h"
|
||||||
@ -119,6 +123,27 @@ class InstallJavaPage : public QWidget, public BasePage {
|
|||||||
majorVersionSelect->loadList();
|
majorVersionSelect->loadList();
|
||||||
javaVersionSelect->loadList();
|
javaVersionSelect->loadList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void setRecommendedMajors(const QStringList& majors)
|
||||||
|
{
|
||||||
|
m_recommended_majors = majors;
|
||||||
|
recommendedFilterChanged();
|
||||||
|
}
|
||||||
|
void setRecomend(bool recomend)
|
||||||
|
{
|
||||||
|
m_recommend = recomend;
|
||||||
|
recommendedFilterChanged();
|
||||||
|
}
|
||||||
|
void recommendedFilterChanged()
|
||||||
|
{
|
||||||
|
if (m_recommend) {
|
||||||
|
majorVersionSelect->setFilter(BaseVersionList::ModelRoles::JavaMajorRole, new ExactListFilter(m_recommended_majors));
|
||||||
|
} else {
|
||||||
|
majorVersionSelect->setFilter(BaseVersionList::ModelRoles::JavaMajorRole, new ExactListFilter());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void selectionChanged();
|
void selectionChanged();
|
||||||
|
|
||||||
@ -131,6 +156,9 @@ class InstallJavaPage : public QWidget, public BasePage {
|
|||||||
QHBoxLayout* horizontalLayout = nullptr;
|
QHBoxLayout* horizontalLayout = nullptr;
|
||||||
VersionSelectWidget* majorVersionSelect = nullptr;
|
VersionSelectWidget* majorVersionSelect = nullptr;
|
||||||
VersionSelectWidget* javaVersionSelect = nullptr;
|
VersionSelectWidget* javaVersionSelect = nullptr;
|
||||||
|
|
||||||
|
QStringList m_recommended_majors;
|
||||||
|
bool m_recommend;
|
||||||
};
|
};
|
||||||
|
|
||||||
static InstallJavaPage* pageCast(BasePage* page)
|
static InstallJavaPage* pageCast(BasePage* page)
|
||||||
@ -140,8 +168,20 @@ static InstallJavaPage* pageCast(BasePage* page)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
namespace Java {
|
namespace Java {
|
||||||
|
QStringList getRecommendedJavaVersionsFromVersionList(Meta::VersionList::Ptr list)
|
||||||
|
{
|
||||||
|
QStringList recommendedJavas;
|
||||||
|
for (auto ver : list->versions()) {
|
||||||
|
auto major = ver->version();
|
||||||
|
if (major.startsWith("java")) {
|
||||||
|
major = "Java " + major.mid(4);
|
||||||
|
}
|
||||||
|
recommendedJavas.append(major);
|
||||||
|
}
|
||||||
|
return recommendedJavas;
|
||||||
|
}
|
||||||
|
|
||||||
InstallDialog::InstallDialog(const QString& uid, QWidget* parent)
|
InstallDialog::InstallDialog(const QString& uid, BaseInstance* instance, QWidget* parent)
|
||||||
: QDialog(parent), container(new PageContainer(this, QString(), this)), buttons(new QDialogButtonBox(this))
|
: QDialog(parent), container(new PageContainer(this, QString(), this)), buttons(new QDialogButtonBox(this))
|
||||||
{
|
{
|
||||||
auto layout = new QVBoxLayout(this);
|
auto layout = new QVBoxLayout(this);
|
||||||
@ -150,10 +190,22 @@ InstallDialog::InstallDialog(const QString& uid, QWidget* parent)
|
|||||||
layout->addWidget(container);
|
layout->addWidget(container);
|
||||||
|
|
||||||
auto buttonLayout = new QHBoxLayout(this);
|
auto buttonLayout = new QHBoxLayout(this);
|
||||||
|
auto refreshLayout = new QHBoxLayout(this);
|
||||||
|
|
||||||
auto refreshButton = new QPushButton(tr("&Refresh"), this);
|
auto refreshButton = new QPushButton(tr("&Refresh"), this);
|
||||||
connect(refreshButton, &QPushButton::clicked, this, [this] { pageCast(container->selectedPage())->loadList(); });
|
connect(refreshButton, &QPushButton::clicked, this, [this] { pageCast(container->selectedPage())->loadList(); });
|
||||||
buttonLayout->addWidget(refreshButton);
|
refreshLayout->addWidget(refreshButton);
|
||||||
|
|
||||||
|
auto recommendedCheckBox = new QCheckBox("Recommended", this);
|
||||||
|
recommendedCheckBox->setCheckState(Qt::CheckState::Checked);
|
||||||
|
connect(recommendedCheckBox, &QCheckBox::stateChanged, this, [this](int state) {
|
||||||
|
for (BasePage* page : container->getPages()) {
|
||||||
|
pageCast(page)->setRecomend(state == Qt::Checked);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
refreshLayout->addWidget(recommendedCheckBox);
|
||||||
|
buttonLayout->addLayout(refreshLayout);
|
||||||
|
|
||||||
buttons->setOrientation(Qt::Horizontal);
|
buttons->setOrientation(Qt::Horizontal);
|
||||||
buttons->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
|
buttons->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
|
||||||
@ -168,11 +220,49 @@ InstallDialog::InstallDialog(const QString& uid, QWidget* parent)
|
|||||||
setWindowModality(Qt::WindowModal);
|
setWindowModality(Qt::WindowModal);
|
||||||
resize(840, 480);
|
resize(840, 480);
|
||||||
|
|
||||||
|
QStringList recommendedJavas;
|
||||||
|
if (auto mcInst = dynamic_cast<MinecraftInstance*>(instance); mcInst) {
|
||||||
|
auto mc = mcInst->getPackProfile()->getComponent("net.minecraft");
|
||||||
|
if (mc) {
|
||||||
|
auto file = mc->getVersionFile(); // no need for load as it should already be loaded
|
||||||
|
if (file) {
|
||||||
|
for (auto major : file->compatibleJavaMajors) {
|
||||||
|
recommendedJavas.append(QString("Java %1").arg(major));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const auto versions = APPLICATION->metadataIndex()->get("net.minecraft.java");
|
||||||
|
if (versions) {
|
||||||
|
if (versions->isLoaded()) {
|
||||||
|
recommendedJavas = getRecommendedJavaVersionsFromVersionList(versions);
|
||||||
|
} else {
|
||||||
|
auto newTask = versions->getLoadTask();
|
||||||
|
if (newTask) {
|
||||||
|
connect(newTask.get(), &Task::succeeded, this, [this, versions] {
|
||||||
|
auto recommendedJavas = getRecommendedJavaVersionsFromVersionList(versions);
|
||||||
|
for (BasePage* page : container->getPages()) {
|
||||||
|
pageCast(page)->setRecommendedMajors(recommendedJavas);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!newTask->isRunning())
|
||||||
|
newTask->start();
|
||||||
|
} else {
|
||||||
|
recommendedJavas = getRecommendedJavaVersionsFromVersionList(versions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
for (BasePage* page : container->getPages()) {
|
for (BasePage* page : container->getPages()) {
|
||||||
if (page->id() == uid)
|
if (page->id() == uid)
|
||||||
container->selectPage(page->id());
|
container->selectPage(page->id());
|
||||||
|
|
||||||
connect(pageCast(page), &InstallJavaPage::selectionChanged, this, [this] { validate(); });
|
auto cast = pageCast(page);
|
||||||
|
cast->setRecomend(true);
|
||||||
|
connect(cast, &InstallJavaPage::selectionChanged, this, [this] { validate(); });
|
||||||
|
if (!recommendedJavas.isEmpty()) {
|
||||||
|
cast->setRecommendedMajors(recommendedJavas);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
connect(container, &PageContainer::selectedPageChanged, this, [this] { validate(); });
|
connect(container, &PageContainer::selectedPageChanged, this, [this] { validate(); });
|
||||||
pageCast(container->selectedPage())->selectSearch();
|
pageCast(container->selectedPage())->selectSearch();
|
||||||
@ -243,6 +333,7 @@ void InstallDialog::done(int result)
|
|||||||
|
|
||||||
QDialog::done(result);
|
QDialog::done(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Java
|
} // namespace Java
|
||||||
|
|
||||||
#include "InstallJavaDialog.moc"
|
#include "InstallJavaDialog.moc"
|
@ -19,6 +19,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
#include "BaseInstance.h"
|
||||||
#include "ui/pages/BasePageProvider.h"
|
#include "ui/pages/BasePageProvider.h"
|
||||||
|
|
||||||
class MinecraftInstance;
|
class MinecraftInstance;
|
||||||
@ -31,7 +32,7 @@ class InstallDialog final : public QDialog, private BasePageProvider {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit InstallDialog(const QString& uid = QString(), QWidget* parent = nullptr);
|
explicit InstallDialog(const QString& uid = QString(), BaseInstance* instance = nullptr, QWidget* parent = nullptr);
|
||||||
|
|
||||||
QList<BasePage*> getPages() override;
|
QList<BasePage*> getPages() override;
|
||||||
QString dialogTitle() override;
|
QString dialogTitle() override;
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <memory>
|
|
||||||
#include "ui/pages/BasePage.h"
|
#include "ui/pages/BasePage.h"
|
||||||
|
|
||||||
class BasePageProvider {
|
class BasePageProvider {
|
||||||
|
@ -201,7 +201,7 @@ void JavaPage::on_javaTestBtn_clicked()
|
|||||||
|
|
||||||
void JavaPage::on_downloadJavaButton_clicked()
|
void JavaPage::on_downloadJavaButton_clicked()
|
||||||
{
|
{
|
||||||
auto jdialog = new Java::InstallDialog({}, this);
|
auto jdialog = new Java::InstallDialog({}, nullptr, this);
|
||||||
jdialog->exec();
|
jdialog->exec();
|
||||||
ui->managedJavaList->loadList();
|
ui->managedJavaList->loadList();
|
||||||
}
|
}
|
||||||
|
@ -390,7 +390,7 @@ void InstanceSettingsPage::loadSettings()
|
|||||||
|
|
||||||
void InstanceSettingsPage::on_javaDownloadBtn_clicked()
|
void InstanceSettingsPage::on_javaDownloadBtn_clicked()
|
||||||
{
|
{
|
||||||
auto jdialog = new Java::InstallDialog({}, this);
|
auto jdialog = new Java::InstallDialog({}, m_instance, this);
|
||||||
jdialog->exec();
|
jdialog->exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,7 +351,7 @@ void JavaSettingsWidget::on_javaBrowseBtn_clicked()
|
|||||||
|
|
||||||
void JavaSettingsWidget::javaDownloadBtn_clicked()
|
void JavaSettingsWidget::javaDownloadBtn_clicked()
|
||||||
{
|
{
|
||||||
auto jdialog = new Java::InstallDialog({}, this);
|
auto jdialog = new Java::InstallDialog({}, nullptr, this);
|
||||||
jdialog->exec();
|
jdialog->exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user