1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-11-03 19:37:16 -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);
} else if (strcmp(subcmd, "show") == 0) {
PContact contact = contact_list_get_contact(bare_jid);
if (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 ((contact == NULL) || (p_contact_subscription(contact) == NULL)) {
if (win_current_is_chat()) {
win_current_show("No subscription information for %s.", bare_jid);
} else {
@ -1023,11 +1017,21 @@ _cmd_sub(gchar **args, struct cmd_help_t help)
}
} else {
if (win_current_is_chat()) {
win_current_show("%s subscription status: %s.", bare_jid,
p_contact_subscription(contact));
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,
p_contact_subscription(contact));
}
} else {
cons_show("%s subscription status: %s.", bare_jid,
p_contact_subscription(contact));
if (p_contact_pending_out(contact)) {
cons_show("%s subscription status: %s, request pending.",
bare_jid, p_contact_subscription(contact));
} else {
cons_show("%s subscription status: %s.", bare_jid,
p_contact_subscription(contact));
}
}
}
} else {

View File

@ -33,12 +33,13 @@ struct p_contact_t {
char *presence;
char *status;
char *subscription;
gboolean pending_out;
};
PContact
p_contact_new(const char * const jid, const char * const name,
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));
contact->jid = strdup(jid);
@ -64,6 +65,8 @@ p_contact_new(const char * const jid, const char * const name,
else
contact->subscription = strdup("none");;
contact->pending_out = pending_out;
return contact;
}
@ -156,6 +159,12 @@ p_contact_subscription(const PContact contact)
return contact->subscription;
}
gboolean
p_contact_pending_out(const PContact contact)
{
return contact->pending_out;
}
void
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,
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);
void p_contact_free(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_status(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_status(const PContact contact, const char * const status);
int p_contacts_equal_deep(const PContact c1, const PContact c2);

View File

@ -56,13 +56,14 @@ contact_list_reset_search_attempts(void)
gboolean
contact_list_add(const char * const jid, const char * const name,
const char * const presence, const char * const status,
const char * const subscription)
const char * const subscription, gboolean pending_out)
{
gboolean added = FALSE;
PContact contact = g_hash_table_lookup(contacts, jid);
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);
p_autocomplete_add(ac, strdup(jid));
added = TRUE;

View File

@ -32,7 +32,7 @@ void contact_list_clear(void);
void contact_list_reset_search_attempts(void);
gboolean contact_list_add(const char * const jid, const char * const name,
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,
const char * const status);
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 *name = xmpp_stanza_get_attribute(item, STANZA_ATTR_NAME);
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) {
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;
}
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);
}

View File

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