mirror of
https://git.jabber.space/devs/cproof.git
synced 2026-08-01 12:46:21 +00:00
Added /invite for direct MUC invitations
This commit is contained in:
@@ -101,6 +101,7 @@ static gboolean _cmd_tiny(gchar **args, struct cmd_help_t help);
|
|||||||
static gboolean _cmd_close(gchar **args, struct cmd_help_t help);
|
static gboolean _cmd_close(gchar **args, struct cmd_help_t help);
|
||||||
static gboolean _cmd_clear(gchar **args, struct cmd_help_t help);
|
static gboolean _cmd_clear(gchar **args, struct cmd_help_t help);
|
||||||
static gboolean _cmd_join(gchar **args, struct cmd_help_t help);
|
static gboolean _cmd_join(gchar **args, struct cmd_help_t help);
|
||||||
|
static gboolean _cmd_invite(gchar **args, struct cmd_help_t help);
|
||||||
static gboolean _cmd_rooms(gchar **args, struct cmd_help_t help);
|
static gboolean _cmd_rooms(gchar **args, struct cmd_help_t help);
|
||||||
static gboolean _cmd_disco(gchar **args, struct cmd_help_t help);
|
static gboolean _cmd_disco(gchar **args, struct cmd_help_t help);
|
||||||
static gboolean _cmd_set_beep(gchar **args, struct cmd_help_t help);
|
static gboolean _cmd_set_beep(gchar **args, struct cmd_help_t help);
|
||||||
@@ -338,6 +339,16 @@ static struct cmd_t main_commands[] =
|
|||||||
"Example : /join jdev (as user@jabber.org will join jdev@conference.jabber.org)",
|
"Example : /join jdev (as user@jabber.org will join jdev@conference.jabber.org)",
|
||||||
NULL } } },
|
NULL } } },
|
||||||
|
|
||||||
|
{ "/invite",
|
||||||
|
_cmd_invite, parse_args_with_freetext, 1, 2,
|
||||||
|
{ "/invite jid [message]", "Invite contact to chat room.",
|
||||||
|
{ "/invite jid [message]",
|
||||||
|
"--------------------------",
|
||||||
|
"Send a direct invite to the specified contact to the current chat room.",
|
||||||
|
"The jid must be a contact in your roster.",
|
||||||
|
"If a message is supplied it will be send as the reason for the invite.",
|
||||||
|
NULL } } },
|
||||||
|
|
||||||
{ "/rooms",
|
{ "/rooms",
|
||||||
_cmd_rooms, parse_args, 0, 1,
|
_cmd_rooms, parse_args, 0, 1,
|
||||||
{ "/rooms [conference-service]", "List chat rooms.",
|
{ "/rooms [conference-service]", "List chat rooms.",
|
||||||
@@ -1079,6 +1090,8 @@ _cmd_complete_parameters(char *input, int *size)
|
|||||||
contact_list_find_resource);
|
contact_list_find_resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_parameter_autocomplete(input, size, "/invite", contact_list_find_contact);
|
||||||
|
|
||||||
_parameter_autocomplete(input, size, "/connect",
|
_parameter_autocomplete(input, size, "/connect",
|
||||||
accounts_find_enabled);
|
accounts_find_enabled);
|
||||||
_parameter_autocomplete_with_ac(input, size, "/sub", sub_ac);
|
_parameter_autocomplete_with_ac(input, size, "/sub", sub_ac);
|
||||||
@@ -2122,6 +2135,37 @@ _cmd_join(gchar **args, struct cmd_help_t help)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_cmd_invite(gchar **args, struct cmd_help_t help)
|
||||||
|
{
|
||||||
|
char *contact = args[0];
|
||||||
|
char *reason = args[1];
|
||||||
|
char *room = NULL;
|
||||||
|
jabber_conn_status_t conn_status = jabber_get_connection_status();
|
||||||
|
|
||||||
|
if (conn_status != JABBER_CONNECTED) {
|
||||||
|
cons_show("You are not currently connected.");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!win_current_is_groupchat()) {
|
||||||
|
cons_show("You must be in a chat room to send an invite.");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
room = win_current_get_recipient();
|
||||||
|
message_send_invite(room, contact, reason);
|
||||||
|
if (reason != NULL) {
|
||||||
|
cons_show("Room invite sent, contact: %s, room: %s, reason: \"%s\".",
|
||||||
|
contact, room, reason);
|
||||||
|
} else {
|
||||||
|
cons_show("Room invite sent, contact: %s, room: %s.",
|
||||||
|
contact, room);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_cmd_rooms(gchar **args, struct cmd_help_t help)
|
_cmd_rooms(gchar **args, struct cmd_help_t help)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -93,6 +93,18 @@ message_send_groupchat(const char * const msg, const char * const recipient)
|
|||||||
xmpp_stanza_release(message);
|
xmpp_stanza_release(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
message_send_invite(const char * const room, const char * const contact,
|
||||||
|
const char * const reason)
|
||||||
|
{
|
||||||
|
xmpp_conn_t * const conn = connection_get_conn();
|
||||||
|
xmpp_ctx_t * const ctx = connection_get_ctx();
|
||||||
|
xmpp_stanza_t *stanza = stanza_create_invite(ctx, room, contact, reason);
|
||||||
|
|
||||||
|
xmpp_send(conn, stanza);
|
||||||
|
xmpp_stanza_release(stanza);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
message_send_composing(const char * const recipient)
|
message_send_composing(const char * const recipient)
|
||||||
{
|
{
|
||||||
@@ -149,23 +161,6 @@ static int
|
|||||||
_conference_message_handler(xmpp_conn_t * const conn,
|
_conference_message_handler(xmpp_conn_t * const conn,
|
||||||
xmpp_stanza_t * const stanza, void * const userdata)
|
xmpp_stanza_t * const stanza, void * const userdata)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* <message to="prof2@panesar" from="test@conference.panesar">
|
|
||||||
* <x xmlns="http://jabber.org/protocol/muc#user">
|
|
||||||
* <invite from="prof4@panesar/2572c43f-aa3d-42fa-a74e-c322a80a90b8">
|
|
||||||
* <reason>Join the room!</reason>
|
|
||||||
* </invite>
|
|
||||||
* </x>
|
|
||||||
* <x jid="test@conference.panesar" xmlns="jabber:x:conference">
|
|
||||||
* Join the room!
|
|
||||||
* </x>
|
|
||||||
* <body>
|
|
||||||
* prof4@panesar/2572c43f-aa3d-42fa-a74e-c322a80a90b8 invited you to the room test@conference.panesar (Join the room!)
|
|
||||||
* </body>
|
|
||||||
* </message>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
xmpp_stanza_t *x_muc = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
xmpp_stanza_t *x_muc = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_MUC_USER);
|
||||||
xmpp_stanza_t *x_groupchat = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CONFERENCE);
|
xmpp_stanza_t *x_groupchat = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_CONFERENCE);
|
||||||
char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM);
|
char *from = xmpp_stanza_get_attribute(stanza, STANZA_ATTR_FROM);
|
||||||
|
|||||||
@@ -86,6 +86,30 @@ stanza_create_message(xmpp_ctx_t *ctx, const char * const recipient,
|
|||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xmpp_stanza_t *
|
||||||
|
stanza_create_invite(xmpp_ctx_t *ctx, const char * const room,
|
||||||
|
const char * const contact, const char * const reason)
|
||||||
|
{
|
||||||
|
xmpp_stanza_t *message, *x;
|
||||||
|
|
||||||
|
message = xmpp_stanza_new(ctx);
|
||||||
|
xmpp_stanza_set_name(message, STANZA_NAME_MESSAGE);
|
||||||
|
xmpp_stanza_set_attribute(message, STANZA_ATTR_TO, contact);
|
||||||
|
|
||||||
|
x = xmpp_stanza_new(ctx);
|
||||||
|
xmpp_stanza_set_name(x, STANZA_NAME_X);
|
||||||
|
xmpp_stanza_set_ns(x, STANZA_NS_CONFERENCE);
|
||||||
|
|
||||||
|
xmpp_stanza_set_attribute(x, STANZA_ATTR_JID, room);
|
||||||
|
if (reason != NULL) {
|
||||||
|
xmpp_stanza_set_attribute(x, STANZA_ATTR_REASON, reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
xmpp_stanza_add_child(message, x);
|
||||||
|
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
xmpp_stanza_t *
|
xmpp_stanza_t *
|
||||||
stanza_create_room_join_presence(xmpp_ctx_t * const ctx,
|
stanza_create_room_join_presence(xmpp_ctx_t * const ctx,
|
||||||
const char * const full_room_jid)
|
const char * const full_room_jid)
|
||||||
|
|||||||
@@ -134,6 +134,9 @@ xmpp_stanza_t* stanza_create_ping_iq(xmpp_ctx_t *ctx);
|
|||||||
xmpp_stanza_t* stanza_create_disco_info_iq(xmpp_ctx_t *ctx, const char * const id,
|
xmpp_stanza_t* stanza_create_disco_info_iq(xmpp_ctx_t *ctx, const char * const id,
|
||||||
const char * const to, const char * const node);
|
const char * const to, const char * const node);
|
||||||
|
|
||||||
|
xmpp_stanza_t* stanza_create_invite(xmpp_ctx_t *ctx, const char * const room,
|
||||||
|
const char * const contact, const char * const reason);
|
||||||
|
|
||||||
gboolean stanza_contains_chat_state(xmpp_stanza_t *stanza);
|
gboolean stanza_contains_chat_state(xmpp_stanza_t *stanza);
|
||||||
|
|
||||||
gboolean stanza_get_delay(xmpp_stanza_t * const stanza, GTimeVal *tv_stamp);
|
gboolean stanza_get_delay(xmpp_stanza_t * const stanza, GTimeVal *tv_stamp);
|
||||||
|
|||||||
@@ -97,6 +97,8 @@ void message_send_inactive(const char * const recipient);
|
|||||||
void message_send_composing(const char * const recipient);
|
void message_send_composing(const char * const recipient);
|
||||||
void message_send_paused(const char * const recipient);
|
void message_send_paused(const char * const recipient);
|
||||||
void message_send_gone(const char * const recipient);
|
void message_send_gone(const char * const recipient);
|
||||||
|
void message_send_invite(const char * const room, const char * const contact,
|
||||||
|
const char * const reason);
|
||||||
|
|
||||||
// presence functions
|
// presence functions
|
||||||
void presence_subscription(const char * const jid, const jabber_subscr_t action);
|
void presence_subscription(const char * const jid, const jabber_subscr_t action);
|
||||||
|
|||||||
Reference in New Issue
Block a user