File indexing completed on 2024-11-10 04:54:52
0001 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0002 // SPDX-FileCopyrightText: 2020-2022 Harald Sitter <sitter@kde.org> 0003 0004 #pragma once 0005 0006 #include <QFileInfo> 0007 #include <QObject> 0008 0009 #include <automaticcoredumpexcavator.h> 0010 0011 class Coredump; 0012 class Patient : public QObject 0013 { 0014 Q_OBJECT 0015 0016 QString m_origCoreFilename; 0017 QFileInfo m_coreFileInfo; 0018 0019 #define MEMBER_PROPERTY(type, name) \ 0020 Q_PROPERTY(type name MEMBER m_##name NOTIFY changed) \ 0021 type m_##name 0022 0023 // NB: these all share the same changed signal but its only ever emitted once. 0024 // They are effectively CONSTANT, but not really because they change during construction. 0025 MEMBER_PROPERTY(int, signal) = -1; 0026 MEMBER_PROPERTY(QString, appName); 0027 MEMBER_PROPERTY(pid_t, pid) = 0; 0028 MEMBER_PROPERTY(time_t, timestamp) = 0; 0029 #undef MEMBER_PROPERTY 0030 Q_PROPERTY(bool canDebug READ canDebug NOTIFY changed) 0031 Q_PROPERTY(QString dateTime READ dateTime NOTIFY changed) 0032 Q_PROPERTY(QString iconName READ iconName CONSTANT) 0033 public: 0034 explicit Patient(const Coredump &dump); 0035 0036 QStringList coredumpctlArguments(const QString &command) const; 0037 0038 bool canDebug(); 0039 Q_INVOKABLE void debug(); 0040 QString dateTime() const; 0041 QString iconName() const; 0042 0043 Q_SIGNALS: 0044 void changed(); 0045 0046 private Q_SLOTS: 0047 void launchDebugger(); 0048 0049 private: 0050 const QByteArray m_coredumpExe; 0051 const QByteArray m_coredumpCom; 0052 QString m_iconName; 0053 std::unique_ptr<AutomaticCoredumpExcavator> m_excavator; 0054 }; 0055 0056 Q_DECLARE_METATYPE(time_t) 0057 Q_DECLARE_METATYPE(pid_t)