| 
									
										
										
										
											2016-10-02 12:30:28 +03:00
										 |  |  | /*
 | 
					
						
							|  |  |  | This file is part of Telegram Desktop, | 
					
						
							| 
									
										
										
										
											2018-01-03 13:23:14 +03:00
										 |  |  | the official desktop application for the Telegram messaging service. | 
					
						
							| 
									
										
										
										
											2016-10-02 12:30:28 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-03 13:23:14 +03:00
										 |  |  | For license and copyright information please follow this link: | 
					
						
							|  |  |  | https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | 
					
						
							| 
									
										
										
										
											2016-10-02 12:30:28 +03:00
										 |  |  | */ | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 13:51:00 +03:00
										 |  |  | #include "platform/platform_notifications_manager.h"
 | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | #include "base/weak_ptr.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-21 16:51:39 +04:00
										 |  |  | #ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION
 | 
					
						
							| 
									
										
										
										
											2020-03-02 19:55:29 +04:00
										 |  |  | #include <QtDBus/QDBusConnection>
 | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | #include <QtDBus/QDBusArgument>
 | 
					
						
							| 
									
										
										
										
											2020-02-29 07:42:24 +04:00
										 |  |  | #endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION
 | 
					
						
							| 
									
										
										
										
											2016-10-02 12:30:28 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace Platform { | 
					
						
							|  |  |  | namespace Notifications { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-21 16:51:39 +04:00
										 |  |  | #ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION
 | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | class NotificationData : public QObject { | 
					
						
							|  |  |  | 	Q_OBJECT | 
					
						
							| 
									
										
										
										
											2017-03-04 22:36:59 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-03 11:56:03 +03:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2020-06-19 16:59:31 +04:00
										 |  |  | 	using NotificationId = Window::Notifications::Manager::NotificationId; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | 	NotificationData( | 
					
						
							|  |  |  | 		const base::weak_ptr<Manager> &manager, | 
					
						
							| 
									
										
										
										
											2020-02-22 20:36:01 +04:00
										 |  |  | 		const QString &title, | 
					
						
							|  |  |  | 		const QString &subtitle, | 
					
						
							|  |  |  | 		const QString &msg, | 
					
						
							| 
									
										
										
										
											2020-06-24 13:05:56 +04:00
										 |  |  | 		NotificationId id, | 
					
						
							| 
									
										
										
										
											2020-02-22 20:36:01 +04:00
										 |  |  | 		bool hideReplyButton); | 
					
						
							| 
									
										
										
										
											2016-10-04 16:36:50 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | 	NotificationData(const NotificationData &other) = delete; | 
					
						
							|  |  |  | 	NotificationData &operator=(const NotificationData &other) = delete; | 
					
						
							|  |  |  | 	NotificationData(NotificationData &&other) = delete; | 
					
						
							|  |  |  | 	NotificationData &operator=(NotificationData &&other) = delete; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-25 03:45:46 +04:00
										 |  |  | 	bool show(); | 
					
						
							| 
									
										
										
										
											2020-03-02 19:55:29 +04:00
										 |  |  | 	void close(); | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | 	void setImage(const QString &imagePath); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct ImageData { | 
					
						
							|  |  |  | 		int width, height, rowStride; | 
					
						
							|  |  |  | 		bool hasAlpha; | 
					
						
							|  |  |  | 		int bitsPerSample, channels; | 
					
						
							|  |  |  | 		QByteArray data; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2020-03-02 19:55:29 +04:00
										 |  |  | 	QDBusConnection _dbusConnection; | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | 	base::weak_ptr<Manager> _manager; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	QString _title; | 
					
						
							|  |  |  | 	QString _body; | 
					
						
							|  |  |  | 	QStringList _actions; | 
					
						
							|  |  |  | 	QVariantMap _hints; | 
					
						
							| 
									
										
										
										
											2020-02-25 03:45:46 +04:00
										 |  |  | 	QString _imageKey; | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-19 16:59:31 +04:00
										 |  |  | 	uint _notificationId = 0; | 
					
						
							| 
									
										
										
										
											2020-06-24 13:05:56 +04:00
										 |  |  | 	NotificationId _id; | 
					
						
							| 
									
										
										
										
											2016-10-03 18:07:50 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | private slots: | 
					
						
							|  |  |  | 	void notificationClosed(uint id); | 
					
						
							| 
									
										
										
										
											2020-03-06 09:55:22 +04:00
										 |  |  | 	void actionInvoked(uint id, const QString &actionName); | 
					
						
							| 
									
										
										
										
											2020-01-21 13:27:50 +01:00
										 |  |  | 	void notificationReplied(uint id, const QString &text); | 
					
						
							| 
									
										
										
										
											2020-06-24 13:05:56 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using Notification = std::shared_ptr<NotificationData>; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-22 20:36:01 +04:00
										 |  |  | QDBusArgument &operator<<( | 
					
						
							|  |  |  | 	QDBusArgument &argument, | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | 	const NotificationData::ImageData &imageData); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-22 20:36:01 +04:00
										 |  |  | const QDBusArgument &operator>>( | 
					
						
							|  |  |  | 	const QDBusArgument &argument, | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | 	NotificationData::ImageData &imageData); | 
					
						
							| 
									
										
										
										
											2020-06-22 05:28:23 +04:00
										 |  |  | #endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION
 | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Manager | 
					
						
							|  |  |  | 	: public Window::Notifications::NativeManager | 
					
						
							|  |  |  | 	, public base::has_weak_ptr { | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2020-02-29 07:42:24 +04:00
										 |  |  | 	Manager(not_null<Window::Notifications::System*> system); | 
					
						
							| 
									
										
										
										
											2020-06-19 16:59:31 +04:00
										 |  |  | 	void clearNotification(NotificationId id); | 
					
						
							| 
									
										
										
										
											2016-10-03 11:56:03 +03:00
										 |  |  | 	~Manager(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | protected: | 
					
						
							| 
									
										
										
										
											2019-08-28 17:24:12 +03:00
										 |  |  | 	void doShowNativeNotification( | 
					
						
							|  |  |  | 		not_null<PeerData*> peer, | 
					
						
							| 
									
										
										
										
											2020-05-29 20:55:01 +04:00
										 |  |  | 		std::shared_ptr<Data::CloudImageView> &userpicView, | 
					
						
							| 
									
										
										
										
											2019-08-28 17:24:12 +03:00
										 |  |  | 		MsgId msgId, | 
					
						
							|  |  |  | 		const QString &title, | 
					
						
							|  |  |  | 		const QString &subtitle, | 
					
						
							|  |  |  | 		const QString &msg, | 
					
						
							|  |  |  | 		bool hideNameAndPhoto, | 
					
						
							|  |  |  | 		bool hideReplyButton) override; | 
					
						
							| 
									
										
										
										
											2016-10-03 11:56:03 +03:00
										 |  |  | 	void doClearAllFast() override; | 
					
						
							| 
									
										
										
										
											2019-08-30 17:06:21 +03:00
										 |  |  | 	void doClearFromHistory(not_null<History*> history) override; | 
					
						
							| 
									
										
										
										
											2020-06-19 16:59:31 +04:00
										 |  |  | 	void doClearFromSession(not_null<Main::Session*> session) override; | 
					
						
							| 
									
										
										
										
											2016-10-03 11:56:03 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2017-03-04 22:36:59 +03:00
										 |  |  | 	class Private; | 
					
						
							|  |  |  | 	const std::unique_ptr<Private> _private; | 
					
						
							| 
									
										
										
										
											2016-10-03 11:56:03 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-02 12:30:28 +03:00
										 |  |  | } // namespace Notifications
 | 
					
						
							|  |  |  | } // namespace Platform
 | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-21 16:51:39 +04:00
										 |  |  | #ifndef TDESKTOP_DISABLE_DBUS_INTEGRATION
 | 
					
						
							| 
									
										
										
										
											2019-12-29 15:41:45 +00:00
										 |  |  | Q_DECLARE_METATYPE(Platform::Notifications::NotificationData::ImageData) | 
					
						
							| 
									
										
										
										
											2020-02-29 07:42:24 +04:00
										 |  |  | #endif // !TDESKTOP_DISABLE_DBUS_INTEGRATION
 |