1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Show "request pending" in /sub show, when request has been sent

This commit is contained in:
James Booth 2012-11-27 22:26:42 +00:00
parent 4b460100ad
commit 2f2fa8de66
8 changed files with 42 additions and 18 deletions

View File

@ -1009,13 +1009,7 @@ _cmd_sub(gchar **args, struct cmd_help_t help)
log_info("Sent subscription request to %s.", bare_jid); log_info("Sent subscription request to %s.", bare_jid);
} else if (strcmp(subcmd, "show") == 0) { } else if (strcmp(subcmd, "show") == 0) {
PContact contact = contact_list_get_contact(bare_jid); PContact contact = contact_list_get_contact(bare_jid);
if (contact == NULL) { if ((contact == NULL) || (p_contact_subscription(contact) == NULL)) {
if (win_current_is_chat()) {
win_current_show("No subscription information for %s.", bare_jid);
} else {
cons_show("No subscription information for %s.", bare_jid);
}
} else if (p_contact_subscription(contact) == NULL) {
if (win_current_is_chat()) { if (win_current_is_chat()) {
win_current_show("No subscription information for %s.", bare_jid); win_current_show("No subscription information for %s.", bare_jid);
} else { } else {
@ -1023,13 +1017,23 @@ _cmd_sub(gchar **args, struct cmd_help_t help)
} }
} else { } else {
if (win_current_is_chat()) { if (win_current_is_chat()) {
if (p_contact_pending_out(contact)) {
win_current_show("%s subscription status: %s, request pending.",
bare_jid, p_contact_subscription(contact));
} else {
win_current_show("%s subscription status: %s.", bare_jid, win_current_show("%s subscription status: %s.", bare_jid,
p_contact_subscription(contact)); p_contact_subscription(contact));
}
} else {
if (p_contact_pending_out(contact)) {
cons_show("%s subscription status: %s, request pending.",
bare_jid, p_contact_subscription(contact));
} else { } else {
cons_show("%s subscription status: %s.", bare_jid, cons_show("%s subscription status: %s.", bare_jid,
p_contact_subscription(contact)); p_contact_subscription(contact));
} }
} }
}
} else { } else {
cons_show("Usage: %s", help.usage); cons_show("Usage: %s", help.usage);
} }

View File

