diff --git a/src/plugins/gitlab/gitlabdialog.cpp b/src/plugins/gitlab/gitlabdialog.cpp index bffdf66fb5d..e67facf5c0b 100644 --- a/src/plugins/gitlab/gitlabdialog.cpp +++ b/src/plugins/gitlab/gitlabdialog.cpp @@ -188,7 +188,7 @@ void GitLabDialog::requestMainViewUpdate() bool linked = false; m_currentServerId = Id(); if (auto project = ProjectExplorer::ProjectManager::startupProject()) { - GitLabProjectSettings *projSettings = GitLabPlugin::projectSettings(project); + GitLabProjectSettings *projSettings = projectSettings(project); if (projSettings->isLinked()) { m_currentServerId = projSettings->currentServer(); linked = true; diff --git a/src/plugins/gitlab/gitlabplugin.cpp b/src/plugins/gitlab/gitlabplugin.cpp index b87e43fd02a..4d94c64da04 100644 --- a/src/plugins/gitlab/gitlabplugin.cpp +++ b/src/plugins/gitlab/gitlabplugin.cpp @@ -15,6 +15,8 @@ #include #include +#include + #include #include @@ -56,79 +58,82 @@ public: static GitLabPluginPrivate *dd = nullptr; -GitLabPlugin::GitLabPlugin() +class GitLabPlugin final : public ExtensionSystem::IPlugin { -} + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "GitLab.json") -GitLabPlugin::~GitLabPlugin() -{ - if (!dd->projectSettings.isEmpty()) { - qDeleteAll(dd->projectSettings); - dd->projectSettings.clear(); - } - delete dd; - dd = nullptr; -} - -void GitLabPlugin::initialize() -{ - dd = new GitLabPluginPrivate; - gitLabParameters().fromSettings(Core::ICore::settings()); - - setupGitlabProjectPanel(); - - ActionBuilder(this, "GitLab.OpenView") - .setText(Tr::tr("GitLab...")) - .addOnTriggered(this, &GitLabPlugin::openView) - .addToContainer(Core::Constants::M_TOOLS); - - connect(ProjectExplorer::ProjectManager::instance(), - &ProjectExplorer::ProjectManager::startupProjectChanged, - this, &GitLabPlugin::onStartupProjectChanged); -} - -void GitLabPlugin::openView() -{ - if (dd->dialog.isNull()) { - while (!gitLabParameters().isValid()) { - QMessageBox::warning(Core::ICore::dialogParent(), Tr::tr("Error"), - Tr::tr("Invalid GitLab configuration. For a fully functional " - "configuration, you need to set up host name or address and " - "an access token. Providing the path to curl is mandatory.")); - if (!Core::ICore::showOptionsDialog("GitLab")) - return; + ~GitLabPlugin() final + { + if (!dd->projectSettings.isEmpty()) { + qDeleteAll(dd->projectSettings); + dd->projectSettings.clear(); } - GitLabDialog *gitlabD = new GitLabDialog(Core::ICore::dialogParent()); - gitlabD->setModal(true); - Core::ICore::registerWindow(gitlabD, Core::Context("Git.GitLab")); - dd->dialog = gitlabD; - } - const Qt::WindowStates state = dd->dialog->windowState(); - if (state & Qt::WindowMinimized) - dd->dialog->setWindowState(state & ~Qt::WindowMinimized); - dd->dialog->show(); - dd->dialog->raise(); -} - -void GitLabPlugin::onStartupProjectChanged() -{ - QTC_ASSERT(dd, return); - disconnect(&dd->notificationTimer); - ProjectExplorer::Project *project = ProjectExplorer::ProjectManager::startupProject(); - if (!project) { - dd->notificationTimer.stop(); - return; + delete dd; + dd = nullptr; } - const GitLabProjectSettings *projSettings = projectSettings(project); - if (!projSettings->isLinked()) { - dd->notificationTimer.stop(); - return; + void initialize() final + { + dd = new GitLabPluginPrivate; + gitLabParameters().fromSettings(Core::ICore::settings()); + + setupGitlabProjectPanel(); + + ActionBuilder(this, "GitLab.OpenView") + .setText(Tr::tr("GitLab...")) + .addOnTriggered(this, &GitLabPlugin::openView) + .addToContainer(Core::Constants::M_TOOLS); + + connect(ProjectExplorer::ProjectManager::instance(), + &ProjectExplorer::ProjectManager::startupProjectChanged, + this, &GitLabPlugin::onStartupProjectChanged); } - dd->fetchEvents(); - dd->setupNotificationTimer(); -} + void openView() + { + if (dd->dialog.isNull()) { + while (!gitLabParameters().isValid()) { + QMessageBox::warning(Core::ICore::dialogParent(), Tr::tr("Error"), + Tr::tr("Invalid GitLab configuration. For a fully functional " + "configuration, you need to set up host name or address and " + "an access token. Providing the path to curl is mandatory.")); + if (!Core::ICore::showOptionsDialog("GitLab")) + return; + } + GitLabDialog *gitlabD = new GitLabDialog(Core::ICore::dialogParent()); + gitlabD->setModal(true); + Core::ICore::registerWindow(gitlabD, Core::Context("Git.GitLab")); + dd->dialog = gitlabD; + } + const Qt::WindowStates state = dd->dialog->windowState(); + if (state & Qt::WindowMinimized) + dd->dialog->setWindowState(state & ~Qt::WindowMinimized); + dd->dialog->show(); + dd->dialog->raise(); + } + + void onStartupProjectChanged() + { + QTC_ASSERT(dd, return); + disconnect(&dd->notificationTimer); + ProjectExplorer::Project *project = ProjectExplorer::ProjectManager::startupProject(); + if (!project) { + dd->notificationTimer.stop(); + return; + } + + const GitLabProjectSettings *projSettings = GitLab::projectSettings(project); + if (!projSettings->isLinked()) { + dd->notificationTimer.stop(); + return; + } + + dd->fetchEvents(); + dd->setupNotificationTimer(); + } +}; + void GitLabPluginPrivate::setupNotificationTimer() { @@ -146,7 +151,7 @@ void GitLabPluginPrivate::fetchEvents() if (runningQuery) return; - const GitLabProjectSettings *projSettings = GitLabPlugin::projectSettings(project); + const GitLabProjectSettings *projSettings = GitLab::projectSettings(project); projectName = projSettings->currentProject(); serverId = projSettings->currentServer(); @@ -207,6 +212,16 @@ void GitLabPluginPrivate::handleUser(const User &user) createAndSendEventsRequest(timeStamp); } +GitLabProjectSettings *projectSettings(ProjectExplorer::Project *project) +{ + QTC_ASSERT(project, return nullptr); + QTC_ASSERT(dd, return nullptr); + auto &settings = dd->projectSettings[project]; + if (!settings) + settings = new GitLabProjectSettings(project); + return settings; +} + void GitLabPluginPrivate::handleEvents(const Events &events, const QDateTime &timeStamp) { runningQuery = false; @@ -214,7 +229,7 @@ void GitLabPluginPrivate::handleEvents(const Events &events, const QDateTime &ti ProjectExplorer::Project *project = ProjectExplorer::ProjectManager::startupProject(); QTC_ASSERT(project, return); - GitLabProjectSettings *projSettings = GitLabPlugin::projectSettings(project); + GitLabProjectSettings *projSettings = GitLab::projectSettings(project); QTC_ASSERT(projSettings->currentProject() == projectName, return); if (!projSettings->isLinked()) // link state has changed meanwhile - ignore the request @@ -245,17 +260,7 @@ void GitLabPluginPrivate::handleEvents(const Events &events, const QDateTime &ti createAndSendEventsRequest(timeStamp, events.pageInfo.currentPage + 1); } -GitLabProjectSettings *GitLabPlugin::projectSettings(ProjectExplorer::Project *project) -{ - QTC_ASSERT(project, return nullptr); - QTC_ASSERT(dd, return nullptr); - auto &settings = dd->projectSettings[project]; - if (!settings) - settings = new GitLabProjectSettings(project); - return settings; -} - -bool GitLabPlugin::handleCertificateIssue(const Utils::Id &serverId) +bool handleCertificateIssue(const Utils::Id &serverId) { QTC_ASSERT(dd, return false); @@ -280,7 +285,7 @@ bool GitLabPlugin::handleCertificateIssue(const Utils::Id &serverId) return false; } -void GitLabPlugin::linkedStateChanged(bool enabled) +void linkedStateChanged(bool enabled) { QTC_ASSERT(dd, return); @@ -305,3 +310,5 @@ void GitLabPlugin::linkedStateChanged(bool enabled) } } // namespace GitLab + +#include "gitlabplugin.moc" diff --git a/src/plugins/gitlab/gitlabplugin.h b/src/plugins/gitlab/gitlabplugin.h index ba07bf9f21d..9370e97d121 100644 --- a/src/plugins/gitlab/gitlabplugin.h +++ b/src/plugins/gitlab/gitlabplugin.h @@ -3,35 +3,17 @@ #pragma once -#include "gitlabparameters.h" - -#include - namespace ProjectExplorer { class Project; } +namespace Utils { class Id; } namespace GitLab { -class Events; class GitLabProjectSettings; -class GitLabPlugin : public ExtensionSystem::IPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QtCreatorPlugin" FILE "GitLab.json") +GitLabProjectSettings *projectSettings(ProjectExplorer::Project *project); -public: - GitLabPlugin(); - ~GitLabPlugin() override; +bool handleCertificateIssue(const Utils::Id &serverId); - void initialize() override; +void linkedStateChanged(bool enabled); - static GitLabProjectSettings *projectSettings(ProjectExplorer::Project *project); - static bool handleCertificateIssue(const Utils::Id &serverId); - - static void linkedStateChanged(bool enabled); -private: - void openView(); - void onStartupProjectChanged(); -}; - -} // namespace GitLab +} // GitLab diff --git a/src/plugins/gitlab/gitlabprojectsettings.cpp b/src/plugins/gitlab/gitlabprojectsettings.cpp index 4c5c2d2a759..9df5cb53afb 100644 --- a/src/plugins/gitlab/gitlabprojectsettings.cpp +++ b/src/plugins/gitlab/gitlabprojectsettings.cpp @@ -4,6 +4,7 @@ #include "gitlabprojectsettings.h" #include "gitlaboptionspage.h" +#include "gitlabparameters.h" #include "gitlabplugin.h" #include "gitlabtr.h" #include "queryrunner.h" @@ -137,7 +138,7 @@ private: }; GitLabProjectSettingsWidget::GitLabProjectSettingsWidget(ProjectExplorer::Project *project) - : m_projectSettings(GitLabPlugin::projectSettings(project)) + : m_projectSettings(projectSettings(project)) { setUseGlobalSettingsCheckBoxVisible(false); setUseGlobalSettingsLabelVisible(true); @@ -195,7 +196,7 @@ void GitLabProjectSettingsWidget::unlink() m_projectSettings->setLinked(false); m_projectSettings->setCurrentProject({}); updateEnabledStates(); - GitLabPlugin::linkedStateChanged(false); + linkedStateChanged(false); } void GitLabProjectSettingsWidget::checkConnection(CheckMode mode) @@ -258,7 +259,7 @@ void GitLabProjectSettingsWidget::onConnectionChecked(const Project &project, m_projectSettings->setCurrentServerHost(remote); m_projectSettings->setLinked(true); m_projectSettings->setCurrentProject(projectName); - GitLabPlugin::linkedStateChanged(true); + linkedStateChanged(true); } updateEnabledStates(); } @@ -296,10 +297,10 @@ void GitLabProjectSettingsWidget::updateUi() m_hostCB->setCurrentIndex(m_hostCB->findData(QVariant::fromValue(serverHost))); m_linkedGitLabServer->setCurrentIndex( m_linkedGitLabServer->findData(QVariant::fromValue(server))); - GitLabPlugin::linkedStateChanged(true); + linkedStateChanged(true); } else { m_projectSettings->setLinked(false); - GitLabPlugin::linkedStateChanged(false); + linkedStateChanged(false); } } updateEnabledStates(); diff --git a/src/plugins/gitlab/queryrunner.cpp b/src/plugins/gitlab/queryrunner.cpp index ac82a6fca3c..e6e7e59b7b8 100644 --- a/src/plugins/gitlab/queryrunner.cpp +++ b/src/plugins/gitlab/queryrunner.cpp @@ -100,7 +100,7 @@ QueryRunner::QueryRunner(const Query &query, const Id &id, QObject *parent) const int exitCode = m_process.exitCode(); if (m_process.exitStatus() == QProcess::NormalExit && (exitCode == 35 || exitCode == 60) // common ssl certificate issues - && GitLabPlugin::handleCertificateIssue(id)) { + && handleCertificateIssue(id)) { // prepend -k for re-requesting the same query CommandLine cmdline = m_process.commandLine(); cmdline.prependArgs({"-k"});