1
1
mirror of https://github.com/profanity-im/profanity.git synced 2025-02-02 15:08:15 -05:00

Validate usage of /room config command, added UI messages

This commit is contained in:
James Booth 2014-09-03 22:56:33 +01:00
parent 64521eb135
commit b50b786dcc
7 changed files with 87 additions and 16 deletions

View File

@ -309,7 +309,7 @@ static struct cmd_t command_defs[] =
{ "/room config accept|cancel", "Room configuration.", { "/room config accept|cancel", "Room configuration.",
{ "/room config accept|cncel", { "/room config accept|cncel",
"-------------------------", "-------------------------",
"Accept or cancel room creation.", "Accept or cancel default room configuration.",
NULL } } }, NULL } } },
{ "/rooms", { "/rooms",

View File

@ -65,6 +65,7 @@
#include "xmpp/xmpp.h" #include "xmpp/xmpp.h"
#include "xmpp/bookmark.h" #include "xmpp/bookmark.h"
#include "ui/ui.h" #include "ui/ui.h"
#include "ui/windows.h"
static void _update_presence(const resource_presence_t presence, static void _update_presence(const resource_presence_t presence,
const char * const show, gchar **args); const char * const show, gchar **args);
@ -1796,19 +1797,49 @@ cmd_room(gchar **args, struct cmd_help_t help)
return TRUE; return TRUE;
} }
if (g_strcmp0(args[1], "accept") == 0) { win_type_t win_type = ui_current_win_type();
// TODO check that we're in room, we're owner and room requires configuration if (win_type != WIN_MUC) {
char *room = ui_current_recipient(); cons_show("Command /room only usable in chat rooms.");
iq_create_instant_room(room); return TRUE;
} else if (g_strcmp0(args[1], "cancel") == 0) {
// check that we're in room, we're owner and room requires configuration
char *room = ui_current_recipient();
iq_destroy_instant_room(room);
} else {
cons_show("Usage: %s", help.usage);
} }
if (g_strcmp0(args[0], "config") != 0) {
cons_show("Usage: %s", help.usage);
return TRUE;
}
if ((g_strcmp0(args[1], "accept") != 0) &&
(g_strcmp0(args[1], "cancel") != 0)) {
cons_show("Usage: %s", help.usage);
return TRUE;
}
char *room = ui_current_recipient();
ProfWin *window = wins_get_by_recipient(room);
int num = wins_get_num(window);
int ui_index = num;
if (ui_index == 10) {
ui_index = 0;
}
gboolean requires_config = muc_requires_config(room);
if (!requires_config) {
win_save_vprint(window, '!', NULL, 0, COLOUR_ROOMINFO, "", "Current room ooes not require configuration.");
return TRUE;
}
if (g_strcmp0(args[1], "accept") == 0) {
iq_confirm_instant_room(room);
muc_set_requires_config(room, FALSE);
win_save_vprint(window, '!', NULL, 0, COLOUR_ROOMINFO, "", "Room unlocked.");
cons_show("Room unlocked: %s (%d)", room, ui_index);
return TRUE;
}
if (g_strcmp0(args[1], "cancel") == 0) {
iq_destroy_instant_room(room);
return TRUE;
}
return TRUE; return TRUE;
} }

View File

@ -49,6 +49,7 @@ typedef struct _muc_room_t {
char *password; char *password;
char *subject; char *subject;
char *autocomplete_prefix; char *autocomplete_prefix;
gboolean pending_config;
GList *pending_broadcasts; GList *pending_broadcasts;
gboolean autojoin; gboolean autojoin;
gboolean pending_nick_change; gboolean pending_nick_change;
@ -162,6 +163,7 @@ muc_join_room(const char * const room, const char * const nick,
} }
new_room->subject = NULL; new_room->subject = NULL;
new_room->pending_broadcasts = NULL; new_room->pending_broadcasts = NULL;
new_room->pending_config = FALSE;
new_room->roster = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, new_room->roster = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
(GDestroyNotify)p_contact_free); (GDestroyNotify)p_contact_free);
new_room->nick_ac = autocomplete_new(); new_room->nick_ac = autocomplete_new();
@ -185,6 +187,39 @@ muc_leave_room(const char * const room)
} }
} }
gboolean
muc_requires_config(const char * const room)
{
if (rooms == NULL) {
return FALSE;
}
ChatRoom *chat_room = g_hash_table_lookup(rooms, room);
if (chat_room == NULL) {
return FALSE;
}
return chat_room->pending_config;
}
void
muc_set_requires_config(const char * const room, gboolean val)
{
if (rooms == NULL) {
return;
}
ChatRoom *chat_room = g_hash_table_lookup(rooms, room);
if (chat_room == NULL) {
return;
}
chat_room->pending_config = val;
return;
}
/* /*
* Returns TRUE if the user is currently in the room * Returns TRUE if the user is currently in the room
*/ */

View File

@ -91,4 +91,7 @@ GList * muc_get_pending_broadcasts(const char * const room);
void muc_autocomplete(char *input, int *size); void muc_autocomplete(char *input, int *size);
void muc_reset_autocomplete(const char * const room); void muc_reset_autocomplete(const char * const room);
gboolean muc_requires_config(const char * const room);
void muc_set_requires_config(const char * const room, gboolean val);
#endif #endif

View File

@ -452,12 +452,14 @@ handle_room_nick_change(const char * const room,
void void
handle_room_requires_config(const char * const room) handle_room_requires_config(const char * const room)
{ {
muc_set_requires_config(room, TRUE);
ui_room_requires_config(room); ui_room_requires_config(room);
} }
void void
handle_room_destroy(const char * const room) handle_room_destroy(const char * const room)
{ {
muc_leave_room(room);
ui_room_destroyed(room); ui_room_destroyed(room);
} }

View File

@ -163,7 +163,7 @@ _iq_send_software_version(const char * const fulljid)
} }
static void static void
_iq_create_instant_room(const char * const room_jid) _iq_confirm_instant_room(const char * const room_jid)
{ {
xmpp_conn_t * const conn = connection_get_conn(); xmpp_conn_t * const conn = connection_get_conn();
xmpp_ctx_t * const ctx = connection_get_ctx(); xmpp_ctx_t * const ctx = connection_get_ctx();
@ -760,6 +760,6 @@ iq_init_module(void)
iq_disco_items_request = _iq_disco_items_request; iq_disco_items_request = _iq_disco_items_request;
iq_send_software_version = _iq_send_software_version; iq_send_software_version = _iq_send_software_version;
iq_set_autoping = _iq_set_autoping; iq_set_autoping = _iq_set_autoping;
iq_create_instant_room = _iq_create_instant_room; iq_confirm_instant_room = _iq_confirm_instant_room;
iq_destroy_instant_room = _iq_destroy_instant_room; iq_destroy_instant_room = _iq_destroy_instant_room;
} }

View File

@ -139,7 +139,7 @@ void (*iq_room_list_request)(gchar *conferencejid);
void (*iq_disco_info_request)(gchar *jid); void (*iq_disco_info_request)(gchar *jid);
void (*iq_disco_items_request)(gchar *jid); void (*iq_disco_items_request)(gchar *jid);
void (*iq_set_autoping)(int seconds); void (*iq_set_autoping)(int seconds);
void (*iq_create_instant_room)(const char * const room_jid); void (*iq_confirm_instant_room)(const char * const room_jid);
void (*iq_destroy_instant_room)(const char * const room_jid); void (*iq_destroy_instant_room)(const char * const room_jid);
// caps functions // caps functions