summaryrefslogtreecommitdiff
path: root/src/plugins/jabber/jabber-bar-item.c
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2009-01-15 15:29:05 +0100
committerSebastien Helleu <flashcode@flashtux.org>2009-01-15 15:29:05 +0100
commit18a62f1dac870c96152063d69336ecfaf563da69 (patch)
tree7989acb4aebf8749f7ddb5e48e13431f93e0ce33 /src/plugins/jabber/jabber-bar-item.c
parentc717d206cd73c0445a9edd1a5b723ea79a107676 (diff)
downloadweechat-18a62f1dac870c96152063d69336ecfaf563da69.zip
Add Jabber plugin (alpha version, many Jabber features are missing)
This commit introduces Jabber/XMPP protocol for WeeChat. It uses iksemel lib. Please note many major Jabber features are missing: - roster management (add/remove/.. buddies), - MUC, - transports. It is possible to define servers (with /jabber), connect to them (with /jconnect), disconnect (/jdisconnect) and chat with buddies (with /jchat).
Diffstat (limited to 'src/plugins/jabber/jabber-bar-item.c')
-rw-r--r--src/plugins/jabber/jabber-bar-item.c190
1 files changed, 190 insertions, 0 deletions
diff --git a/src/plugins/jabber/jabber-bar-item.c b/src/plugins/jabber/jabber-bar-item.c
new file mode 100644
index 000000000..83a77514b
--- /dev/null
+++ b/src/plugins/jabber/jabber-bar-item.c
@@ -0,0 +1,190 @@
+/*
+ * 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-bar-item.c: bar items for Jabber plugin */
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "../weechat-plugin.h"
+#include "jabber.h"
+#include "jabber-buffer.h"
+#include "jabber-config.h"
+#include "jabber-server.h"
+#include "jabber-muc.h"
+
+
+/*
+ * jabber_bar_item_buffer_name: bar item with buffer name
+ */
+
+char *
+jabber_bar_item_buffer_name (void *data, struct t_gui_bar_item *item,
+ struct t_gui_window *window)
+{
+ char buf[512], buf_name[256], modes[128], away[128];
+ const char *name;
+ int part_from_muc;
+ struct t_gui_buffer *buffer;
+ struct t_jabber_server *server;
+ struct t_jabber_muc *muc;
+
+ /* make C compiler happy */
+ (void) data;
+ (void) item;
+
+ if (!window)
+ window = weechat_current_window ();
+
+ buf_name[0] = '\0';
+ modes[0] = '\0';
+ away[0] = '\0';
+
+ buffer = weechat_window_get_pointer (window, "buffer");
+
+ if (buffer)
+ {
+ jabber_buffer_get_server_muc (buffer, &server, &muc);
+ if (server || muc)
+ {
+ if (server && !muc)
+ {
+ if (weechat_config_boolean (jabber_config_look_one_server_buffer))
+ {
+ snprintf (buf_name, sizeof (buf_name), "%s%s[<%s%s%s>]",
+ _("servers"),
+ JABBER_COLOR_BAR_DELIM,
+ JABBER_COLOR_STATUS_NAME,
+ (jabber_current_server) ? jabber_current_server->name : "-",
+ JABBER_COLOR_BAR_DELIM);
+ }
+ else
+ {
+ snprintf (buf_name, sizeof (buf_name), "%s%s[%s%s%s]",
+ _("server"),
+ JABBER_COLOR_BAR_DELIM,
+ JABBER_COLOR_STATUS_NAME,
+ server->name,
+ JABBER_COLOR_BAR_DELIM);
+ }
+ }
+ else
+ {
+ if (muc)
+ {
+ part_from_muc = ((muc->type == JABBER_MUC_TYPE_MUC)
+ && !muc->buddies);
+ snprintf (buf_name, sizeof (buf_name),
+ "%s%s%s%s%s/%s%s%s%s",
+ (part_from_muc) ? JABBER_COLOR_BAR_DELIM : "",
+ (part_from_muc) ? "(" : "",
+ JABBER_COLOR_STATUS_NAME,
+ server->name,
+ JABBER_COLOR_BAR_DELIM,
+ JABBER_COLOR_STATUS_NAME,
+ muc->name,
+ (part_from_muc) ? JABBER_COLOR_BAR_DELIM : "",
+ (part_from_muc) ? ")" : "");
+ if (!part_from_muc
+ && weechat_config_boolean (jabber_config_look_display_muc_modes)
+ && muc->modes && muc->modes[0]
+ && (strcmp (muc->modes, "+") != 0))
+ {
+ snprintf (modes, sizeof (modes),
+ "%s(%s%s%s)",
+ JABBER_COLOR_BAR_DELIM,
+ JABBER_COLOR_STATUS_NAME,
+ muc->modes,
+ JABBER_COLOR_BAR_DELIM);
+ }
+ }
+ }
+ if (server && server->is_away)
+ {
+ snprintf (away, sizeof (away), " %s(%s%s%s)",
+ JABBER_COLOR_BAR_DELIM,
+ JABBER_COLOR_BAR_FG,
+ _("away"),
+ JABBER_COLOR_BAR_DELIM);
+ }
+ }
+ else
+ {
+ name = weechat_buffer_get_string (buffer, "name");
+ if (name)
+ snprintf (buf_name, sizeof (buf_name), "%s", name);
+ }
+
+ snprintf (buf, sizeof (buf), "%s%s%s%s",
+ JABBER_COLOR_STATUS_NAME,
+ buf_name,
+ modes,
+ away);
+ return strdup (buf);
+ }
+
+ return NULL;
+}
+
+/*
+ * jabber_bar_item_input_prompt: bar item with input prompt
+ */
+
+char *
+jabber_bar_item_input_prompt (void *data, struct t_gui_bar_item *item,
+ struct t_gui_window *window)
+{
+ struct t_gui_buffer *buffer;
+ struct t_jabber_server *server;
+ const char *local_name;
+
+ /* make C compiler happy */
+ (void) data;
+ (void) item;
+
+ if (!window)
+ window = weechat_current_window ();
+
+ buffer = weechat_window_get_pointer (window, "buffer");
+
+ if (buffer)
+ {
+ jabber_buffer_get_server_muc (buffer, &server, NULL);
+ if (!server)
+ return NULL;
+
+ local_name = jabber_server_get_local_name (server);
+
+ return (local_name) ? strdup (local_name) : NULL;
+ }
+
+ return NULL;
+}
+
+/*
+ * jabber_bar_item_init: initialize Jabber bar items
+ */
+
+void
+jabber_bar_item_init ()
+{
+ weechat_bar_item_new ("buffer_name", &jabber_bar_item_buffer_name, NULL);
+ weechat_bar_item_new ("input_prompt", &jabber_bar_item_input_prompt, NULL);
+}