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 : 6 : ValentComponent *component = NULL;
91 : :
92 [ + + ]: 6 : if (self->adapter != NULL)
93 : : {
94 : 3 : component = VALENT_COMPONENT (valent_messages_get_default ());
95 : 3 : valent_component_unexport_adapter (component, VALENT_EXTENSION (self->adapter));
96 : 3 : valent_object_destroy (VALENT_OBJECT (self->adapter));
97 [ + - ]: 3 : g_clear_object (&self->adapter);
98 : : }
99 : :
100 : 6 : VALENT_OBJECT_CLASS (valent_sms_plugin_parent_class)->destroy (object);
101 : 6 : }
102 : :
103 : : /*
104 : : * GObject
105 : : */
106 : : static void
107 : 3 : valent_sms_plugin_constructed (GObject *object)
108 : : {
109 : 3 : ValentSmsPlugin *self = VALENT_SMS_PLUGIN (object);
110 : 3 : ValentComponent *component = NULL;
111 : 3 : ValentDevice *device = NULL;
112 : :
113 : 3 : G_OBJECT_CLASS (valent_sms_plugin_parent_class)->constructed (object);
114 : :
115 : 3 : device = valent_resource_get_source (VALENT_RESOURCE (self));
116 : 3 : self->adapter = valent_sms_device_new (device);
117 : :
118 : 3 : component = VALENT_COMPONENT (valent_messages_get_default ());
119 : 3 : valent_component_export_adapter (component, VALENT_EXTENSION (self->adapter));
120 : :
121 : 3 : g_action_map_add_action_entries (G_ACTION_MAP (self),
122 : : actions,
123 : : G_N_ELEMENTS (actions),
124 : : self);
125 : 3 : }
126 : :
127 : : static void
128 : 1 : valent_sms_plugin_class_init (ValentSmsPluginClass *klass)
129 : : {
130 : 1 : GObjectClass *object_class = G_OBJECT_CLASS (klass);
131 : 1 : ValentObjectClass *vobject_class = VALENT_OBJECT_CLASS (klass);
132 : 1 : ValentDevicePluginClass *plugin_class = VALENT_DEVICE_PLUGIN_CLASS (klass);
133 : :
134 : 1 : object_class->constructed = valent_sms_plugin_constructed;
135 : :
136 : 1 : vobject_class->destroy = valent_sms_plugin_destroy;
137 : :
138 : 1 : plugin_class->handle_packet = valent_sms_plugin_handle_packet;
139 : 1 : plugin_class->update_state = valent_sms_plugin_update_state;
140 : : }
141 : :
142 : : static void
143 : 3 : valent_sms_plugin_init (ValentSmsPlugin *self)
144 : : {
145 : 3 : }
146 : :
|