summaryrefslogtreecommitdiff
path: root/notification.h
blob: 2eb00f11b40457175cfb6c346a2f981281ab52dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 *  libwatchfish - library with common functionality for SailfishOS smartwatch connector programs.
 *  Copyright (C) 2015 Javier S. Pedro <dev.git@javispedro.com>
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef WATCHFISH_NOTIFICATION_H
#define WATCHFISH_NOTIFICATION_H

#include <QtCore/QObject>
#include <QtCore/QDateTime>
#include <QtCore/QStringList>

namespace watchfish
{

class NotificationPrivate;

class Notification : public QObject
{
	Q_OBJECT
	Q_DECLARE_PRIVATE(Notification)

	/** Notification ID */
	Q_PROPERTY(uint id READ id CONSTANT)
	/** Binary/harbour name of sending program */
	Q_PROPERTY(QString appId READ appId WRITE setAppId NOTIFY appIdChanged)
	/** Human readable name of sender program */
	Q_PROPERTY(QString appName READ appName WRITE setAppName NOTIFY appNameChanged)
	Q_PROPERTY(QString summary READ summary WRITE setSummary NOTIFY summaryChanged)
	Q_PROPERTY(QString body READ body WRITE setBody NOTIFY bodyChanged)
	Q_PROPERTY(QDateTime timestamp READ timestamp WRITE setTimestamp NOTIFY timestampChanged)
	/** Icon file path */
	Q_PROPERTY(QString icon READ icon WRITE setIcon NOTIFY iconChanged)
	Q_PROPERTY(int urgency READ urgency WRITE setUrgency NOTIFY urgencyChanged)
	Q_PROPERTY(bool transient READ transient WRITE setTransient NOTIFY transientChanged)

	/* Nemo stuff */
	Q_PROPERTY(QString previewSummary READ previewSummary WRITE setPreviewSummary NOTIFY previewSummaryChanged)
	Q_PROPERTY(QString previewBody READ previewBody WRITE setPreviewBody NOTIFY previewBodyChanged)

	Q_PROPERTY(QStringList actions READ actions NOTIFY actionsChanged)

	Q_ENUMS(CloseReason)

public:
	explicit Notification(uint id, QObject *parent = 0);
	~Notification();

	enum CloseReason {
		Expired = 1,
		DismissedByUser = 2,
		DismissedByProgram = 3,
		ClosedOther = 4
	};

	uint id() const;

	QString appId() const;
	void setAppId(const QString &appId);

	QString appName() const;
	void setAppName(const QString &appName);

	QString summary() const;
	void setSummary(const QString &summary);

	QString body() const;
	void setBody(const QString &body);

	QDateTime timestamp() const;
	void setTimestamp(const QDateTime &dt);

	QString icon() const;
	void setIcon(const QString &icon);

	int urgency() const;
	void setUrgency(int urgency);

	bool transient() const;
	void setTransient(bool transient);

	QString previewSummary() const;
	void setPreviewSummary(const QString &summary);

	QString previewBody() const;
	void setPreviewBody(const QString &body);

	QStringList actions() const;
	void addDBusAction(const QString &action, const QString &service, const QString &path, const QString &iface, const QString &method, const QStringList &args = QStringList());

public slots:
	void invokeAction(const QString &action);
	void close();

signals:
	void appIdChanged();
	void appNameChanged();
	void summaryChanged();
	void bodyChanged();
	void timestampChanged();
	void iconChanged();
	void urgencyChanged();
	void transientChanged();

	void previewSummaryChanged();
	void previewBodyChanged();

	void actionsChanged();

	void closed(CloseReason reason);

private:
	NotificationPrivate * const d_ptr;
};

}

#endif // WATCHFISH_NOTIFICATION_H