File indexing completed on 2024-04-21 16:12:15

0001 /*******************************************************************
0002  * reportinterface.h
0003  * SPDX-FileCopyrightText: 2009, 2011 Dario Andres Rodriguez <andresbajotierra@gmail.com>
0004  * SPDX-FileCopyrightText: 2009 George Kiagiadakis <gkiagia@users.sourceforge.net>
0005  * SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org>
0006  *
0007  * SPDX-License-Identifier: GPL-2.0-or-later
0008  *
0009  ******************************************************************/
0010 
0011 #ifndef REPORTINTERFACE__H
0012 #define REPORTINTERFACE__H
0013 
0014 #include <QObject>
0015 #include <QStringList>
0016 
0017 #include "sentrybeacon.h"
0018 
0019 namespace Bugzilla
0020 {
0021 class NewBug;
0022 } // namespace Bugzilla
0023 
0024 class BugzillaManager;
0025 class ProductMapping;
0026 
0027 class ReportInterface : public QObject
0028 {
0029     Q_OBJECT
0030     Q_PROPERTY(BugzillaManager *bugzilla READ bugzillaManager CONSTANT)
0031     Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged)
0032     Q_PROPERTY(QString detailText MEMBER m_reportDetailText WRITE setDetailText NOTIFY detailTextChanged)
0033     Q_PROPERTY(bool userRememberCrashSitutation MEMBER m_userRememberCrashSituation NOTIFY awarenessChanged)
0034     Q_PROPERTY(Reproducible reproducible MEMBER m_reproducible NOTIFY awarenessChanged)
0035     Q_PROPERTY(bool provideActionsApplicationDesktop MEMBER m_provideActionsApplicationDesktop NOTIFY awarenessChanged)
0036 
0037     Q_PROPERTY(bool provideUnusualBehavior MEMBER m_provideUnusualBehavior NOTIFY provideUnusualBehaviorChanged)
0038     Q_PROPERTY(bool provideApplicationConfigurationDetails MEMBER m_provideApplicationConfigurationDetails NOTIFY awarenessChanged)
0039     Q_PROPERTY(QString backtrace READ backtrace WRITE setBacktrace NOTIFY backtraceChanged)
0040 
0041     Q_PROPERTY(bool isBugAwarenessPageDataUseful READ isBugAwarenessPageDataUseful NOTIFY awarenessChanged)
0042 
0043     Q_PROPERTY(uint attachToBugNumber READ attachToBugNumber WRITE setAttachToBugNumber NOTIFY attachToBugNumberChanged)
0044     Q_PROPERTY(uint duplicateId READ duplicateId WRITE setDuplicateId NOTIFY duplicateIdChanged)
0045 
0046     Q_PROPERTY(uint sentReport MEMBER m_sentReport NOTIFY done)
0047 public:
0048     enum Reproducible {
0049         ReproducibleUnsure,
0050         ReproducibleNever,
0051         ReproducibleSometimes,
0052         ReproducibleEverytime,
0053     };
0054     Q_ENUM(Reproducible)
0055 
0056     enum class Backtrace {
0057         Complete,
0058         Reduced,
0059         Exclude,
0060     };
0061     Q_ENUM(Backtrace)
0062 
0063     enum class DrKonqiStamp {
0064         Include,
0065         Exclude,
0066     };
0067     Q_ENUM(DrKonqiStamp)
0068 
0069     explicit ReportInterface(QObject *parent = nullptr);
0070     Q_SIGNAL void awarenessChanged();
0071 
0072     Q_INVOKABLE void setBugAwarenessPageData(bool, ReportInterface::Reproducible, bool, bool, bool);
0073     bool isBugAwarenessPageDataUseful() const;
0074 
0075     Q_INVOKABLE int selectedOptionsRating() const;
0076 
0077     Q_INVOKABLE QStringList firstBacktraceFunctions() const;
0078     Q_INVOKABLE void setFirstBacktraceFunctions(const QStringList &functions);
0079 
0080     QString backtrace() const;
0081     void setBacktrace(const QString &backtrace);
0082     Q_SIGNAL void backtraceChanged();
0083 
0084     QString title() const;
0085     void setTitle(const QString &text);
0086     Q_SIGNAL void titleChanged();
0087 
0088     void setDetailText(const QString &text);
0089     Q_SIGNAL void detailTextChanged();
0090 
0091     Q_INVOKABLE void setPossibleDuplicates(const QStringList &duplicatesList);
0092     Q_INVOKABLE QString generateReportFullText(ReportInterface::DrKonqiStamp stamp, ReportInterface::Backtrace inlineBacktrace) const;
0093 
0094     Bugzilla::NewBug newBugReportTemplate() const;
0095 
0096     Q_INVOKABLE QStringList relatedBugzillaProducts() const;
0097 
0098     bool isWorthReporting() const;
0099 
0100     // Zero means creating a new bug report
0101     void setAttachToBugNumber(uint);
0102     uint attachToBugNumber() const;
0103     Q_SIGNAL void attachToBugNumberChanged();
0104 
0105     // Zero means there is no duplicate
0106     void setDuplicateId(uint);
0107     uint duplicateId() const;
0108     Q_SIGNAL void duplicateIdChanged();
0109 
0110     void setPossibleDuplicatesByQuery(const QStringList &);
0111 
0112     BugzillaManager *bugzillaManager() const;
0113     ProductMapping *productMapping() const;
0114 
0115     bool userCanProvideActionsAppDesktop() const
0116     {
0117         return m_provideActionsApplicationDesktop;
0118     }
0119 
0120     bool userCanProvideUnusualBehavior() const
0121     {
0122         return m_provideUnusualBehavior;
0123     }
0124 
0125     bool userCanProvideApplicationConfigDetails() const
0126     {
0127         return m_provideApplicationConfigurationDetails;
0128     }
0129 
0130 public Q_SLOTS:
0131     void sendCrashEvent();
0132     void sendCrashComment();
0133     void sendBugReport();
0134 
0135 private Q_SLOTS:
0136     void sendUsingDefaultProduct() const;
0137     // Attach backtrace to bug and use collected report as comment.
0138     void attachBacktraceWithReport();
0139     void attachSent(int);
0140 
0141 Q_SIGNALS:
0142     void done();
0143     void sendReportError(const QString &);
0144     void provideUnusualBehaviorChanged();
0145 
0146 private:
0147     // Attach backtrace to bug. Only used internally when the comment isn't
0148     // meant to be the full report.
0149     void attachBacktrace(const QString &comment);
0150     void sendToSentry();
0151     void maybeDone();
0152 
0153     QString generateAttachmentComment() const;
0154 
0155     // Information the user can provide
0156     bool m_userRememberCrashSituation;
0157     Reproducible m_reproducible;
0158     bool m_provideActionsApplicationDesktop;
0159     bool m_provideUnusualBehavior;
0160     bool m_provideApplicationConfigurationDetails;
0161 
0162     QString m_backtrace;
0163     QStringList m_firstBacktraceFunctions;
0164 
0165     QString m_reportTitle;
0166     QString m_reportDetailText;
0167     QStringList m_possibleDuplicates;
0168 
0169     QStringList m_allPossibleDuplicatesByQuery;
0170 
0171     uint m_attachToBugNumber;
0172     uint m_duplicate;
0173 
0174     ProductMapping *m_productMapping = nullptr;
0175     BugzillaManager *m_bugzillaManager = nullptr;
0176 
0177     SentryBeacon m_sentryBeacon;
0178     bool m_sentryEventSent = false;
0179     bool m_sentryUserFeedbackSent = false;
0180     uint m_sentReport = 0;
0181 };
0182 
0183 #endif