about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2013-01-28 22:55:26 +0000
committerJames Booth <boothj5@gmail.com>2013-01-28 22:55:26 +0000
commitbfe1d76e5fcc29bb9c2c13935e4dbb5ecf0731ff (patch)
tree6f30bb7c7104d056f89b867f2bcb8c704e563fb7 /src
parent7255ef5e1c03aa09ebffc8636a0b49a76ff3f07a (diff)
downloadprofani-tty-bfe1d76e5fcc29bb9c2c13935e4dbb5ecf0731ff.tar.gz
Moved functions to xmpp_presence
Diffstat (limited to 'src')
-rw-r--r--src/command.c10
-rw-r--r--src/profanity.c8
-rw-r--r--src/xmpp.h14
-rw-r--r--src/xmpp_conn.c170
-rw-r--r--src/xmpp_iq.c2
-rw-r--r--src/xmpp_presence.c147
6 files changed, 193 insertions, 158 deletions
diff --git a/src/command.c b/src/command.c
index c3701d3f..23a0fa45 100644
--- a/src/command.c
+++ b/src/command.c
@@ -1835,7 +1835,7 @@ _cmd_join(gchar **args, struct cmd_help_t help)
     Jid *room_jid = jid_create_from_bare_and_resource(room, nick);
 
     if (!muc_room_is_active(room_jid)) {
-        jabber_join(room_jid);
+        presence_join_room(room_jid);
     }
     win_join_chat(room_jid);
 
@@ -1858,7 +1858,7 @@ _cmd_nick(gchar **args, struct cmd_help_t help)
 
     char *room = win_current_get_recipient();
     char *nick = args[0];
-    jabber_change_room_nick(room, nick);
+    presence_change_room_nick(room, nick);
 
     return TRUE;
 }
