summaryrefslogtreecommitdiff
path: root/src/plugins/jabber/jabber.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/jabber/jabber.c')
-rw-r--r--src/plugins/jabber/jabber.c212
1 files changed, 212 insertions, 0 deletions
diff --git a/src/plugins/jabber/jabber.c b/src/plugins/jabber/jabber.c
new file mode 100644
index 000000000..9f8f6a348
--- /dev/null
+++ b/src/plugins/jabber/jabber.c
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 2009 by FlashCode <flashcode@flashtux.org>
+ * See README for License detail, AUTHORS for developers list.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* jabber.c: Jabber plugin for WeeChat */
+
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "../weechat-plugin.h"
+#include "jabber.h"
+#include "jabber-bar-item.h"
+#include "jabber-command.h"
+#include "jabber-completion.h"
+#include "jabber-config.h"
+#include "jabber-debug.h"
+#include "jabber-info.h"
+#include "jabber-server.h"
+#include "jabber-upgrade.h"
+
+
+WEECHAT_PLUGIN_NAME(JABBER_PLUGIN_NAME);
+WEECHAT_PLUGIN_DESCRIPTION("Jabber plugin for WeeChat");
+WEECHAT_PLUGIN_AUTHOR("FlashCode <flashcode@flashtux.org>");
+WEECHAT_PLUGIN_VERSION(WEECHAT_VERSION);
+WEECHAT_PLUGIN_WEECHAT_VERSION(WEECHAT_VERSION);
+WEECHAT_PLUGIN_LICENSE("GPL3");
+
+struct t_weechat_plugin *weechat_jabber_plugin = NULL;
+
+struct t_hook *jabber_hook_timer = NULL;
+
+int jabber_signal_upgrade_received = 0; /* signal "upgrade" received ? */
+
+
+/*
+ * jabber_signal_quit_cb: callback for "quit" signal
+ */
+
+int
+jabber_signal_quit_cb (void *data, const char *signal, const char *type_data,
+ void *signal_data)
+{
+ struct t_jabber_server *ptr_server;
+
+ /* make C compiler happy */
+ (void) data;
+ (void) signal;
+
+ if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_STRING) == 0)
+ {
+ for (ptr_server = jabber_servers; ptr_server;
+ ptr_server = ptr_server->next_server)
+ {
+ jabber_command_quit_server (ptr_server,
+ (signal_data) ? (char *)signal_data : NULL);
+ }
+ }
+
+ return WEECHAT_RC_OK;
+}
+
+/*
+ * jabber_signal_upgrade_cb: callback for "upgrade" signal
+ */
+
+int
+jabber_signal_upgrade_cb (void *data, const char *signal, const char *type_data,
+ void *signal_data)
+{
+ /* make C compiler happy */
+ (void) data;
+ (void) signal;
+ (void) type_data;
+ (void) signal_data;
+
+ jabber_signal_upgrade_received = 1;
+
+ return WEECHAT_RC_OK;
+}
+
+/*
+ * weechat_plugin_init: initialize Jabber plugin
+ */
+
+int
+weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[])
+{
+ int i, auto_connect, upgrading;
+
+ weechat_plugin = plugin;
+
+ if (!jabber_config_init ())
+ return WEECHAT_RC_ERROR;
+
+ if (jabber_config_read () < 0)
+ return WEECHAT_RC_ERROR;
+
+ jabber_command_init ();
+
+ jabber_info_init ();
+
+ /* hook some signals */
+ jabber_debug_init ();
+ weechat_hook_signal ("quit", &jabber_signal_quit_cb, NULL);
+ weechat_hook_signal ("upgrade", &jabber_signal_upgrade_cb, NULL);
+ //weechat_hook_signal ("xfer_send_ready", &jabber_server_xfer_send_ready_cb, NULL);
+ //weechat_hook_signal ("xfer_resume_ready", &jabber_server_xfer_resume_ready_cb, NULL);
+ //weechat_hook_signal ("xfer_send_accept_resume", &jabber_server_xfer_send_accept_resume_cb, NULL);
+
+ /* hook completions */
+ jabber_completion_init ();
+
+ jabber_bar_item_init ();
+
+ /* look at arguments */
+ auto_connect = 1;
+ upgrading = 0;
+ for (i = 0; i < argc; i++)
+ {
+ if ((weechat_strcasecmp (argv[i], "-a") == 0)
+ || (weechat_strcasecmp (argv[i], "--no-connect") == 0))
+ {
+ auto_connect = 0;
+ }
+ else if ((weechat_strncasecmp (argv[i], JABBER_PLUGIN_NAME, 3) == 0))
+ {
+ /*
+ if (!jabber_server_alloc_with_url (argv[i]))
+ {
+ weechat_printf (NULL,
+ _("%s%s: error with server from URL "
+ "(\"%s\"), ignored"),
+ weechat_prefix ("error"), JABBER_PLUGIN_NAME,
+ argv[i]);
+ }
+ */
+ }
+ else if (weechat_strcasecmp (argv[i], "--upgrade") == 0)
+ {
+ upgrading = 1;
+ }
+ }
+
+ if (upgrading)
+ {
+ if (!jabber_upgrade_load ())
+ {
+ weechat_printf (NULL,
+ _("%s%s: WARNING: some network connections may "
+ "still be opened and not visible, you should "
+ "restart WeeChat now (with /quit)."),
+ weechat_prefix ("error"), JABBER_PLUGIN_NAME);
+ }
+ }
+ else
+ {
+ if (auto_connect)
+ jabber_server_auto_connect ();
+ }
+
+ jabber_hook_timer = weechat_hook_timer (1 * 1000, 0, 0,
+ &jabber_server_timer_cb, NULL);
+
+ return WEECHAT_RC_OK;
+}
+
+/*
+ * weechat_plugin_end: end Jabber plugin
+ */
+
+int
+weechat_plugin_end (struct t_weechat_plugin *plugin)
+{
+ /* make C compiler happy */
+ (void) plugin;
+
+ if (jabber_hook_timer)
+ weechat_unhook (jabber_hook_timer);
+
+ if (jabber_signal_upgrade_received)
+ {
+ jabber_config_write (1);
+ jabber_upgrade_save ();
+ }
+ else
+ {
+ jabber_config_write (0);
+ jabber_server_disconnect_all ();
+ }
+
+ jabber_server_free_all ();
+
+ jabber_config_free ();
+
+ return WEECHAT_RC_OK;
+}