Moved functions to xmpp_presence

This commit is contained in:
James Booth
2013-01-28 22:55:26 +00:00
parent 7255ef5e1c
commit bfe1d76e5f
6 changed files with 193 additions and 158 deletions

View File

@@ -318,149 +318,6 @@ jabber_send_gone(const char * const recipient)
chat_session_set_sent(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)
{
@@ -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)
{