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