@ -33,12 +33,13 @@ struct p_contact_t {
char *presence; char *presence;
char *status; char *status;
char *subscription; char *subscription;
gboolean pending_out;
}; };
PContact PContact
p_contact_new(const char * const jid, const char * const name, p_contact_new(const char * const jid, const char * const name,
const char * const presence, const char * const status, const char * const presence, const char * const status,
const char * const subscription) const char * const subscription, gboolean pending_out)
{ {
PContact contact = malloc(sizeof(struct p_contact_t)); PContact contact = malloc(sizeof(struct p_contact_t));
contact->jid = strdup(jid); contact->jid = strdup(jid);
@ -64,6 +65,8 @@ p_contact_new(const char * const jid, const char * const name,
else else
contact->subscription = strdup("none");; contact->subscription = strdup("none");;
contact->pending_out = pending_out;
return contact; return contact;
} }
@ -156,6 +159,12 @@ p_contact_subscription(const PContact contact)
return contact->subscription; return contact->subscription;
} }
gboolean
p_contact_pending_out(const PContact contact)
{
return contact->pending_out;
}
void void
p_contact_set_presence(const PContact contact, const char * const presence) p_contact_set_presence(const PContact contact, const char * const presence)
{ {

View File

@ -27,7 +27,7 @@ typedef struct p_contact_t *PContact;
PContact p_contact_new(const char * const jid, const char * const name, PContact p_contact_new(const char * const jid, const char * const name,
const char * const presence, const char * const status, const char * const presence, const char * const status,
const char * const subscription); const char * const subscription, gboolean pending_out);
PContact p_contact_copy(PContact contact); PContact p_contact_copy(PContact contact);
void p_contact_free(PContact contact); void p_contact_free(PContact contact);
const char * p_contact_jid(PContact contact); const char * p_contact_jid(PContact contact);
@ -35,6 +35,7 @@ const char * p_contact_name(PContact contact);
const char * p_contact_presence(PContact contact); const char * p_contact_presence(PContact contact);
const char * p_contact_status(PContact contact); const char * p_contact_status(PContact contact);
const char * p_contact_subscription(const PContact contact); const char * p_contact_subscription(const PContact contact);
gboolean p_contact_pending_out(const PContact contact);
void p_contact_set_presence(const PContact contact, const char * const presence); void p_contact_set_presence(const PContact contact, const char * const presence);
void p_contact_set_status(const PContact contact, const char * const status); void p_contact_set_status(const PContact contact, const char * const status);
int p_contacts_equal_deep(const PContact c1, const PContact c2); int p_contacts_equal_deep(const PContact c1, const PContact c2);

View File

@ -56,13 +56,14 @@ contact_list_reset_search_attempts(void)
gboolean gboolean
contact_list_add(const char * const jid, const char * const name, contact_list_add(const char * const jid, const char * const name,
const char * const presence, const char * const status, const char * const presence, const char * const status,
const char * const subscription) const char * const subscription, gboolean pending_out)
{ {
gboolean added = FALSE; gboolean added = FALSE;
PContact contact = g_hash_table_lookup(contacts, jid); PContact contact = g_hash_table_lookup(contacts, jid);
if (contact == NULL) { if (contact == NULL) {
contact = p_contact_new(jid, name, presence, status, subscription); contact = p_contact_new(jid, name, presence, status, subscription,
pending_out);
g_hash_table_insert(contacts, strdup(jid), contact); g_hash_table_insert(contacts, strdup(jid), contact);
p_autocomplete_add(ac, strdup(jid)); p_autocomplete_add(ac, strdup(jid));
added = TRUE; added = TRUE;

View File

@ -32,7 +32,7 @@ void contact_list_clear(void);
void contact_list_reset_search_attempts(void); void contact_list_reset_search_attempts(void);
gboolean contact_list_add(const char * const jid, const char * const name, gboolean contact_list_add(const char * const jid, const char * const name,
const char * const presence, const char * const status, const char * const presence, const char * const status,
const char * const subscription); const char * const subscription, gboolean pending_out);
gboolean contact_list_update_contact(const char * const jid, const char * const presence, gboolean contact_list_update_contact(const char * const jid, const char * const presence,
const char * const status); const char * const status);
GSList * get_contact_list(void); GSList * get_contact_list(void);

View File

@ -760,7 +760,15 @@ _roster_handler(xmpp_conn_t * const conn,
const char *jid = xmpp_stanza_get_attribute(item, STANZA_ATTR_JID); const char *jid = xmpp_stanza_get_attribute(item, STANZA_ATTR_JID);
const char *name = xmpp_stanza_get_attribute(item, STANZA_ATTR_NAME); const char *name = xmpp_stanza_get_attribute(item, STANZA_ATTR_NAME);
const char *sub = xmpp_stanza_get_attribute(item, STANZA_ATTR_SUBSCRIPTION); const char *sub = xmpp_stanza_get_attribute(item, STANZA_ATTR_SUBSCRIPTION);
gboolean added = contact_list_add(jid, name, "offline", NULL, sub);
gboolean pending_out = FALSE;
const char *ask = xmpp_stanza_get_attribute(item, STANZA_ATTR_ASK);
if ((ask != NULL) && (strcmp(ask, "subscribe") == 0)) {
pending_out = TRUE;
}
gboolean added = contact_list_add(jid, name, "offline", NULL, sub,
pending_out);
if (!added) { if (!added) {
log_warning("Attempt to add contact twice: %s", jid); log_warning("Attempt to add contact twice: %s", jid);

View File

@ -252,7 +252,7 @@ room_add_to_roster(const char * const room, const char * const nick,
updated = TRUE; updated = TRUE;
} }
PContact contact = p_contact_new(nick, NULL, show, status, NULL); PContact contact = p_contact_new(nick, NULL, show, status, NULL, FALSE);
g_hash_table_replace(chat_room->roster, strdup(nick), contact); g_hash_table_replace(chat_room->roster, strdup(nick), contact);
} }

View File

@ -67,6 +67,7 @@
#define STANZA_ATTR_SUBSCRIPTION "subscription" #define STANZA_ATTR_SUBSCRIPTION "subscription"
#define STANZA_ATTR_XMLNS "xmlns" #define STANZA_ATTR_XMLNS "xmlns"
#define STANZA_ATTR_NICK "nick" #define STANZA_ATTR_NICK "nick"
#define STANZA_ATTR_ASK "ask"
#define STANZA_TEXT_AWAY "away" #define STANZA_TEXT_AWAY "away"
#define STANZA_TEXT_DND "dnd" #define STANZA_TEXT_DND "dnd"