@@ -1927,7 +1927,7 @@ _cmd_close(gchar **args, struct cmd_help_t help)
     if (conn_status == JABBER_CONNECTED) {
         if (win_current_is_groupchat()) {
             char *room_jid = win_current_get_recipient();
-            jabber_leave_chat_room(room_jid);
+            presence_leave_chat_room(room_jid);
         } else if (win_current_is_chat() || win_current_is_private()) {
 
             if (prefs_get_states()) {
@@ -2180,7 +2180,7 @@ _cmd_set_priority(gchar **args, struct cmd_help_t help)
         char *status = jabber_get_status();
         prefs_set_priority((int)intval);
         // update presence with new priority
-        jabber_update_presence(jabber_get_presence(), status, 0);
+        presence_update(jabber_get_presence(), status, 0);
         cons_show("Priority set to %d.", intval);
     }
 
@@ -2302,7 +2302,7 @@ _update_presence(const jabber_presence_t presence,
     if (conn_status != JABBER_CONNECTED) {
         cons_show("You are not currently connected.");
     } else {
-        jabber_update_presence(presence, msg, 0);
+        presence_update(presence, msg, 0);
         title_bar_set_status(presence);
         if (msg != NULL) {
             cons_show("Status set to %s, \"%s\"", show, msg);
diff --git a/src/profanity.c b/src/profanity.c
index e8ea1770..741f9b81 100644
--- a/src/profanity.c
+++ b/src/profanity.c
@@ -469,7 +469,7 @@ _handle_idle_time()
 
             // handle away mode
             if (strcmp(prefs_get_autoaway_mode(), "away") == 0) {
-                jabber_update_presence(PRESENCE_AWAY, prefs_get_autoaway_message(), 0);
+                presence_update(PRESENCE_AWAY, prefs_get_autoaway_message(), 0);
                 if (prefs_get_autoaway_message() != NULL) {
                     cons_show("Idle for %d minutes, status set to away, \"%s\".",
                         prefs_get_autoaway_time(), prefs_get_autoaway_message());
@@ -484,7 +484,7 @@ _handle_idle_time()
 
             // handle idle mode
             } else if (strcmp(prefs_get_autoaway_mode(), "idle") == 0) {
-                jabber_update_presence(PRESENCE_ONLINE,
+                presence_update(PRESENCE_ONLINE,
                     prefs_get_autoaway_message(), idle_ms / 1000);
             }
         }
@@ -496,12 +496,12 @@ _handle_idle_time()
             // handle check
             if (prefs_get_autoaway_check()) {
                 if (strcmp(prefs_get_autoaway_mode(), "away") == 0) {
-                    jabber_update_presence(PRESENCE_ONLINE, NULL, 0);
+                    presence_update(PRESENCE_ONLINE, NULL, 0);
                     cons_show("No longer idle, status set to online.");
                     title_bar_set_status(PRESENCE_ONLINE);
                     win_current_page_off();
                 } else if (strcmp(prefs_get_autoaway_mode(), "idle") == 0) {
-                    jabber_update_presence(PRESENCE_ONLINE, NULL, 0);
+                    presence_update(PRESENCE_ONLINE, NULL, 0);
                     title_bar_set_status(PRESENCE_ONLINE);
                 }
             }
diff --git a/src/xmpp.h b/src/xmpp.h
index b8356729..7513608e 100644
--- a/src/xmpp.h
+++ b/src/xmpp.h
@@ -146,17 +146,12 @@ jabber_conn_status_t jabber_connect_with_account(ProfAccount *account,
     const char * const passwd);
 void jabber_disconnect(void);
 void jabber_process_events(void);
-void jabber_join(Jid *jid);
-void jabber_change_room_nick(const char * const room, const char * const nick);
-void jabber_leave_chat_room(const char * const room_jid);
 void jabber_send(const char * const msg, const char * const recipient);
 void jabber_send_groupchat(const char * const msg, const char * const recipient);
 void jabber_send_inactive(const char * const recipient);
 void jabber_send_composing(const char * const recipient);
 void jabber_send_paused(const char * const recipient);
 void jabber_send_gone(const char * const recipient);
-void jabber_update_presence(jabber_presence_t status, const char * const msg,
-    int idle);
 const char * jabber_get_jid(void);
 jabber_conn_status_t jabber_get_connection_status(void);
 int jabber_get_priority(void);
@@ -168,6 +163,10 @@ void jabber_set_autoping(int seconds);
 xmpp_conn_t *jabber_get_conn(void);
 xmpp_ctx_t *jabber_get_ctx(void);
 int error_handler(xmpp_stanza_t * const stanza);
+void jabber_conn_set_presence(jabber_presence_t presence);
+void jabber_conn_set_priority(int priority);
+void jabber_conn_set_status(const char * const message);
+char* jabber_get_account_name(void);
 
 // iq functions
 void iq_add_handlers(xmpp_conn_t * const conn, xmpp_ctx_t * const ctx);
@@ -179,6 +178,11 @@ GList* presence_get_subscription_requests(void);
 void presence_free_sub_requests(void);
 int presence_handler(xmpp_conn_t * const conn,
     xmpp_stanza_t * const stanza, void * const userdata);
+void presence_join_room(Jid *jid);
+void presence_change_room_nick(const char * const room, const char * const nick);
+void presence_leave_chat_room(const char * const room_jid);
+void presence_update(jabber_presence_t status, const char * const msg,
+    int idle);
 
 // caps functions
 void caps_init(void);
diff --git a/src/xmpp_conn.c b/src/xmpp_conn.c
index 52ded632..9bf94074 100644
--- a/src/xmpp_conn.c
+++ b/src/xmpp_conn.c
@@ -319,149 +319,6 @@ jabber_send_gone(const char * const recipient)
 }
 
 void
-jabber_join(Jid *jid)
-{
-    xmpp_stanza_t *presence = stanza_create_room_join_presence(jabber_conn.ctx,
-        jid->fulljid);
-    xmpp_send(jabber_conn.conn, presence);
-    xmpp_stanza_release(presence);
-
-    muc_join_room(jid->barejid, jid->resourcepart);
-}
-
-void
-jabber_change_room_nick(const char * const room, const char * const nick)
-{
-    char *full_room_jid = create_fulljid(room, nick);
-    xmpp_stanza_t *presence = stanza_create_room_newnick_presence(jabber_conn.ctx,
-        full_room_jid);
-    xmpp_send(jabber_conn.conn, presence);
-    xmpp_stanza_release(presence);
-
-    free(full_room_jid);
-}
-
-void
-jabber_leave_chat_room(const char * const room_jid)
-{
-    char *nick = muc_get_room_nick(room_jid);
-
-    xmpp_stanza_t *presence = stanza_create_room_leave_presence(jabber_conn.ctx,
-        room_jid, nick);
-    xmpp_send(jabber_conn.conn, presence);
-    xmpp_stanza_release(presence);
-}
-
-void
-jabber_update_presence(jabber_presence_t status, const char * const msg,
-    int idle)
-{
-    int pri;
-    char *show, *last;
-
-    // don't send presence when disconnected
-    if (jabber_conn.conn_status != JABBER_CONNECTED)
-        return;
-
-    pri = prefs_get_priority();
-    if (pri < JABBER_PRIORITY_MIN || pri > JABBER_PRIORITY_MAX)
-        pri = 0;
-
-    jabber_conn.presence = status;
-    jabber_conn.priority = pri;
-
-    switch(status)
-    {
-        case PRESENCE_AWAY:
-            show = STANZA_TEXT_AWAY;
-            last = STANZA_TEXT_AWAY;
-            break;
-        case PRESENCE_DND:
-            show = STANZA_TEXT_DND;
-            last = STANZA_TEXT_DND;
-            break;
-        case PRESENCE_CHAT:
-            show = STANZA_TEXT_CHAT;
-            last = STANZA_TEXT_CHAT;
-            break;
-        case PRESENCE_XA:
-            show = STANZA_TEXT_XA;
-            last = STANZA_TEXT_XA;
-            break;
-        default: // PRESENCE_ONLINE
-            show = NULL;
-            last = STANZA_TEXT_ONLINE;
-            break;
-    }
-
-    if (jabber_conn.status != NULL) {
-        free(jabber_conn.status);
-        jabber_conn.status = NULL;
-    }
-    if (msg != NULL)
-        jabber_conn.status = strdup(msg);
-
-    xmpp_stanza_t *presence = stanza_create_presence(jabber_conn.ctx, show, msg);
-    if (pri != 0) {
-        xmpp_stanza_t *priority, *value;
-        char pri_str[10];
-
-        snprintf(pri_str, sizeof(pri_str), "%d", pri);
-        priority = xmpp_stanza_new(jabber_conn.ctx);
-        value = xmpp_stanza_new(jabber_conn.ctx);
-        xmpp_stanza_set_name(priority, STANZA_NAME_PRIORITY);
-        xmpp_stanza_set_text(value, pri_str);
-        xmpp_stanza_add_child(priority, value);
-        xmpp_stanza_add_child(presence, priority);
-    }
-
-    if (idle > 0) {
-        xmpp_stanza_t *query = xmpp_stanza_new(jabber_conn.ctx);
-        xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
-        xmpp_stanza_set_ns(query, STANZA_NS_LASTACTIVITY);
-        char idle_str[10];
-        snprintf(idle_str, sizeof(idle_str), "%d", idle);
-        xmpp_stanza_set_attribute(query, STANZA_ATTR_SECONDS, idle_str);
-        xmpp_stanza_add_child(presence, query);
-    }
-
-    // add caps
-    xmpp_stanza_t *caps = xmpp_stanza_new(jabber_conn.ctx);
-    xmpp_stanza_set_name(caps, STANZA_NAME_C);
-    xmpp_stanza_set_ns(caps, STANZA_NS_CAPS);
-    xmpp_stanza_t *query = caps_create_query_response_stanza(jabber_conn.ctx);
-
-    char *sha1 = caps_create_sha1_str(query);
-    xmpp_stanza_set_attribute(caps, STANZA_ATTR_HASH, "sha-1");
-    xmpp_stanza_set_attribute(caps, STANZA_ATTR_NODE, "http://www.profanity.im");
-    xmpp_stanza_set_attribute(caps, STANZA_ATTR_VER, sha1);
-    xmpp_stanza_add_child(presence, caps);
-
-    xmpp_send(jabber_conn.conn, presence);
-
-    // send presence for each room
-    GList *rooms = muc_get_active_room_list();
-    while (rooms != NULL) {
-        char *room = rooms->data;
-        char *nick = muc_get_room_nick(room);
-        char *full_room_jid = create_fulljid(room, nick);
-
-        xmpp_stanza_set_attribute(presence, STANZA_ATTR_TO, full_room_jid);
-        xmpp_send(jabber_conn.conn, presence);
-
-        rooms = g_list_next(rooms);
-    }
-    g_list_free(rooms);
-
-    xmpp_stanza_release(presence);
-
-    FREE_SET_NULL(sha1);
-
-    // set last presence for account
-    accounts_set_last_presence(saved_account.name, last);
-}
-
-void
 jabber_set_autoping(int seconds)
 {
     if (jabber_conn.conn_status == JABBER_CONNECTED) {
@@ -518,6 +375,33 @@ jabber_get_status(void)
     return jabber_conn.status;
 }
 
+char *
+jabber_get_account_name(void)
+{
+    return saved_account.name;
+}
+
+void
+jabber_conn_set_presence(jabber_presence_t presence)
+{
+    jabber_conn.presence = presence;
+}
+
+void
+jabber_conn_set_status(const char * const message)
+{
+    FREE_SET_NULL(jabber_conn.status);
+    if (message != NULL) {
+        jabber_conn.status = strdup(message);
+    }
+}
+
+void
+jabber_conn_set_priority(int priority)
+{
+    jabber_conn.priority = priority;
+}
+
 void
 jabber_free_resources(void)
 {
diff --git a/src/xmpp_iq.c b/src/xmpp_iq.c
index 0d6dbada..fbef60ca 100644
--- a/src/xmpp_iq.c
+++ b/src/xmpp_iq.c
@@ -141,7 +141,7 @@ _iq_handle_roster_result(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
          *       presence rather than PRESENCE_ONLINE. It will be helpful
          *       when I set dnd status and reconnect for some reason */
         // send initial presence
-        jabber_update_presence(PRESENCE_ONLINE, NULL, 0);
+        presence_update(PRESENCE_ONLINE, NULL, 0);
     }
 
     return 1;
diff --git a/src/xmpp_presence.c b/src/xmpp_presence.c
index aa5dcad3..897204f7 100644
--- a/src/xmpp_presence.c
+++ b/src/xmpp_presence.c
@@ -25,8 +25,10 @@
 
 #include <glib.h>
 
+#include "common.h"
 #include "log.h"
 #include "muc.h"
+#include "preferences.h"
 #include "profanity.h"
 #include "xmpp.h"
 
@@ -87,6 +89,151 @@ presence_free_sub_requests(void)
         g_hash_table_remove_all(sub_requests);
 }
 
+void
+presence_join_room(Jid *jid)
+{
+    xmpp_ctx_t *ctx = jabber_get_ctx();
+    xmpp_conn_t *conn = jabber_get_conn();
+    xmpp_stanza_t *presence = stanza_create_room_join_presence(ctx, jid->fulljid);
+    xmpp_send(conn, presence);
+    xmpp_stanza_release(presence);
+
+    muc_join_room(jid->barejid, jid->resourcepart);
+}
+
+void
+presence_change_room_nick(const char * const room, const char * const nick)
+{
+    xmpp_ctx_t *ctx = jabber_get_ctx();
+    xmpp_conn_t *conn = jabber_get_conn();
+    char *full_room_jid = create_fulljid(room, nick);
+    xmpp_stanza_t *presence = stanza_create_room_newnick_presence(ctx, full_room_jid);
+    xmpp_send(conn, presence);
+    xmpp_stanza_release(presence);
+
+    free(full_room_jid);
+}
+
+void
+presence_leave_chat_room(const char * const room_jid)
+{
+    xmpp_ctx_t *ctx = jabber_get_ctx();
+    xmpp_conn_t *conn = jabber_get_conn();
+    char *nick = muc_get_room_nick(room_jid);
+
+    xmpp_stanza_t *presence = stanza_create_room_leave_presence(ctx, room_jid,
+        nick);
+    xmpp_send(conn, presence);
+    xmpp_stanza_release(presence);
+}
+
+void
+presence_update(jabber_presence_t status, const char * const msg,
+    int idle)
+{
+    xmpp_ctx_t *ctx = jabber_get_ctx();
+    xmpp_conn_t *conn = jabber_get_conn();
+    int pri;
+    char *show, *last;
+
+    // don't send presence when disconnected
+    if (jabber_get_connection_status() != JABBER_CONNECTED)
+        return;
+
+    pri = prefs_get_priority();
+    if (pri < JABBER_PRIORITY_MIN || pri > JABBER_PRIORITY_MAX)
+        pri = 0;
+
+    jabber_conn_set_presence(status);
+    jabber_conn_set_priority(pri);
+
+    switch(status)
+    {
+        case PRESENCE_AWAY:
+            show = STANZA_TEXT_AWAY;
+            last = STANZA_TEXT_AWAY;
+            break;
+        case PRESENCE_DND:
+            show = STANZA_TEXT_DND;
+            last = STANZA_TEXT_DND;
+            break;
+        case PRESENCE_CHAT:
+            show = STANZA_TEXT_CHAT;
+            last = STANZA_TEXT_CHAT;
+            break;
+        case PRESENCE_XA:
+            show = STANZA_TEXT_XA;
+            last = STANZA_TEXT_XA;
+            break;
+        default: // PRESENCE_ONLINE
+            show = NULL;
+            last = STANZA_TEXT_ONLINE;
+            break;
+    }
+
+    jabber_conn_set_status(msg);
+
+    xmpp_stanza_t *presence = stanza_create_presence(ctx, show, msg);
+    if (pri != 0) {
+        xmpp_stanza_t *priority, *value;
+        char pri_str[10];
+
+        snprintf(pri_str, sizeof(pri_str), "%d", pri);
+        priority = xmpp_stanza_new(ctx);
+        value = xmpp_stanza_new(ctx);
+        xmpp_stanza_set_name(priority, STANZA_NAME_PRIORITY);
+        xmpp_stanza_set_text(value, pri_str);
+        xmpp_stanza_add_child(priority, value);
+        xmpp_stanza_add_child(presence, priority);
+    }
+
+    if (idle > 0) {
+        xmpp_stanza_t *query = xmpp_stanza_new(ctx);
+        xmpp_stanza_set_name(query, STANZA_NAME_QUERY);
+        xmpp_stanza_set_ns(query, STANZA_NS_LASTACTIVITY);
+        char idle_str[10];
+        snprintf(idle_str, sizeof(idle_str), "%d", idle);
+        xmpp_stanza_set_attribute(query, STANZA_ATTR_SECONDS, idle_str);
+        xmpp_stanza_add_child(presence, query);
+    }
+
+    // add caps
+    xmpp_stanza_t *caps = xmpp_stanza_new(ctx);
+    xmpp_stanza_set_name(caps, STANZA_NAME_C);
+    xmpp_stanza_set_ns(caps, STANZA_NS_CAPS);
+    xmpp_stanza_t *query = caps_create_query_response_stanza(ctx);
+
+    char *sha1 = caps_create_sha1_str(query);
+    xmpp_stanza_set_attribute(caps, STANZA_ATTR_HASH, "sha-1");
+    xmpp_stanza_set_attribute(caps, STANZA_ATTR_NODE, "http://www.profanity.im");
+    xmpp_stanza_set_attribute(caps, STANZA_ATTR_VER, sha1);
+    xmpp_stanza_add_child(presence, caps);
+
+    xmpp_send(conn, presence);
+
+    // send presence for each room
+    GList *rooms = muc_get_active_room_list();
+    while (rooms != NULL) {
+        char *room = rooms->data;
+        char *nick = muc_get_room_nick(room);
+        char *full_room_jid = create_fulljid(room, nick);
+
+        xmpp_stanza_set_attribute(presence, STANZA_ATTR_TO, full_room_jid);
+        xmpp_send(conn, presence);
+
+        rooms = g_list_next(rooms);
+    }
+    g_list_free(rooms);
+
+    xmpp_stanza_release(presence);
+
+    FREE_SET_NULL(sha1);
+
+    // set last presence for account
+    accounts_set_last_presence(jabber_get_account_name(), last);
+}
+
+
 int
 presence_handler(xmpp_conn_t * const conn,
     xmpp_stanza_t * const stanza, void * const userdata)