ExtensionManager: Make remote repo access optional

Off by default.

Change-Id: Ib27fa134f095be7c923cc4ce41ef4e2f6ec01ff0
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
hjk
2024-06-28 15:44:41 +02:00
parent 7fb28d6bdc
commit 62ebdfd406
5 changed files with 92 additions and 3 deletions

View File

@@ -5,6 +5,8 @@ add_qtc_plugin(ExtensionManager
extensionmanagerconstants.h
extensionmanagerplugin.cpp
extensionmanagertr.h
extensionmanagersettings.cpp
extensionmanagersettings.h
extensionmanagerwidget.cpp
extensionmanagerwidget.h
extensionsbrowser.cpp

View File

@@ -13,6 +13,8 @@ QtcPlugin {
"extensionmanagerconstants.h",
"extensionmanagerplugin.cpp",
"extensionmanagertr.h",
"extensionmanagersettings.cpp",
"extensionmanagersettings.h",
"extensionmanagerwidget.cpp",
"extensionmanagerwidget.h",
"extensionsbrowser.cpp",

View File

@@ -0,0 +1,59 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "extensionmanagersettings.h"
#include "extensionmanagertr.h"
#include <coreplugin/coreconstants.h>
#include <coreplugin/dialogs/ioptionspage.h>
#include <utils/layoutbuilder.h>
namespace ExtensionManager::Internal {
ExtensionManagerSettings &settings()
{
static ExtensionManagerSettings theExtensionManagerSettings;
return theExtensionManagerSettings;
}
ExtensionManagerSettings::ExtensionManagerSettings()
{
setAutoApply(false);
setSettingsGroup("ExtensionManager");
externalRepoUrl.setDefaultValue("https://qc-extensions.qt.io");
externalRepoUrl.setReadOnly(true);
useExternalRepo.setSettingsKey("UseExternalRepo");
useExternalRepo.setLabelText(Tr::tr("Use external repository"));
useExternalRepo.setToolTip(Tr::tr("Repository: %1").arg(externalRepoUrl()));
useExternalRepo.setDefaultValue(false);
setLayouter([this] {
using namespace Layouting;
return Column {
useExternalRepo,
st
};
});
readSettings();
}
class ExtensionManagerSettingsPage : public Core::IOptionsPage
{
public:
ExtensionManagerSettingsPage()
{
setId("ExtensionManager");
setDisplayName(Tr::tr("Extensions"));
setCategory(Core::Constants::SETTINGS_CATEGORY_CORE);
setSettingsProvider([] { return &settings(); });
}
};
const ExtensionManagerSettingsPage settingsPage;
} // ExtensionManager::Internal

View File

@@ -0,0 +1,21 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#pragma once
#include <utils/aspects.h>
namespace ExtensionManager::Internal {
class ExtensionManagerSettings final : public Utils::AspectContainer
{
public:
ExtensionManagerSettings();
Utils::StringAspect externalRepoUrl{this};
Utils::BoolAspect useExternalRepo{this};
};
ExtensionManagerSettings &settings();
} // ExtensionManager::Internal

View File

@@ -5,7 +5,7 @@
#include "extensionmanagertr.h"
#include "extensionsmodel.h"
#include "utils/hostosinfo.h"
#include "extensionmanagersettings.h"
#ifdef WITH_TESTS
#include "extensionmanager_test.h"
@@ -29,6 +29,7 @@
#include <utils/elidinglabel.h>
#include <utils/fancylineedit.h>
#include <utils/hostosinfo.h>
#include <utils/icon.h>
#include <utils/layoutbuilder.h>
#include <utils/networkaccessmanager.h>
@@ -399,14 +400,18 @@ void ExtensionsBrowser::fetchExtensions()
// d->model->setExtensionsJson(testData("defaultpacks")); return;
#endif // WITH_TESTS
if (!settings().useExternalRepo()) {
d->model->setExtensionsJson({});
return;
}
using namespace Tasking;
const auto onQuerySetup = [this](NetworkQuery &query) {
const QString host = "https://qc-extensions.qt.io";
const QString url = "%1/api/v1/search?request=";
const QString requestTemplate
= R"({"version":"%1","host_os":"%2","host_os_version":"%3","host_architecture":"%4","page_size":200})";
const QString request = url.arg(host) + requestTemplate
const QString request = url.arg(settings().externalRepoUrl()) + requestTemplate
.arg(QCoreApplication::applicationVersion())
.arg(osTypeToString(HostOsInfo::hostOs()))
.arg(QSysInfo::productVersion())