protocols/demo/purpledemoprotocolconversation.c

Sun, 03 Nov 2024 00:05:44 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Sun, 03 Nov 2024 00:05:44 -0500
changeset 43045
308e8d0ce68c
parent 43030
97ed7473351f
child 43066
850400fb36c0
permissions
-rw-r--r--

remove purple3-url-handler.desktop.in.in

The application that did the launching was removed long ago. Also this should
be implemented by the user interfaces and they might provide separate files to
groups schemas as well.

Testing Done:
Called in the turtles.

Reviewed at https://reviews.imfreedom.org/r/3640/

42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Purple - Internet Messaging Library
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 *
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 * Lesser General Public License for more details.
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 *
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * License along with this library; if not, see <https://www.gnu.org/licenses/>.
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 */
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 #include <glib/gi18n-lib.h>
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 #include "purpledemoprotocolconversation.h"
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
42675
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
23 #include "purpledemoplugin.h"
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
24 #include "purpledemoprotocol.h"
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
25
42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26 typedef struct {
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 PurpleConversation *conversation;
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28 PurpleMessage *message;
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 } PurpleDemoProtocolIMInfo;
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30
42675
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
31 /******************************************************************************
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
32 * Helpers
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
33 *****************************************************************************/
42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 static void
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 purple_demo_protocol_im_info_free(PurpleDemoProtocolIMInfo *info) {
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 g_clear_object(&info->conversation);
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 g_clear_object(&info->message);
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 g_free(info);
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 }
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40
42675
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
41 static gint
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
42 purple_demo_protocol_contact_sort(gconstpointer a, gconstpointer b,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
43 G_GNUC_UNUSED gpointer data)
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
44 {
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
45 return purple_contact_info_compare(PURPLE_CONTACT_INFO((gpointer)a),
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
46 PURPLE_CONTACT_INFO((gpointer)b));
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
47 }
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
48
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
49 static char *
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
50 purple_demo_protocol_generate_conversation_id(PurpleAccount *account,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
51 PurpleCreateConversationDetails *details)
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
52 {
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
53 GChecksum *checksum = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
54 GListModel *participants = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
55 GListStore *sorted = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
56 char *ret = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
57 const char *id = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
58
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
59 /* Sort the participants. */
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
60 sorted = g_list_store_new(PURPLE_TYPE_CONTACT);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
61 participants = purple_create_conversation_details_get_participants(details);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
62 for(guint i = 0; i < g_list_model_get_n_items(participants); i++) {
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
63 PurpleContactInfo *info = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
64
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
65 info = g_list_model_get_item(participants, i);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
66 g_list_store_insert_sorted(sorted, info,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
67 purple_demo_protocol_contact_sort,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
68 NULL);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
69 g_clear_object(&info);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
70 }
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
71
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
72 /* Build a checksum of the account and the sorted participants. */
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
73 checksum = g_checksum_new(G_CHECKSUM_SHA256);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
74
42803
984f8dfabb47 Update the protocols to use get id and username directly on PurpleAccount
Gary Kramlich <grim@reaperworld.com>
parents: 42738
diff changeset
75 id = purple_account_get_id(account);
42675
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
76 g_checksum_update(checksum, (guchar *)id, -1);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
77
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
78 for(guint i = 0; i < g_list_model_get_n_items(G_LIST_MODEL(sorted)); i++) {
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
79 PurpleContactInfo *info = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
80
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
81 info = g_list_model_get_item(G_LIST_MODEL(sorted), i);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
82 id = purple_contact_info_get_id(info);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
83 g_checksum_update(checksum, (guchar *)id, -1);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
84 g_clear_object(&info);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
85 }
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
86
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
87 ret = g_strdup(g_checksum_get_string(checksum));
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
88
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
89 g_clear_pointer(&checksum, g_checksum_free);
42888
ed22ea598bec Fix a couple of memory leaks in the demo plugin
Markus Fischer <ivanhoe@fiscari.de>
parents: 42826
diff changeset
90 g_clear_object(&sorted);
42675
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
91
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
92 return ret;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
93 }
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
94
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
95 /******************************************************************************
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
96 * Callbacks
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
97 *****************************************************************************/
42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
98 static gboolean
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
99 purple_demo_protocol_echo_im_cb(gpointer data) {
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
100 PurpleDemoProtocolIMInfo *info = data;
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
101
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
102 purple_conversation_write_message(info->conversation, info->message);
42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
103
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
104 return G_SOURCE_REMOVE;
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
105 }
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
106
42675
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
107 /******************************************************************************
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
108 * PurpleProtocolConversation Implementation
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
109 *****************************************************************************/
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
110 static PurpleCreateConversationDetails *
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
111 purple_demo_protocol_get_create_conversation_details(G_GNUC_UNUSED PurpleProtocolConversation *protocol,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
112 G_GNUC_UNUSED PurpleAccount *account)
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
113 {
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
114 return purple_create_conversation_details_new(9);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
115 }
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
116
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
117 static void
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
118 purple_demo_protocol_create_conversation_async(PurpleProtocolConversation *protocol,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
119 PurpleAccount *account,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
120 PurpleCreateConversationDetails *details,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
121 GCancellable *cancellable,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
122 GAsyncReadyCallback callback,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
123 gpointer data)
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
124 {
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
125 PurpleConversation *conversation = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
126 PurpleConversationManager *manager = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
127 PurpleConversationType type = PURPLE_CONVERSATION_TYPE_UNSET;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
128 GListModel *participants = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
129 GTask *task = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
130 char *id = NULL;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
131
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
132 task = g_task_new(protocol, cancellable, callback, data);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
133 g_task_set_source_tag(task,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
134 purple_demo_protocol_create_conversation_async);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
135
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
136 participants = purple_create_conversation_details_get_participants(details);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
137 if(g_list_model_get_n_items(participants) == 1) {
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
138 type = PURPLE_CONVERSATION_TYPE_DM;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
139 } else {
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
140 type = PURPLE_CONVERSATION_TYPE_GROUP_DM;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
141 }
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
142 id = purple_demo_protocol_generate_conversation_id(account, details);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
143
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
144 conversation = g_object_new(
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
145 PURPLE_TYPE_CONVERSATION,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
146 "account", account,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
147 "id", id,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
148 "type", type,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
149 NULL);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
150 g_clear_pointer(&id, g_free);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
151
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
152 for(guint i = 0; i < g_list_model_get_n_items(participants); i++) {
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
153 PurpleContactInfo *info = NULL;
42892
ca6c19529734 Port the Demo protocol plugin to Purple.ConversationMembers
Gary Kramlich <grim@reaperworld.com>
parents: 42888
diff changeset
154 PurpleConversationMembers *members = NULL;
42675
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
155
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
156 info = g_list_model_get_item(participants, i);
42892
ca6c19529734 Port the Demo protocol plugin to Purple.ConversationMembers
Gary Kramlich <grim@reaperworld.com>
parents: 42888
diff changeset
157 members = purple_conversation_get_members(conversation);
ca6c19529734 Port the Demo protocol plugin to Purple.ConversationMembers
Gary Kramlich <grim@reaperworld.com>
parents: 42888
diff changeset
158 purple_conversation_members_add_member(members, info, FALSE, NULL);
42675
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
159 g_clear_object(&info);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
160 }
42888
ed22ea598bec Fix a couple of memory leaks in the demo plugin
Markus Fischer <ivanhoe@fiscari.de>
parents: 42826
diff changeset
161 g_clear_object(&details);
42675
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
162
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
163 manager = purple_conversation_manager_get_default();
43030
97ed7473351f Update the protocols for the ConversationManager deprecations
Gary Kramlich <grim@reaperworld.com>
parents: 42924
diff changeset
164 if(!purple_conversation_manager_add(manager, conversation)) {
42675
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
165 g_task_return_new_error(task, PURPLE_DEMO_DOMAIN, 0,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
166 _("This conversation already exists."));
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
167 g_clear_object(&task);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
168
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
169 return;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
170 }
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
171
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
172 g_task_return_pointer(task, conversation, g_object_unref);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
173
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
174 g_clear_object(&task);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
175 }
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
176
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
177 static PurpleConversation *
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
178 purple_demo_protocol_create_conversation_finish(G_GNUC_UNUSED PurpleProtocolConversation *protocol,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
179 GAsyncResult *result,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
180 GError **error)
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
181 {
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
182 GTask *task = G_TASK(result);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
183
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
184 g_return_val_if_fail(g_task_get_source_tag(task) ==
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
185 purple_demo_protocol_create_conversation_async,
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
186 NULL);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
187
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
188 return g_task_propagate_pointer(task, error);
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
189 }
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
190
42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
191 static void
42924
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
192 purple_demo_protocol_conversation_leave_conversation_async(PurpleProtocolConversation *protocol,
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
193 G_GNUC_UNUSED PurpleConversation *conversation,
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
194 GCancellable *cancellable,
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
195 GAsyncReadyCallback callback,
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
196 gpointer data)
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
197 {
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
198 GTask *task = NULL;
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
199
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
200 task = g_task_new(protocol, cancellable, callback, data);
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
201 g_task_set_source_tag(task,
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
202 purple_demo_protocol_conversation_leave_conversation_async);
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
203
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
204 g_task_return_boolean(task, TRUE);
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
205 g_clear_object(&task);
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
206 }
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
207
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
208 static gboolean
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
209 purple_demo_protocol_conversation_leave_conversation_finish(G_GNUC_UNUSED PurpleProtocolConversation *protocol,
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
210 GAsyncResult *result,
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
211 GError **error)
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
212 {
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
213 gpointer tag = purple_demo_protocol_conversation_leave_conversation_async;
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
214
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
215 g_return_val_if_fail(g_async_result_is_tagged(result, tag), FALSE);
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
216
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
217 return g_task_propagate_boolean(G_TASK(result), error);
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
218 }
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
219
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
220 static void
42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
221 purple_demo_protocol_send_message_async(G_GNUC_UNUSED PurpleProtocolConversation *protocol,
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
222 PurpleConversation *conversation,
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
223 PurpleMessage *message,
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
224 GCancellable *cancellable,
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
225 GAsyncReadyCallback callback,
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
226 gpointer data)
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
227 {
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
228 GTask *task = NULL;
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
229
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
230 if(purple_conversation_is_dm(conversation)) {
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
231 PurpleAccount *account = NULL;
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
232 PurpleContact *contact = NULL;
42906
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
233 PurpleContactInfo *contact_info = NULL;
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
234 PurpleContactManager *manager = NULL;
42892
ca6c19529734 Port the Demo protocol plugin to Purple.ConversationMembers
Gary Kramlich <grim@reaperworld.com>
parents: 42888
diff changeset
235 PurpleConversationMembers *members = NULL;
42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
236
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
237 account = purple_conversation_get_account(conversation);
42892
ca6c19529734 Port the Demo protocol plugin to Purple.ConversationMembers
Gary Kramlich <grim@reaperworld.com>
parents: 42888
diff changeset
238 members = purple_conversation_get_members(conversation);
42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
239
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
240 manager = purple_contact_manager_get_default();
42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
241
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
242 /* Check if this dm is with echo. */
42906
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
243 contact = purple_contact_manager_find_with_id(manager, account,
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
244 "echo");
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
245 contact_info = PURPLE_CONTACT_INFO(contact);
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
246 if(purple_conversation_members_has_member(members, contact_info, NULL))
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
247 {
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
248 PurpleDemoProtocolIMInfo *info = NULL;
42906
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
249 const char *contents = purple_message_get_contents(message);
42598
5e42cba3e8ad Add an offline contact in the Demo protocol
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42323
diff changeset
250
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
251 info = g_new(PurpleDemoProtocolIMInfo, 1);
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
252 info->conversation = g_object_ref(conversation);
42906
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
253 info->message = purple_message_new(contact_info, contents);
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
254
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
255 g_idle_add_full(G_PRIORITY_DEFAULT_IDLE,
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
256 purple_demo_protocol_echo_im_cb, info,
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
257 (GDestroyNotify)purple_demo_protocol_im_info_free);
42598
5e42cba3e8ad Add an offline contact in the Demo protocol
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42323
diff changeset
258 }
5e42cba3e8ad Add an offline contact in the Demo protocol
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42323
diff changeset
259
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
260 /* Check if this dm is with aegina. */
42906
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
261 contact = purple_contact_manager_find_with_id(manager, account,
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
262 "aegina");
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
263 contact_info = PURPLE_CONTACT_INFO(contact);
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
264 if(purple_conversation_members_has_member(members, contact_info, NULL))
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
265 {
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
266 PurpleDemoProtocolIMInfo *info = g_new(PurpleDemoProtocolIMInfo, 1);
42906
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
267 PurpleContactInfo *author = purple_message_get_author(message);
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
268 const char *contents = NULL;
42906
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
269 const char *author_id = NULL;
42598
5e42cba3e8ad Add an offline contact in the Demo protocol
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42323
diff changeset
270
42906
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
271 author_id = purple_contact_info_get_id(author);
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
272 if(purple_strequal(author_id, "hades")) {
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
273 contents = "🫥️";
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
274 } else {
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
275 /* TRANSLATORS: This is a reference to the Cap of Invisibility owned by
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
276 * various Greek gods, such as Hades, as mentioned. */
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
277 contents = _("Don't tell Hades I have his Cap");
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
278 }
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
279
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
280 info->conversation = g_object_ref(conversation);
42906
e0d5b79e7431 Fix some issues with Purple.Message in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42892
diff changeset
281 info->message = purple_message_new(contact_info, contents);
42738
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
282
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
283 g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, purple_demo_protocol_echo_im_cb,
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
284 info, (GDestroyNotify)purple_demo_protocol_im_info_free);
f755b10c05a3 Update the demo protocol plugin to not depend on conversation names
Gary Kramlich <grim@reaperworld.com>
parents: 42675
diff changeset
285 }
42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
286 }
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
287
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
288 purple_conversation_write_message(conversation, message);
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
289
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
290 task = g_task_new(protocol, cancellable, callback, data);
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
291 g_task_return_boolean(task, TRUE);
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
292
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
293 g_clear_object(&task);
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
294 }
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
295
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
296 static gboolean
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
297 purple_demo_protocol_send_message_finish(G_GNUC_UNUSED PurpleProtocolConversation *protocol,
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
298 GAsyncResult *result,
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
299 GError **error)
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
300 {
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
301 g_return_val_if_fail(G_IS_TASK(result), FALSE);
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
302
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
303 return g_task_propagate_boolean(G_TASK(result), error);
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
304 }
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
305
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
306 void
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
307 purple_demo_protocol_conversation_init(PurpleProtocolConversationInterface *iface) {
42675
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
308 iface->get_create_conversation_details =
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
309 purple_demo_protocol_get_create_conversation_details;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
310 iface->create_conversation_async =
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
311 purple_demo_protocol_create_conversation_async;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
312 iface->create_conversation_finish =
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
313 purple_demo_protocol_create_conversation_finish;
69e078981440 Implement conversation create for the demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42652
diff changeset
314
42924
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
315 iface->leave_conversation_async =
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
316 purple_demo_protocol_conversation_leave_conversation_async;
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
317 iface->leave_conversation_finish =
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
318 purple_demo_protocol_conversation_leave_conversation_finish;
8091ed36e8b0 Implement Purple.ProtocolConversation.leave_async and .leave_finish in the Demo protocol plugin
Gary Kramlich <grim@reaperworld.com>
parents: 42906
diff changeset
319
42323
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
320 iface->send_message_async = purple_demo_protocol_send_message_async;
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
321 iface->send_message_finish = purple_demo_protocol_send_message_finish;
119cc14f9c12 Port the Demo protocol plugin to PurpleProtocolConversation
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
322 }

mercurial