Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-3.0-or-later
2 : : // SPDX-FileCopyrightText: Andy Holmes <andrew.g.r.holmes@gmail.com>
3 : :
4 : : #define G_LOG_DOMAIN "valent-sms-plugin"
5 : :
6 : : #include "config.h"
7 : :
8 : : #include <gio/gio.h>
9 : : #include <json-glib/json-glib.h>
10 : : #include <valent.h>
11 : :
12 : : #include "valent-sms-device.h"
13 : :
14 : : #include "valent-sms-plugin.h"
15 : :
16 : :
17 : : struct _ValentSmsPlugin
18 : : {
19 : : ValentDevicePlugin parent_instance;
20 : :
21 : : ValentMessagesAdapter *adapter;
22 : : };
23 : :
24 [ + + + - ]: 21 : G_DEFINE_FINAL_TYPE (ValentSmsPlugin, valent_sms_plugin, VALENT_TYPE_DEVICE_PLUGIN)
25 : :
26 : : /*
27 : : * GActions
28 : : */
29 : : static void
30 : 1 : sync_action (GSimpleAction *action,
31 : : GVariant *parameter,
32 : : gpointer user_data)
33 : : {
34 : 1 : ValentSmsPlugin *self = VALENT_SMS_PLUGIN (user_data);
35 : 2 : g_autoptr (JsonNode) packet = NULL;
36 : :
37 [ + - ]: 1 : g_assert (VALENT_IS_SMS_PLUGIN (self));
38 : :
39 : 1 : packet = valent_packet_new ("kdeconnect.sms.request_conversations");
40 [ + - ]: 1 : valent_device_plugin_queue_packet (VALENT_DEVICE_PLUGIN (self), packet);
41 : 1 : }
42 : :
43 : : static const GActionEntry actions[] = {
44 : : {"sync", sync_action, NULL, NULL, NULL},
45 : : };
46 : :
47 : : /*
48 : : * ValentDevicePlugin
49 : : */
50 : : static void
51 : 10 : valent_sms_plugin_update_state (ValentDevicePlugin *plugin,
52 : : ValentDeviceState state)
53 : : {
54 : 10 : gboolean available;
55 : :
56 [ + - ]: 10 : g_assert (VALENT_IS_SMS_PLUGIN (plugin));
57 : :
58 : 10 : available = (state & VALENT_DEVICE_STATE_CONNECTED) != 0 &&
59 : : (state & VALENT_DEVICE_STATE_PAIRED) != 0;
60 : :
61 : 10 : valent_extension_toggle_actions (VALENT_EXTENSION (plugin), available);
62 : 10 : }
63 : :
64 : : static void
65 : 7 : valent_sms_plugin_handle_packet (ValentDevicePlugin *plugin,
66 : : const char *type,
67 : : JsonNode *packet)
68 : : {
69 : 7 : ValentSmsPlugin *self = VALENT_SMS_PLUGIN (plugin);
70 : :
71 [ + - ]: 7 : g_assert (VALENT_IS_SMS_PLUGIN (plugin));
72 [ - + ]: 7 : g_assert (type != NULL);
73 [ - + ]: 7 : g_assert (VALENT_IS_PACKET (packet));
74 : :
75 [ + + ]: 7 : if (g_str_equal (type, "kdeconnect.sms.messages"))
76 : 6 : valent_sms_device_handle_messages (VALENT_SMS_DEVICE (self->adapter), packet);
77 [ + - ]: 1 : else if (g_str_equal (type, "kdeconnect.sms.attachment_file"))
78 : 1 : valent_sms_device_handle_attachment_file (VALENT_SMS_DEVICE (self->adapter), packet);
79 : : else
80 : 0 : g_assert_not_reached ();
81 : 7 : }
82 : :
83 : : /*
84 : : * ValentObject
85 : : */
86 : : static void
87 : 6 : valent_sms_plugin_destroy (ValentObject *object)
88 : : {
89 : 6 : ValentSmsPlugin *self = VALENT_SMS_PLUGIN (object);
90 : :
91 [ + + ]: 6 : if (self->adapter != NULL)
92 : : {
93 : 3 : valent_messages_unexport_adapter (valent_messages_get_default (),
94 : : self->adapter);
95 : 3 : valent_object_destroy (VALENT_OBJECT (self->adapter));
96 [ + - ]: 3 : g_clear_object (&self->adapter);
97 : : }
98 : :
99 : 6 : VALENT_OBJECT_CLASS (valent_sms_plugin_parent_class)->destroy (object);
100 : 6 : }
101 : :
102 : : /*
103 : : * GObject
104 : : */
105 : : static void
106 : 3 : valent_sms_plugin_constructed (GObject *object)
107 : : {
108 : 3 : ValentSmsPlugin *self = VALENT_SMS_PLUGIN (object);
109 : 3 : ValentDevice *device = NULL;
110 : :
111 : 3 : G_OBJECT_CLASS (valent_sms_plugin_parent_class)->constructed (object);
112 : :
113 : 3 : device = valent_extension_get_object (VALENT_EXTENSION (self));
114 : 3 : self->adapter = valent_sms_device_new (device);
115 : 3 : valent_messages_export_adapter (valent_messages_get_default (),
116 : : self->adapter);
117 : :
118 : 3 : g_action_map_add_action_entries (G_ACTION_MAP (self),
119 : : actions,
120 : : G_N_ELEMENTS (actions),
121 : : self);
122 : 3 : }
123 : :
124 : : static void
125 : 1 : valent_sms_plugin_class_init (ValentSmsPluginClass *klass)
126 : : {
127 : 1 : GObjectClass *object_class = G_OBJECT_CLASS (klass);
128 : 1 : ValentObjectClass *vobject_class = VALENT_OBJECT_CLASS (klass);
129 : 1 : ValentDevicePluginClass *plugin_class = VALENT_DEVICE_PLUGIN_CLASS (klass);
130 : :
131 : 1 : object_class->constructed = valent_sms_plugin_constructed;
132 : :
133 : 1 : vobject_class->destroy = valent_sms_plugin_destroy;
134 : :
135 : 1 : plugin_class->handle_packet = valent_sms_plugin_handle_packet;
136 : 1 : plugin_class->update_state = valent_sms_plugin_update_state;
137 : : }
138 : :
139 : : static void
140 : 3 : valent_sms_plugin_init (ValentSmsPlugin *self)
141 : : {
142 : 3 : }
143 : :
|