aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2023-01-12 16:31:00 +0100
committerTim Jenssen <tim.jenssen@qt.io>2023-01-12 15:31:45 +0000
commit960575ee48d3aa62075ece46f565e047b89bcb0c (patch)
treee086885169dfbebec3c3f1532313e7360722d4ef
parent368c1d316b547b986a1f66bf423fc965d41c9190 (diff)
parentf8e83c83d38ff7392504d85a8dc975680e9ceedf (diff)
Merge remote-tracking branch 'origin/8.0' into 9.09.0
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/datasources/applicationsource.cpp53
-rw-r--r--src/datasources/applicationsource.h40
-rw-r--r--src/datasources/kitsource.cpp76
-rw-r--r--src/datasources/kitsource.h14
-rw-r--r--src/datasources/qmldesignerusageeventsource.cpp16
-rw-r--r--src/ui/FeedbackPopup.qml1
-rw-r--r--src/usagestatisticplugin.cpp8
8 files changed, 186 insertions, 23 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 58c0f82..94167a6 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -28,6 +28,7 @@ add_qtc_plugin(UsageStatistic
datasources/qmldesignerusagetimesource.cpp
datasources/qmldesignerusageeventsource.cpp
datasources/servicesource.cpp
+ datasources/applicationsource.cpp
ui/usagestatisticpage.cpp
ui/usagestatisticwidget.cpp
services/datasubmitter.cpp
diff --git a/src/datasources/applicationsource.cpp b/src/datasources/applicationsource.cpp
new file mode 100644
index 0000000..57bf542
--- /dev/null
+++ b/src/datasources/applicationsource.cpp
@@ -0,0 +1,53 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
+
+#include "applicationsource.h"
+
+#include <app/app_version.h>
+#include <coreplugin/coreconstants.h>
+
+#include "common/scopedsettingsgroupsetter.h"
+#include "common/utils.h"
+
+#include <QtCore/QSettings>
+
+namespace UsageStatistic {
+namespace Internal {
+
+using namespace KUserFeedback;
+
+ApplicationSource::ApplicationSource()
+ : AbstractDataSource("applicationData", Provider::BasicSystemInformation)
+{}
+
+QString ApplicationSource::name() const
+{
+ return tr("Application data");
+}
+
+QString ApplicationSource::description() const
+{
+ return tr("The name and version of the application.");
+}
+
+QVariant ApplicationSource::data()
+{
+ return QVariantMap{
+ {"applicationName", Core::Constants::IDE_DISPLAY_NAME},
+ {"applicationVersion", Core::Constants::IDE_VERSION_LONG},
+
+ };
+}
+
+void ApplicationSource::loadImpl(QSettings *settings)
+{
+ auto setter = ScopedSettingsGroupSetter::forDataSource(*this, *settings);
+}
+
+void ApplicationSource::storeImpl(QSettings *settings)
+{
+ auto setter = ScopedSettingsGroupSetter::forDataSource(*this, *settings);
+}
+
+} // namespace Internal
+} // namespace UsageStatistic
diff --git a/src/datasources/applicationsource.h b/src/datasources/applicationsource.h
new file mode 100644
index 0000000..5dc08bb
--- /dev/null
+++ b/src/datasources/applicationsource.h
@@ -0,0 +1,40 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
+
+#pragma once
+
+#include <QtCore/QVariantMap>
+
+#include <KUserFeedback/AbstractDataSource>
+#include <KUserFeedback/Provider>
+
+namespace UsageStatistic {
+namespace Internal {
+
+//! Additional application data
+class ApplicationSource : public KUserFeedback::AbstractDataSource
+{
+ Q_DECLARE_TR_FUNCTIONS(ApplicationSource);
+
+public:
+ ApplicationSource();
+
+public: // AbstractDataSource interface
+ QString name() const override;
+
+ QString description() const override;
+
+ /*! The output data format is:
+ * {
+ * "applicationName": "Qt Creator",
+ * "applicationVersion": "8.0.0"
+ * }
+ */
+ QVariant data() override;
+
+ void loadImpl(QSettings *settings) override;
+ void storeImpl(QSettings *settings) override;
+};
+
+} // Internal
+} // UsageStatistic
diff --git a/src/datasources/kitsource.cpp b/src/datasources/kitsource.cpp
index 9458853..6cf724e 100644
--- a/src/datasources/kitsource.cpp
+++ b/src/datasources/kitsource.cpp
@@ -26,11 +26,17 @@
#include <QtCore/QSettings>
+#include <projectexplorer/buildmanager.h>
+#include <projectexplorer/gcctoolchain.h>
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/kitmanager.h>
+#include <projectexplorer/project.h>
#include <projectexplorer/projectexplorerconstants.h>
-#include <projectexplorer/gcctoolchain.h>
+#include <projectexplorer/session.h>
+#include <projectexplorer/target.h>
+
#include <qtsupport/qtkitinformation.h>
+
#include <debugger/debuggerkitinformation.h>
#include <debugger/debuggeritem.h>
@@ -45,6 +51,18 @@ using namespace ProjectExplorer;
KitSource::KitSource()
: AbstractDataSource(QStringLiteral("kits"), Provider::DetailedUsageStatistics)
{
+ QObject::connect(ProjectExplorer::BuildManager::instance(),
+ &ProjectExplorer::BuildManager::buildQueueFinished,
+ [&](bool success) {
+ const Project *project = SessionManager::startupProject();
+ const Target *target = project ? project->activeTarget() : nullptr;
+ const Kit *kit = target ? target->kit() : nullptr;
+ const ToolChain *toolChain = ToolChainKitAspect::toolChain(kit, Constants::CXX_LANGUAGE_ID);
+ const Abi abi = toolChain ? toolChain->targetAbi() : Abi();
+ const QString abiName = abi.toString();
+ QVariantMap &bucket = success ? m_buildSuccessesForToolChain : m_buildFailsForToolChain;
+ bucket[abiName] = bucket.value(abiName, 0).toInt() + 1;
+ });
}
KitSource::~KitSource() = default;
@@ -60,6 +78,8 @@ QString KitSource::description() const
}
static QString kitsInfoKey() { return QStringLiteral("kitsInfo"); }
+static QString buildSuccessesKey() { return QStringLiteral("buildSuccesses"); }
+static QString buildFailsKey() { return QStringLiteral("buildFails"); }
static QString extractToolChainVersion(const ToolChain &toolChain)
{
@@ -70,9 +90,36 @@ static QString extractToolChainVersion(const ToolChain &toolChain)
}
}
+void KitSource::loadImpl(QSettings *settings)
+{
+ auto setter = ScopedSettingsGroupSetter::forDataSource(*this, *settings);
+ m_buildSuccessesForToolChain = settings->value(buildSuccessesKey(), QVariantMap{}).toMap();
+ m_buildFailsForToolChain = settings->value(buildFailsKey(), QVariantMap{}).toMap();
+}
+
+void KitSource::storeImpl(QSettings *settings)
+{
+ auto setter = ScopedSettingsGroupSetter::forDataSource(*this, *settings);
+ settings->setValue(buildSuccessesKey(), m_buildSuccessesForToolChain);
+ settings->setValue(buildFailsKey(), m_buildFailsForToolChain);
+}
+
+void KitSource::resetImpl(QSettings *settings)
+{
+ m_buildSuccessesForToolChain.clear();
+ m_buildFailsForToolChain.clear();
+
+ storeImpl(settings);
+}
+
class KitInfo
{
public:
+ KitInfo(Kit &kit, const KitSource &source) : m_kit(kit), m_source(source)
+ {
+ addKitInfo();
+ }
+
KitInfo &withQtVersionInfo()
{
static const QString qtKey = QStringLiteral("qt");
@@ -98,9 +145,14 @@ public:
static const QString compilerKey = QStringLiteral("compiler");
if (auto toolChain = ToolChainKitAspect::toolChain(&m_kit, Constants::CXX_LANGUAGE_ID)) {
- m_map.insert(compilerKey,
- QVariantMap{{nameKey(), toolChain->typeDisplayName()},
- {versionKey(), extractToolChainVersion(*toolChain)}});
+ const QString abiName = toolChain->targetAbi().toString();
+ m_map.insert(compilerKey, QVariantMap{
+ {nameKey(), toolChain->typeDisplayName()},
+ {abiKey(), abiName},
+ {versionKey(), extractToolChainVersion(*toolChain)},
+ {buildSuccessesKey(), m_source.m_buildSuccessesForToolChain.value(abiName).toInt()},
+ {buildFailsKey(), m_source.m_buildFailsForToolChain.value(abiName).toInt()}
+ });
}
return *this;
@@ -121,10 +173,7 @@ public:
QVariantMap extract() const { return m_map; }
- static KitInfo forKit(Kit &kit) { return KitInfo(kit); }
-
private: // Methods
- KitInfo(Kit &kit) : m_kit(kit) { addKitInfo(); }
void addKitInfo()
{
@@ -161,18 +210,20 @@ private: // Methods
static QString versionKey() { return QStringLiteral("version"); }
static QString nameKey() { return QStringLiteral("name"); }
+ static QString abiKey() { return QStringLiteral("abi"); }
private: // Data
Kit &m_kit;
+ const KitSource &m_source;
QVariantMap m_map;
};
-static QVariantList kitsInfo()
+QVariant KitSource::data()
{
QVariantList kitsInfoList;
for (auto &&kit : KitManager::instance()->kits()) {
if (kit && kit->isValid()) {
- kitsInfoList << KitInfo::forKit(*kit)
+ kitsInfoList << KitInfo(*kit, *this)
.withCompilerInfo()
.withDebuggerInfo()
.withQtVersionInfo()
@@ -180,12 +231,7 @@ static QVariantList kitsInfo()
}
}
- return kitsInfoList;
-}
-
-QVariant KitSource::data()
-{
- return QVariantMap{{kitsInfoKey(), kitsInfo()}};
+ return QVariantMap{{kitsInfoKey(), kitsInfoList}};
}
} // namespace Internal
diff --git a/src/datasources/kitsource.h b/src/datasources/kitsource.h
index 4256c01..c42e3fe 100644
--- a/src/datasources/kitsource.h
+++ b/src/datasources/kitsource.h
@@ -50,7 +50,10 @@ public: // AbstractDataSource interface
* {
* "compiler": {
* "name" : string,
- * "version": int
+ * "version": int,
+ * "abi": string,
+ * "buildSuccesses": int,
+ * "buildFails": int
* },
* "debugger": {
* "name" : string,
@@ -78,6 +81,15 @@ public: // AbstractDataSource interface
* The version format if "\d+.\d+.\d+".
*/
QVariant data() override;
+
+private:
+ void loadImpl(QSettings *settings);
+ void storeImpl(QSettings *settings);
+ void resetImpl(QSettings *settings);
+
+ friend class KitInfo;
+ QVariantMap m_buildSuccessesForToolChain;
+ QVariantMap m_buildFailsForToolChain;
};
} // namespace Internal
diff --git a/src/datasources/qmldesignerusageeventsource.cpp b/src/datasources/qmldesignerusageeventsource.cpp
index 00a614b..06fc090 100644
--- a/src/datasources/qmldesignerusageeventsource.cpp
+++ b/src/datasources/qmldesignerusageeventsource.cpp
@@ -138,9 +138,19 @@ void QmlDesignerUsageEventSource::handleUsageStatisticsUsageTimer(const QString
it.value() = it.value().toInt() + elapsed;
// Show the user feedback prompt after time limit is passed
- static const QSet<QString> supportedViews {"Form Editor", "3D Editor", "Timeline",
- "Transition Editor", "Curve Editor"};
- static const int timeLimit = 864'000'000; // 10 days
+ static const QSet<QString> supportedViews{"formEditor",
+ "3DEditor",
+ "statesEditor,",
+ "timeline",
+ "itemLibrary",
+ "assetsLibrary",
+ "transitionEditor",
+ "curveEditor",
+ "propertyEditor",
+ "textEditor",
+ "materialBrowser",
+ "navigatorView"};
+ static const int timeLimit = 864'000'00; // 1 day
if (supportedViews.contains(identifier) && !m_feedbackPoppedData[identifier].toBool()
&& m_timeData.value(identifier).toInt() >= timeLimit) {
launchPopup(identifier);
diff --git a/src/ui/FeedbackPopup.qml b/src/ui/FeedbackPopup.qml
index 705c0ba..a8b5455 100644
--- a/src/ui/FeedbackPopup.qml
+++ b/src/ui/FeedbackPopup.qml
@@ -25,7 +25,6 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
-import QtQuick.Controls.Styles 1.4
import QtQuick.Window 2.15
Rectangle {
diff --git a/src/usagestatisticplugin.cpp b/src/usagestatisticplugin.cpp
index 98689eb..aa8ce90 100644
--- a/src/usagestatisticplugin.cpp
+++ b/src/usagestatisticplugin.cpp
@@ -49,14 +49,15 @@
#include <KUserFeedback/UsageTimeSource>
#include <KUserFeedback/StyleInfoSource>
-#include "datasources/qtclicensesource.h"
+#include "datasources/applicationsource.h".h "
#include "datasources/buildcountsource.h"
#include "datasources/buildsystemsource.h"
-#include "datasources/modeusagetimesource.h"
#include "datasources/examplesdatasource.h"
#include "datasources/kitsource.h"
-#include "datasources/qmldesignerusagetimesource.h"
+#include "datasources/modeusagetimesource.h"
#include "datasources/qmldesignerusageeventsource.h"
+#include "datasources/qmldesignerusagetimesource.h"
+#include "datasources/qtclicensesource.h"
#include "datasources/servicesource.h"
#include "services/datasubmitter.h"
@@ -102,6 +103,7 @@ static void addDefaultDataSources(KUserFeedback::Provider &provider)
static void addQtCreatorDataSources(KUserFeedback::Provider &provider)
{
+ provider.addDataSource(new ApplicationSource);
provider.addDataSource(new QtcLicenseSource);
provider.addDataSource(new BuildCountSource);
provider.addDataSource(new BuildSystemSource);