1 /*******************************************************************
2  * reportinterface.h
3  * SPDX-FileCopyrightText: 2009, 2011 Dario Andres Rodriguez <andresbajotierra@gmail.com>
4  * SPDX-FileCopyrightText: 2009 George Kiagiadakis <gkiagia@users.sourceforge.net>
5  *
6  * SPDX-License-Identifier: GPL-2.0-or-later
7  *
8  ******************************************************************/
9 
10 #ifndef REPORTINTERFACE__H
11 #define REPORTINTERFACE__H
12 
13 #include <QObject>
14 #include <QStringList>
15 
16 namespace Bugzilla
17 {
18 class NewBug;
19 }
20 
21 class BugzillaManager;
22 class ProductMapping;
23 class ApplicationDetailsExamples;
24 
25 class ReportInterface : public QObject
26 {
27     Q_OBJECT
28 public:
29     enum Reproducible {
30         ReproducibleUnsure,
31         ReproducibleNever,
32         ReproducibleSometimes,
33         ReproducibleEverytime,
34     };
35 
36     enum class Backtrace {
37         Complete,
38         Reduced,
39         Exclude,
40     };
41 
42     enum class DrKonqiStamp {
43         Include,
44         Exclude,
45     };
46 
47     explicit ReportInterface(QObject *parent = nullptr);
48 
49     void setBugAwarenessPageData(bool, Reproducible, bool, bool, bool);
50     bool isBugAwarenessPageDataUseful() const;
51 
52     int selectedOptionsRating() const;
53 
54     QStringList firstBacktraceFunctions() const;
55     void setFirstBacktraceFunctions(const QStringList &functions);
56 
57     QString backtrace() const;
58     void setBacktrace(const QString &backtrace);
59 
60     QString title() const;
61     void setTitle(const QString &text);
62 
63     void setDetailText(const QString &text);
64     void setPossibleDuplicates(const QStringList &duplicatesList);
65 
66     QString generateReportFullText(DrKonqiStamp stamp, Backtrace inlineBacktrace) const;
67 
68     Bugzilla::NewBug newBugReportTemplate() const;
69 
70     QStringList relatedBugzillaProducts() const;
71 
72     bool isWorthReporting() const;
73 
74     // Zero means creating a new bug report
75     void setAttachToBugNumber(uint);
76     uint attachToBugNumber() const;
77 
78     // Zero means there is no duplicate
79     void setDuplicateId(uint);
80     uint duplicateId() const;
81 
82     void setPossibleDuplicatesByQuery(const QStringList &);
83 
84     BugzillaManager *bugzillaManager() const;
85     ApplicationDetailsExamples *appDetailsExamples() const;
86     ProductMapping *productMapping() const;
87 
userCanProvideActionsAppDesktop()88     bool userCanProvideActionsAppDesktop() const
89     {
90         return m_provideActionsApplicationDesktop;
91     }
92 
userCanProvideUnusualBehavior()93     bool userCanProvideUnusualBehavior() const
94     {
95         return m_provideUnusualBehavior;
96     }
97 
userCanProvideApplicationConfigDetails()98     bool userCanProvideApplicationConfigDetails() const
99     {
100         return m_provideApplicationConfigurationDetails;
101     }
102 
103 public Q_SLOTS:
104     void sendBugReport();
105 
106 private Q_SLOTS:
107     void sendUsingDefaultProduct() const;
108     // Attach backtrace to bug and use collected report as comment.
109     void attachBacktraceWithReport();
110     void attachSent(int);
111 
112 Q_SIGNALS:
113     void reportSent(int);
114     void sendReportError(const QString &);
115 
116 private:
117     // Attach backtrace to bug. Only used internally when the comment isn't
118     // meant to be the full report.
119     void attachBacktrace(const QString &comment);
120 
121     QString generateAttachmentComment() const;
122 
123     // Information the user can provide
124     bool m_userRememberCrashSituation;
125     Reproducible m_reproducible;
126     bool m_provideActionsApplicationDesktop;
127     bool m_provideUnusualBehavior;
128     bool m_provideApplicationConfigurationDetails;
129 
130     QString m_backtrace;
131     QStringList m_firstBacktraceFunctions;
132 
133     QString m_reportTitle;
134     QString m_reportDetailText;
135     QStringList m_possibleDuplicates;
136 
137     QStringList m_allPossibleDuplicatesByQuery;
138 
139     uint m_attachToBugNumber;
140     uint m_duplicate;
141 
142     ProductMapping *m_productMapping = nullptr;
143     BugzillaManager *m_bugzillaManager = nullptr;
144     ApplicationDetailsExamples *m_appDetailsExamples = nullptr;
145 };
146 
147 #endif
148