mirror of
https://github.com/PrismLauncher/PrismLauncher.git
synced 2026-06-30 02:20:00 +03:00
chore(clang-tidy): modernize the code
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
parent
170d59de2a
commit
1af838db2e
38 changed files with 1088 additions and 956 deletions
|
|
@ -24,6 +24,7 @@
|
|||
#include <QPushButton>
|
||||
#include <QVBoxLayout>
|
||||
#include <QWidget>
|
||||
#include <utility>
|
||||
|
||||
#include "Application.h"
|
||||
#include "BaseVersionList.h"
|
||||
|
|
@ -31,104 +32,115 @@
|
|||
#include "Filter.h"
|
||||
#include "java/download/ArchiveDownloadTask.h"
|
||||
#include "java/download/ManifestDownloadTask.h"
|
||||
#include "java/download/SymlinkTask.h"
|
||||
#include "meta/Index.h"
|
||||
#include "meta/VersionList.h"
|
||||
#include "minecraft/MinecraftInstance.h"
|
||||
#include "minecraft/PackProfile.h"
|
||||
#include "tasks/SequentialTask.h"
|
||||
#include "ui/dialogs/CustomMessageBox.h"
|
||||
#include "ui/dialogs/ProgressDialog.h"
|
||||
#include "ui/java/VersionList.h"
|
||||
#include "ui/widgets/PageContainer.h"
|
||||
#include "ui/widgets/VersionSelectWidget.h"
|
||||
|
||||
#if defined(Q_OS_MACOS)
|
||||
#include "java/download/SymlinkTask.h"
|
||||
#include "tasks/SequentialTask.h"
|
||||
#endif
|
||||
|
||||
namespace {
|
||||
class InstallJavaPage : public QWidget, public BasePage {
|
||||
public:
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit InstallJavaPage(const QString& id, const QString& iconName, const QString& name, QWidget* parent = nullptr)
|
||||
: QWidget(parent), uid(id), iconName(iconName), name(name)
|
||||
explicit InstallJavaPage(QString id, QString iconName, QString name, QWidget* parent = nullptr)
|
||||
: QWidget(parent)
|
||||
, m_uid(std::move(id))
|
||||
, m_iconName(std::move(iconName))
|
||||
, m_name(std::move(name))
|
||||
, m_horizontalLayout(new QHBoxLayout(this))
|
||||
, m_majorVersionSelect(new VersionSelectWidget(this))
|
||||
, m_javaVersionSelect(new VersionSelectWidget(this))
|
||||
{
|
||||
setObjectName(QStringLiteral("VersionSelectWidget"));
|
||||
horizontalLayout = new QHBoxLayout(this);
|
||||
horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
|
||||
horizontalLayout->setContentsMargins(0, 0, 0, 0);
|
||||
majorVersionSelect = new VersionSelectWidget(this);
|
||||
majorVersionSelect->selectCurrent();
|
||||
majorVersionSelect->setEmptyString(tr("No Java versions are currently available in the meta."));
|
||||
majorVersionSelect->setEmptyErrorString(tr("Couldn't load or download the Java version lists!"));
|
||||
horizontalLayout->addWidget(majorVersionSelect, 1);
|
||||
|
||||
javaVersionSelect = new VersionSelectWidget(this);
|
||||
javaVersionSelect->setEmptyString(tr("No Java versions are currently available for your OS."));
|
||||
javaVersionSelect->setEmptyErrorString(tr("Couldn't load or download the Java version lists!"));
|
||||
horizontalLayout->addWidget(javaVersionSelect, 4);
|
||||
connect(majorVersionSelect, &VersionSelectWidget::selectedVersionChanged, this, &InstallJavaPage::setSelectedVersion);
|
||||
connect(majorVersionSelect, &VersionSelectWidget::selectedVersionChanged, this, &InstallJavaPage::selectionChanged);
|
||||
connect(javaVersionSelect, &VersionSelectWidget::selectedVersionChanged, this, &InstallJavaPage::selectionChanged);
|
||||
m_horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
|
||||
m_horizontalLayout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
m_majorVersionSelect->selectCurrent();
|
||||
m_majorVersionSelect->setEmptyString(tr("No Java versions are currently available in the meta."));
|
||||
m_majorVersionSelect->setEmptyErrorString(tr("Couldn't load or download the Java version lists!"));
|
||||
m_horizontalLayout->addWidget(m_majorVersionSelect, 1);
|
||||
|
||||
m_javaVersionSelect->setEmptyString(tr("No Java versions are currently available for your OS."));
|
||||
m_javaVersionSelect->setEmptyErrorString(tr("Couldn't load or download the Java version lists!"));
|
||||
m_horizontalLayout->addWidget(m_javaVersionSelect, 4);
|
||||
connect(m_majorVersionSelect, &VersionSelectWidget::selectedVersionChanged, this, &InstallJavaPage::setSelectedVersion);
|
||||
connect(m_majorVersionSelect, &VersionSelectWidget::selectedVersionChanged, this, &InstallJavaPage::selectionChanged);
|
||||
connect(m_javaVersionSelect, &VersionSelectWidget::selectedVersionChanged, this, &InstallJavaPage::selectionChanged);
|
||||
|
||||
QMetaObject::connectSlotsByName(this);
|
||||
}
|
||||
~InstallJavaPage()
|
||||
~InstallJavaPage() override
|
||||
{
|
||||
delete horizontalLayout;
|
||||
delete majorVersionSelect;
|
||||
delete javaVersionSelect;
|
||||
delete m_horizontalLayout;
|
||||
delete m_majorVersionSelect;
|
||||
delete m_javaVersionSelect;
|
||||
}
|
||||
|
||||
//! loads the list if needed.
|
||||
void initialize(Meta::VersionList::Ptr vlist)
|
||||
void initialize(const Meta::VersionList::Ptr& vlist)
|
||||
{
|
||||
vlist->setProvidedRoles({ BaseVersionList::JavaMajorRole, BaseVersionList::RecommendedRole, BaseVersionList::VersionPointerRole });
|
||||
majorVersionSelect->initialize(vlist.get());
|
||||
m_majorVersionSelect->initialize(vlist.get());
|
||||
}
|
||||
|
||||
void setSelectedVersion(BaseVersion::Ptr version)
|
||||
void setSelectedVersion(const BaseVersion::Ptr& version)
|
||||
{
|
||||
auto dcast = std::dynamic_pointer_cast<Meta::Version>(version);
|
||||
if (!dcast) {
|
||||
return;
|
||||
}
|
||||
javaVersionSelect->initialize(new Java::VersionList(dcast, this));
|
||||
javaVersionSelect->selectCurrent();
|
||||
m_javaVersionSelect->initialize(new Java::VersionList(dcast, this));
|
||||
m_javaVersionSelect->selectCurrent();
|
||||
}
|
||||
|
||||
QString id() const override { return uid; }
|
||||
QString displayName() const override { return name; }
|
||||
QIcon icon() const override { return QIcon::fromTheme(iconName); }
|
||||
QString id() const override { return m_uid; }
|
||||
QString displayName() const override { return m_name; }
|
||||
QIcon icon() const override { return QIcon::fromTheme(m_iconName); }
|
||||
|
||||
void openedImpl() override
|
||||
{
|
||||
if (loaded)
|
||||
if (m_loaded) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto versions = APPLICATION->metadataIndex()->get(uid);
|
||||
if (!versions)
|
||||
const auto versions = APPLICATION->metadataIndex()->get(m_uid);
|
||||
if (!versions) {
|
||||
return;
|
||||
}
|
||||
|
||||
initialize(versions);
|
||||
loaded = true;
|
||||
m_loaded = true;
|
||||
}
|
||||
|
||||
void setParentContainer(BasePageContainer* container) override
|
||||
{
|
||||
auto dialog = dynamic_cast<QDialog*>(dynamic_cast<PageContainer*>(container)->parent());
|
||||
connect(javaVersionSelect->view(), &QAbstractItemView::doubleClicked, dialog, &QDialog::accept);
|
||||
auto* dialog = dynamic_cast<QDialog*>(dynamic_cast<PageContainer*>(container)->parent());
|
||||
connect(m_javaVersionSelect->view(), &QAbstractItemView::doubleClicked, dialog, &QDialog::accept);
|
||||
}
|
||||
|
||||
BaseVersion::Ptr selectedVersion() const { return javaVersionSelect->selectedVersion(); }
|
||||
void selectSearch() { javaVersionSelect->selectSearch(); }
|
||||
BaseVersion::Ptr selectedVersion() const { return m_javaVersionSelect->selectedVersion(); }
|
||||
void selectSearch() { m_javaVersionSelect->selectSearch(); }
|
||||
void loadList()
|
||||
{
|
||||
majorVersionSelect->loadList(true);
|
||||
javaVersionSelect->loadList(true);
|
||||
m_majorVersionSelect->loadList(true);
|
||||
m_javaVersionSelect->loadList(true);
|
||||
}
|
||||
|
||||
public slots:
|
||||
void setRecommendedMajors(const QStringList& majors)
|
||||
{
|
||||
m_recommended_majors = majors;
|
||||
m_recommendedMajors = majors;
|
||||
recommendedFilterChanged();
|
||||
}
|
||||
void setRecommend(bool recommend)
|
||||
|
|
@ -139,9 +151,9 @@ class InstallJavaPage : public QWidget, public BasePage {
|
|||
void recommendedFilterChanged()
|
||||
{
|
||||
if (m_recommend) {
|
||||
majorVersionSelect->setFilter(BaseVersionList::ModelRoles::JavaMajorRole, Filters::equalsAny(m_recommended_majors));
|
||||
m_majorVersionSelect->setFilter(BaseVersionList::ModelRoles::JavaMajorRole, Filters::equalsAny(m_recommendedMajors));
|
||||
} else {
|
||||
majorVersionSelect->setFilter(BaseVersionList::ModelRoles::JavaMajorRole, Filters::equalsAny());
|
||||
m_majorVersionSelect->setFilter(BaseVersionList::ModelRoles::JavaMajorRole, Filters::equalsAny());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -149,30 +161,30 @@ class InstallJavaPage : public QWidget, public BasePage {
|
|||
void selectionChanged();
|
||||
|
||||
private:
|
||||
const QString uid;
|
||||
const QString iconName;
|
||||
const QString name;
|
||||
bool loaded = false;
|
||||
const QString m_uid;
|
||||
const QString m_iconName;
|
||||
const QString m_name;
|
||||
bool m_loaded = false;
|
||||
|
||||
QHBoxLayout* horizontalLayout = nullptr;
|
||||
VersionSelectWidget* majorVersionSelect = nullptr;
|
||||
VersionSelectWidget* javaVersionSelect = nullptr;
|
||||
QHBoxLayout* m_horizontalLayout = nullptr;
|
||||
VersionSelectWidget* m_majorVersionSelect = nullptr;
|
||||
VersionSelectWidget* m_javaVersionSelect = nullptr;
|
||||
|
||||
QStringList m_recommended_majors;
|
||||
bool m_recommend;
|
||||
QStringList m_recommendedMajors;
|
||||
bool m_recommend{};
|
||||
};
|
||||
|
||||
static InstallJavaPage* pageCast(BasePage* page)
|
||||
InstallJavaPage* pageCast(BasePage* page)
|
||||
{
|
||||
auto result = dynamic_cast<InstallJavaPage*>(page);
|
||||
auto* result = dynamic_cast<InstallJavaPage*>(page);
|
||||
Q_ASSERT(result != nullptr);
|
||||
return result;
|
||||
}
|
||||
namespace Java {
|
||||
QStringList getRecommendedJavaVersionsFromVersionList(Meta::VersionList::Ptr list)
|
||||
|
||||
QStringList getRecommendedJavaVersionsFromVersionList(const Meta::VersionList::Ptr& list)
|
||||
{
|
||||
QStringList recommendedJavas;
|
||||
for (auto ver : list->versions()) {
|
||||
for (const auto& ver : list->versions()) {
|
||||
auto major = ver->version();
|
||||
if (major.startsWith("java")) {
|
||||
major = "Java " + major.mid(4);
|
||||
|
|
@ -181,34 +193,37 @@ QStringList getRecommendedJavaVersionsFromVersionList(Meta::VersionList::Ptr lis
|
|||
}
|
||||
return recommendedJavas;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
namespace Java {
|
||||
|
||||
InstallDialog::InstallDialog(const QString& uid, BaseInstance* instance, QWidget* parent)
|
||||
: QDialog(parent), container(new PageContainer(this, QString(), this)), buttons(new QDialogButtonBox(this))
|
||||
: QDialog(parent), m_container(new PageContainer(this, QString(), this)), m_buttons(new QDialogButtonBox(this))
|
||||
{
|
||||
auto layout = new QVBoxLayout(this);
|
||||
// small margins look ugly on macOS on modal windows
|
||||
#ifndef Q_OS_MACOS
|
||||
auto* layout = new QVBoxLayout(this);
|
||||
// small margins look ugly on macOS on modal windows
|
||||
#ifndef Q_OS_MACOS
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
#endif
|
||||
container->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
|
||||
layout->addWidget(container);
|
||||
#endif
|
||||
m_container->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
|
||||
layout->addWidget(m_container);
|
||||
|
||||
auto buttonLayout = new QHBoxLayout(this);
|
||||
// small margins look ugly on macOS on modal windows
|
||||
#ifndef Q_OS_MACOS
|
||||
auto* buttonLayout = new QHBoxLayout(this);
|
||||
// small margins look ugly on macOS on modal windows
|
||||
#ifndef Q_OS_MACOS
|
||||
buttonLayout->setContentsMargins(0, 0, 6, 6);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
auto refreshLayout = new QHBoxLayout(this);
|
||||
auto* refreshLayout = new QHBoxLayout(this);
|
||||
|
||||
auto refreshButton = new QPushButton(tr("&Refresh"), this);
|
||||
connect(refreshButton, &QPushButton::clicked, this, [this] { pageCast(container->selectedPage())->loadList(); });
|
||||
auto* refreshButton = new QPushButton(tr("&Refresh"), this);
|
||||
connect(refreshButton, &QPushButton::clicked, this, [this] { pageCast(m_container->selectedPage())->loadList(); });
|
||||
refreshLayout->addWidget(refreshButton);
|
||||
|
||||
auto recommendedCheckBox = new QCheckBox("Recommended", this);
|
||||
auto* recommendedCheckBox = new QCheckBox("Recommended", this);
|
||||
recommendedCheckBox->setCheckState(Qt::CheckState::Checked);
|
||||
connect(recommendedCheckBox, &QCheckBox::checkStateChanged, this, [this](Qt::CheckState state) {
|
||||
for (BasePage* page : container->getPages()) {
|
||||
for (BasePage* page : m_container->getPages()) {
|
||||
pageCast(page)->setRecommend(state == Qt::Checked);
|
||||
}
|
||||
});
|
||||
|
|
@ -216,22 +231,22 @@ InstallDialog::InstallDialog(const QString& uid, BaseInstance* instance, QWidget
|
|||
refreshLayout->addWidget(recommendedCheckBox);
|
||||
buttonLayout->addLayout(refreshLayout);
|
||||
|
||||
buttons->setOrientation(Qt::Horizontal);
|
||||
buttons->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
|
||||
buttons->button(QDialogButtonBox::Ok)->setText(tr("Download"));
|
||||
buttons->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
|
||||
connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
||||
connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
||||
buttonLayout->addWidget(buttons);
|
||||
m_buttons->setOrientation(Qt::Horizontal);
|
||||
m_buttons->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
|
||||
m_buttons->button(QDialogButtonBox::Ok)->setText(tr("Download"));
|
||||
m_buttons->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
|
||||
connect(m_buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
|
||||
connect(m_buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
||||
buttonLayout->addWidget(m_buttons);
|
||||
|
||||
container->addButtons(buttonLayout);
|
||||
m_container->addButtons(buttonLayout);
|
||||
|
||||
setWindowTitle(dialogTitle());
|
||||
setWindowModality(Qt::WindowModal);
|
||||
resize(840, 480);
|
||||
|
||||
QStringList recommendedJavas;
|
||||
if (auto mcInst = dynamic_cast<MinecraftInstance*>(instance); mcInst) {
|
||||
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
|
||||
|
|
@ -251,32 +266,35 @@ InstallDialog::InstallDialog(const QString& uid, BaseInstance* instance, QWidget
|
|||
if (newTask) {
|
||||
connect(newTask.get(), &Task::succeeded, this, [this, versions] {
|
||||
auto recommendedJavas = getRecommendedJavaVersionsFromVersionList(versions);
|
||||
for (BasePage* page : container->getPages()) {
|
||||
for (BasePage* page : m_container->getPages()) {
|
||||
pageCast(page)->setRecommendedMajors(recommendedJavas);
|
||||
}
|
||||
});
|
||||
if (!newTask->isRunning())
|
||||
if (!newTask->isRunning()) {
|
||||
newTask->start();
|
||||
}
|
||||
} else {
|
||||
recommendedJavas = getRecommendedJavaVersionsFromVersionList(versions);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (BasePage* page : container->getPages()) {
|
||||
if (page->id() == uid)
|
||||
container->selectPage(page->id());
|
||||
for (BasePage* page : m_container->getPages()) {
|
||||
if (page->id() == uid) {
|
||||
m_container->selectPage(page->id());
|
||||
}
|
||||
|
||||
auto cast = pageCast(page);
|
||||
auto* cast = pageCast(page);
|
||||
cast->setRecommend(true);
|
||||
connect(cast, &InstallJavaPage::selectionChanged, this, [this, cast] { validate(cast); });
|
||||
if (!recommendedJavas.isEmpty()) {
|
||||
cast->setRecommendedMajors(recommendedJavas);
|
||||
}
|
||||
}
|
||||
connect(container, &PageContainer::selectedPageChanged, this, [this](BasePage* previous, BasePage* selected) { validate(selected); });
|
||||
pageCast(container->selectedPage())->selectSearch();
|
||||
validate(container->selectedPage());
|
||||
connect(m_container, &PageContainer::selectedPageChanged, this,
|
||||
[this](BasePage* /*previous*/, BasePage* selected) { validate(selected); });
|
||||
pageCast(m_container->selectedPage())->selectSearch();
|
||||
validate(m_container->selectedPage());
|
||||
}
|
||||
|
||||
QList<BasePage*> InstallDialog::getPages()
|
||||
|
|
@ -289,9 +307,9 @@ QList<BasePage*> InstallDialog::getPages()
|
|||
// Azul
|
||||
new InstallJavaPage("com.azul.java", "azul", tr("Azul Zulu")),
|
||||
// IBM
|
||||
/* Must watch out in case the AdoptOpenJDK infrastructure is deprecated.
|
||||
In case of happening, IBM does not seem to provide as of today (03/2026) an API like Adoptium does and rather uses GitHub directly in its website: `developer.ibm.com`.
|
||||
GitHub is known for rate limiting requests that do not use an API key from an account. */
|
||||
/* Must watch out in case the AdoptOpenJDK infrastructure is deprecated.
|
||||
In case of happening, IBM does not seem to provide as of today (03/2026) an API like Adoptium does and rather uses GitHub directly
|
||||
in its website: `developer.ibm.com`. GitHub is known for rate limiting requests that do not use an API key from an account. */
|
||||
new InstallJavaPage("com.ibm.java", "openj9_hex_custom", tr("IBM Semeru Open")),
|
||||
};
|
||||
}
|
||||
|
|
@ -303,25 +321,25 @@ QString InstallDialog::dialogTitle()
|
|||
|
||||
void InstallDialog::validate(BasePage* selected)
|
||||
{
|
||||
buttons->button(QDialogButtonBox::Ok)->setEnabled(!!std::dynamic_pointer_cast<Java::Metadata>(pageCast(selected)->selectedVersion()));
|
||||
m_buttons->button(QDialogButtonBox::Ok)->setEnabled(!!std::dynamic_pointer_cast<Java::Metadata>(pageCast(selected)->selectedVersion()));
|
||||
}
|
||||
|
||||
void InstallDialog::done(int result)
|
||||
{
|
||||
if (result == Accepted) {
|
||||
auto* page = pageCast(container->selectedPage());
|
||||
auto* page = pageCast(m_container->selectedPage());
|
||||
if (page->selectedVersion()) {
|
||||
auto meta = std::dynamic_pointer_cast<Java::Metadata>(page->selectedVersion());
|
||||
if (meta) {
|
||||
Task::Ptr task;
|
||||
auto final_path = FS::PathCombine(APPLICATION->javaPath(), meta->m_name);
|
||||
auto deletePath = [final_path] { FS::deletePath(final_path); };
|
||||
auto finalPath = FS::PathCombine(APPLICATION->javaPath(), meta->m_name);
|
||||
auto deletePath = [finalPath] { FS::deletePath(finalPath); };
|
||||
switch (meta->downloadType) {
|
||||
case Java::DownloadType::Manifest:
|
||||
task = makeShared<ManifestDownloadTask>(meta->url, final_path, meta->checksumType, meta->checksumHash);
|
||||
task = makeShared<ManifestDownloadTask>(meta->url, finalPath, meta->checksumType, meta->checksumHash);
|
||||
break;
|
||||
case Java::DownloadType::Archive:
|
||||
task = makeShared<ArchiveDownloadTask>(meta->url, final_path, meta->checksumType, meta->checksumHash);
|
||||
task = makeShared<ArchiveDownloadTask>(meta->url, finalPath, meta->checksumType, meta->checksumHash);
|
||||
break;
|
||||
case Java::DownloadType::Unknown:
|
||||
QString error = QString(tr("Could not determine Java download type!"));
|
||||
|
|
@ -332,10 +350,10 @@ void InstallDialog::done(int result)
|
|||
#if defined(Q_OS_MACOS)
|
||||
auto seq = makeShared<SequentialTask>(tr("Install Java"));
|
||||
seq->addTask(task);
|
||||
seq->addTask(makeShared<Java::SymlinkTask>(final_path));
|
||||
seq->addTask(makeShared<Java::SymlinkTask>(finalPath));
|
||||
task = seq;
|
||||
#endif
|
||||
connect(task.get(), &Task::failed, this, [this, &deletePath](QString reason) {
|
||||
connect(task.get(), &Task::failed, this, [this, &deletePath](const QString& reason) {
|
||||
QString error = QString("Java download failed: %1").arg(reason);
|
||||
CustomMessageBox::selectable(this, tr("Error"), error, QMessageBox::Warning)->show();
|
||||
deletePath();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue