diff --git a/src/plugins/extensionmanager/CMakeLists.txt b/src/plugins/extensionmanager/CMakeLists.txt index 094c1eb7d91..56236df9fb7 100644 --- a/src/plugins/extensionmanager/CMakeLists.txt +++ b/src/plugins/extensionmanager/CMakeLists.txt @@ -5,6 +5,8 @@ add_qtc_plugin(ExtensionManager extensionmanagerconstants.h extensionmanagerplugin.cpp extensionmanagertr.h + extensionmanagersettings.cpp + extensionmanagersettings.h extensionmanagerwidget.cpp extensionmanagerwidget.h extensionsbrowser.cpp diff --git a/src/plugins/extensionmanager/extensionmanager.qbs b/src/plugins/extensionmanager/extensionmanager.qbs index 0d5fa5cb259..994d75f7366 100644 --- a/src/plugins/extensionmanager/extensionmanager.qbs +++ b/src/plugins/extensionmanager/extensionmanager.qbs @@ -13,6 +13,8 @@ QtcPlugin { "extensionmanagerconstants.h", "extensionmanagerplugin.cpp", "extensionmanagertr.h", + "extensionmanagersettings.cpp", + "extensionmanagersettings.h", "extensionmanagerwidget.cpp", "extensionmanagerwidget.h", "extensionsbrowser.cpp", diff --git a/src/plugins/extensionmanager/extensionmanagersettings.cpp b/src/plugins/extensionmanager/extensionmanagersettings.cpp new file mode 100644 index 00000000000..54f4920181c --- /dev/null +++ b/src/plugins/extensionmanager/extensionmanagersettings.cpp @@ -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 +#include + +#include + +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 diff --git a/src/plugins/extensionmanager/extensionmanagersettings.h b/src/plugins/extensionmanager/extensionmanagersettings.h new file mode 100644 index 00000000000..ed6b2f2aec4 --- /dev/null +++ b/src/plugins/extensionmanager/extensionmanagersettings.h @@ -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 + +namespace ExtensionManager::Internal { + +class ExtensionManagerSettings final : public Utils::AspectContainer +{ +public: + ExtensionManagerSettings(); + + Utils::StringAspect externalRepoUrl{this}; + Utils::BoolAspect useExternalRepo{this}; +}; + +ExtensionManagerSettings &settings(); + +} // ExtensionManager::Internal diff --git a/src/plugins/extensionmanager/extensionsbrowser.cpp b/src/plugins/extensionmanager/extensionsbrowser.cpp index da757c0bbfb..c90d2bb59a1 100644 --- a/src/plugins/extensionmanager/extensionsbrowser.cpp +++ b/src/plugins/extensionmanager/extensionsbrowser.cpp @@ -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 #include +#include #include #include #include @@ -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())