purple: build against GPlugin-based 3.x API
[siplcs.git] / src / purple / purple-plugin3.c
blob1e66b0d797cfe1b3ba86eb72307db0c0187cc9f6
1 /**
2 * @file purple-plugin3.c
4 * pidgin-sipe
6 * Copyright (C) 2015 SIPE Project <http://sipe.sourceforge.net/>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 #ifdef HAVE_CONFIG_H
24 #include "config.h"
25 #endif
27 #include <glib.h>
28 #include <gmodule.h>
30 /* Flag needed for correct version of PURPLE_INIT_PLUGIN() */
31 #ifndef PURPLE_PLUGINS
32 #define PURPLE_PLUGINS
33 #endif
35 #include "protocol.h"
37 #include "purple-private.h"
38 #include "sipe-common.h"
39 #include "sipe-core.h"
41 #define SIPE_TYPE_PROTOCOL (sipe_protocol_get_type())
43 typedef struct _SipeProtocol {
44 PurpleProtocol parent;
45 } SipeProtocol;
47 typedef struct _NullProtocolClass {
48 PurpleProtocolClass parent_class;
49 } SipeProtocolClass;
51 G_MODULE_EXPORT GType sipe_protocol_get_type(void);
53 static void
54 sipe_protocol_class_init(PurpleProtocolClass *klass)
56 klass->login = sipe_purple_login;
57 klass->close = sipe_purple_close;
58 klass->status_types = sipe_purple_status_types;
59 klass->list_icon = sipe_purple_list_icon;
62 static void
63 sipe_protocol_init(PurpleProtocol *protocol)
65 sipe_core_init(LOCALEDIR);
67 protocol->id = SIPE_PURPLE_PLUGIN_ID;
68 protocol->name = SIPE_PURPLE_PLUGIN_NAME;
69 protocol->options = SIPE_PURPLE_PROTOCOL_OPTIONS;
70 protocol->user_splits = g_list_append(NULL, sipe_purple_user_split());
71 protocol->account_options = sipe_purple_account_options();
74 static GList *
75 get_actions(SIPE_UNUSED_PARAMETER PurpleConnection *gc)
77 return sipe_purple_actions();
80 static void
81 sipe_protocol_client_iface_init(PurpleProtocolClientIface *client_iface)
83 client_iface->get_actions = get_actions;
84 client_iface->status_text = sipe_purple_status_text;
85 client_iface->tooltip_text = sipe_purple_tooltip_text;
86 client_iface->blist_node_menu = sipe_purple_blist_node_menu;
87 client_iface->convo_closed = sipe_purple_convo_closed;
88 client_iface->normalize = purple_normalize_nocase;
89 client_iface->get_account_text_table = sipe_purple_get_account_text_table;
92 static void
93 sipe_protocol_server_iface_init(PurpleProtocolServerIface *server_iface)
95 server_iface->get_info = sipe_purple_get_info;
96 server_iface->set_status = sipe_purple_set_status;
97 server_iface->set_idle = sipe_purple_set_idle;
98 server_iface->add_buddy = sipe_purple_add_buddy;
99 server_iface->remove_buddy = sipe_purple_remove_buddy;
100 server_iface->alias_buddy = sipe_purple_alias_buddy;
101 server_iface->group_buddy = sipe_purple_group_buddy;
102 server_iface->rename_group = sipe_purple_group_rename;
103 server_iface->remove_group = sipe_purple_group_remove;
106 static int
107 send_im(PurpleConnection *gc, PurpleMessage *msg)
109 sipe_core_im_send(PURPLE_GC_TO_SIPE_CORE_PUBLIC,
110 purple_message_get_recipient(msg),
111 purple_message_get_contents(msg));
112 return 1;
115 static void
116 sipe_protocol_im_iface_init(PurpleProtocolIMIface *im_iface)
118 im_iface->send = send_im;
119 im_iface->send_typing = sipe_purple_send_typing;
122 static void
123 sipe_protocol_chat_iface_init(PurpleProtocolChatIface *chat_iface)
125 chat_iface->info = sipe_purple_chat_info;
126 chat_iface->info_defaults = sipe_purple_chat_info_defaults;
127 chat_iface->join = sipe_purple_chat_join;
128 chat_iface->invite = sipe_purple_chat_invite;
129 chat_iface->leave = sipe_purple_chat_leave;
130 chat_iface->send = sipe_purple_chat_send;
133 static void
134 sipe_protocol_privacy_iface_init(PurpleProtocolPrivacyIface *privacy_iface)
136 privacy_iface->add_permit = sipe_purple_add_permit;
137 privacy_iface->add_deny = sipe_purple_add_deny;
138 privacy_iface->rem_permit = sipe_purple_add_deny;
139 privacy_iface->rem_deny = sipe_purple_add_permit;
142 static void
143 sipe_protocol_xfer_iface_init(PurpleProtocolXferIface *xfer_iface)
145 xfer_iface->send = sipe_purple_ft_send_file;
146 xfer_iface->new_xfer = sipe_purple_ft_new_xfer;
149 static void
150 sipe_protocol_roomlist_iface_init(PurpleProtocolRoomlistIface *roomlist_iface)
152 roomlist_iface->get_list = sipe_purple_roomlist_get_list;
153 roomlist_iface->cancel = sipe_purple_roomlist_cancel;
156 static void
157 sipe_protocol_media_iface_init(PurpleProtocolMediaIface *media_iface)
159 media_iface->initiate_session = sipe_purple_initiate_media;
160 media_iface->get_caps = sipe_purple_get_media_caps;
163 #ifdef __GNUC__
164 #if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || (__GNUC__ >= 5)
165 #if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ >= 5)
166 #pragma GCC diagnostic push
167 #endif
168 #pragma GCC diagnostic ignored "-Wunused-parameter"
169 #endif
170 #endif
171 PURPLE_DEFINE_TYPE_EXTENDED(
172 SipeProtocol, sipe_protocol, PURPLE_TYPE_PROTOCOL, 0,
174 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT_IFACE,
175 sipe_protocol_client_iface_init)
176 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER_IFACE,
177 sipe_protocol_server_iface_init)
178 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM_IFACE,
179 sipe_protocol_im_iface_init)
180 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT_IFACE,
181 sipe_protocol_chat_iface_init)
182 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY_IFACE,
183 sipe_protocol_privacy_iface_init)
184 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_XFER_IFACE,
185 sipe_protocol_xfer_iface_init)
186 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST_IFACE,
187 sipe_protocol_roomlist_iface_init)
188 PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_MEDIA_IFACE,
189 sipe_protocol_media_iface_init)
192 #ifdef __GNUC__
193 #if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ >= 5)
194 #pragma GCC diagnostic pop
195 #endif
196 #endif
198 static PurplePluginInfo *
199 plugin_query(SIPE_UNUSED_PARAMETER GError **error)
201 gchar ** authors = g_strsplit(SIPE_PURPLE_PLUGIN_AUTHORS, ", ", -1);
202 PurplePluginInfo *info = purple_plugin_info_new(
203 "id", SIPE_PURPLE_PLUGIN_ID,
204 "name", SIPE_PURPLE_PLUGIN_NAME,
205 "version", PACKAGE_VERSION,
206 "category", "Protocol",
207 "summary", SIPE_PURPLE_PLUGIN_SUMMARY,
208 "description", SIPE_PURPLE_PLUGIN_DESCRIPTION,
209 "authors", authors,
210 "website", PACKAGE_URL,
211 "abi-version", PURPLE_ABI_VERSION,
212 "flags", PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD,
213 NULL);
215 g_strfreev(authors);
217 return info;
220 static PurpleProtocol *sipe_protocol = NULL;
222 static gboolean
223 plugin_load(PurplePlugin *plugin, GError **error)
225 sipe_protocol_register_type(plugin);
227 sipe_protocol = purple_protocols_add(SIPE_TYPE_PROTOCOL, error);
228 if (!sipe_protocol) {
229 return FALSE;
232 if (!sipe_purple_plugin_load(plugin)) {
233 return FALSE;
236 return TRUE;
239 static gboolean
240 plugin_unload(PurplePlugin *plugin, GError **error)
242 sipe_purple_plugin_unload(plugin);
244 if (!purple_protocols_remove(sipe_protocol, error)) {
245 return FALSE;
248 return TRUE;
251 PURPLE_PLUGIN_INIT(sipe, plugin_query, plugin_load, plugin_unload);
254 Local Variables:
255 mode: c
256 c-file-style: "bsd"
257 indent-tabs-mode: t
258 tab-width: 8
259 End: