blob: d76ac9760a35ebb8e3b0558b22ff3cb27a540d70 [file] [log] [blame]
Stepan Salenikovich76c33e62015-05-22 12:24:07 -04001/*
2 * Copyright (C) 2015 Savoir-Faire Linux Inc.
3 * Author: Stepan Salenikovich <stepan.salenikovich@savoirfairelinux.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Additional permission under GNU GPL version 3 section 7:
20 *
21 * If you modify this program, or any covered work, by linking or
22 * combining it with the OpenSSL project's OpenSSL library (or a
23 * modified version of that library), containing parts covered by the
24 * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
25 * grants you additional permission to convey the resulting work.
26 * Corresponding Source for a non-source form of such a combination
27 * shall include the source code for the parts of OpenSSL used as well
28 * as that of the covered work.
29 */
30
31#include "ringnotify.h"
32#include "config.h"
33
34#if USE_LIBNOTIFY
35#include <libnotify/notify.h>
36#include <memory>
37#include "delegates/pixbufdelegate.h"
38#include <call.h>
39#include <QtCore/QSize>
40#endif
41
42void
43ring_notify_init()
44{
45#if USE_LIBNOTIFY
46 notify_init("Ring");
47#endif
48}
49
50void
51ring_notify_uninit()
52{
53#if USE_LIBNOTIFY
54 if (notify_is_initted())
55 notify_uninit();
56#endif
57}
58
59gboolean
60ring_notify_is_initted()
61{
62#if USE_LIBNOTIFY
63 return notify_is_initted();
64#else
65 return FALSE;
66#endif
67}
68
69gboolean
70ring_notify_incoming_call(
71#if !USE_LIBNOTIFY
72 G_GNUC_UNUSED
73#endif
74 Call* call)
75{
76#if USE_LIBNOTIFY
77 g_return_val_if_fail(call, FALSE);
78
79 gchar *body = g_strdup_printf("%s", call->formattedName().toUtf8().constData());
80 NotifyNotification *notification = notify_notification_new("Incoming call", body, NULL);
81
82 /* get photo */
83 QVariant var_p = PixbufDelegate::instance()->callPhoto(
84 call->peerContactMethod(), QSize(50, 50), false);
85 std::shared_ptr<GdkPixbuf> photo = var_p.value<std::shared_ptr<GdkPixbuf>>();
86 notify_notification_set_image_from_pixbuf(notification, photo.get());
87
88 /* calls have highest urgency */
89 notify_notification_set_urgency(notification, NOTIFY_URGENCY_CRITICAL);
90
91 notify_notification_set_timeout(notification, NOTIFY_EXPIRES_DEFAULT);
92
93 GError *error = NULL;
94 if (notify_notification_show(notification, &error)) {
95 return TRUE;
96 } else {
97 g_warning("failed to send notification: %s", error->message);
98 g_clear_error(&error);
99 return FALSE;
100 }
101#else
102 return FALSE;
103#endif
104}