mirror of
https://github.com/profanity-im/profanity.git
synced 2024-11-03 19:37:16 -05:00
Added basic subscriptions
This commit is contained in:
parent
cd56134ebb
commit
15cdc69f31
@ -82,6 +82,7 @@ static gboolean _cmd_prefs(const char * const inp, struct cmd_help_t help);
|
|||||||
static gboolean _cmd_who(const char * const inp, struct cmd_help_t help);
|
static gboolean _cmd_who(const char * const inp, struct cmd_help_t help);
|
||||||
static gboolean _cmd_connect(const char * const inp, struct cmd_help_t help);
|
static gboolean _cmd_connect(const char * const inp, struct cmd_help_t help);
|
||||||
static gboolean _cmd_disconnect(const char * const inp, struct cmd_help_t help);
|
static gboolean _cmd_disconnect(const char * const inp, struct cmd_help_t help);
|
||||||
|
static gboolean _cmd_sub(const char * const inp, struct cmd_help_t help);
|
||||||
static gboolean _cmd_msg(const char * const inp, struct cmd_help_t help);
|
static gboolean _cmd_msg(const char * const inp, struct cmd_help_t help);
|
||||||
static gboolean _cmd_tiny(const char * const inp, struct cmd_help_t help);
|
static gboolean _cmd_tiny(const char * const inp, struct cmd_help_t help);
|
||||||
static gboolean _cmd_close(const char * const inp, struct cmd_help_t help);
|
static gboolean _cmd_close(const char * const inp, struct cmd_help_t help);
|
||||||
@ -178,6 +179,16 @@ static struct cmd_t main_commands[] =
|
|||||||
"Example : /msg boothj5@gmail.com Hey, here's a message!",
|
"Example : /msg boothj5@gmail.com Hey, here's a message!",
|
||||||
NULL } } },
|
NULL } } },
|
||||||
|
|
||||||
|
{ "/sub",
|
||||||
|
_cmd_sub,
|
||||||
|
{ "/sub user@host", "Subscribe to presence notifications of user.",
|
||||||
|
{ "/sub user@host",
|
||||||
|
"------------------",
|
||||||
|
"Send a subscription request to the user to be informed of their presence.",
|
||||||
|
"",
|
||||||
|
"Example: /sub myfriend@jabber.org",
|
||||||
|
NULL } } },
|
||||||
|
|
||||||
{ "/tiny",
|
{ "/tiny",
|
||||||
_cmd_tiny,
|
_cmd_tiny,
|
||||||
{ "/tiny url", "Send url as tinyurl in current chat.",
|
{ "/tiny url", "Send url as tinyurl in current chat.",
|
||||||
@ -691,6 +702,31 @@ _cmd_connect(const char * const inp, struct cmd_help_t help)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_cmd_sub(const char * const inp, struct cmd_help_t help)
|
||||||
|
{
|
||||||
|
gboolean result = FALSE;
|
||||||
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
||||||
|
|
||||||
|
if (conn_status != JABBER_CONNECTED) {
|
||||||
|
cons_show("You are currently not connected.");
|
||||||
|
result = TRUE;
|
||||||
|
} else if (strlen(inp) < 6) {
|
||||||
|
cons_show("Usage: %s", help.usage);
|
||||||
|
result = TRUE;
|
||||||
|
} else {
|
||||||
|
char *user, *lower;
|
||||||
|
user = strndup(inp+5, strlen(inp)-5);
|
||||||
|
lower = g_utf8_strdown(user, -1);
|
||||||
|
|
||||||
|
jabber_subscribe(lower);
|
||||||
|
|
||||||
|
result = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_cmd_disconnect(const char * const inp, struct cmd_help_t help)
|
_cmd_disconnect(const char * const inp, struct cmd_help_t help)
|
||||||
{
|
{
|
||||||
|
27
src/jabber.c
27
src/jabber.c
@ -184,6 +184,19 @@ jabber_roster_request(void)
|
|||||||
xmpp_stanza_release(iq);
|
xmpp_stanza_release(iq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
jabber_subscribe(const char * const recipient)
|
||||||
|
{
|
||||||
|
xmpp_stanza_t *presence;
|
||||||
|
|
||||||
|
presence = xmpp_stanza_new(jabber_conn.ctx);
|
||||||
|
xmpp_stanza_set_name(presence, "presence");
|
||||||
|
xmpp_stanza_set_type(presence, "subscribe");
|
||||||
|
xmpp_stanza_set_attribute(presence, "to", recipient);
|
||||||
|
xmpp_send(jabber_conn.conn, presence);
|
||||||
|
xmpp_stanza_release(presence);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
jabber_update_presence(jabber_presence_t status, const char * const msg)
|
jabber_update_presence(jabber_presence_t status, const char * const msg)
|
||||||
{
|
{
|
||||||
@ -435,6 +448,20 @@ _presence_handler(xmpp_conn_t * const conn,
|
|||||||
char *short_from = strtok(from, "/");
|
char *short_from = strtok(from, "/");
|
||||||
char *type = xmpp_stanza_get_attribute(stanza, "type");
|
char *type = xmpp_stanza_get_attribute(stanza, "type");
|
||||||
|
|
||||||
|
if (type != NULL) {
|
||||||
|
if (strcmp(type, "subscribe") == 0) {
|
||||||
|
xmpp_stanza_t *presence;
|
||||||
|
|
||||||
|
presence = xmpp_stanza_new(jabber_conn.ctx);
|
||||||
|
xmpp_stanza_set_name(presence, "presence");
|
||||||
|
xmpp_stanza_set_type(presence, "subscribed");
|
||||||
|
xmpp_stanza_set_attribute(presence, "to", short_from);
|
||||||
|
xmpp_send(jabber_conn.conn, presence);
|
||||||
|
xmpp_stanza_release(presence);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
char *show_str, *status_str;
|
char *show_str, *status_str;
|
||||||
|
|
||||||
xmpp_stanza_t *show = xmpp_stanza_get_child_by_name(stanza, "show");
|
xmpp_stanza_t *show = xmpp_stanza_get_child_by_name(stanza, "show");
|
||||||
|
@ -46,6 +46,7 @@ jabber_conn_status_t jabber_connect(const char * const user,
|
|||||||
void jabber_disconnect(void);
|
void jabber_disconnect(void);
|
||||||
void jabber_roster_request(void);
|
void jabber_roster_request(void);
|
||||||
void jabber_process_events(void);
|
void jabber_process_events(void);
|
||||||
|
void jabber_subscribe(const char * const recipient);
|
||||||
void jabber_send(const char * const msg, const char * const recipient);
|
void jabber_send(const char * const msg, const char * const recipient);
|
||||||
void jabber_update_presence(jabber_presence_t status, const char * const msg);
|
void jabber_update_presence(jabber_presence_t status, const char * const msg);
|
||||||
const char * jabber_get_jid(void);
|
const char * jabber_get_jid(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user