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

Added resource override for chat sessions

This commit is contained in:
James Booth 2015-01-10 21:07:40 +00:00
parent 7256e49396
commit 965e82b350
4 changed files with 19 additions and 20 deletions

View File

@ -46,7 +46,8 @@
static GHashTable *sessions; static GHashTable *sessions;
static void static void
_chat_session_new(const char * const barejid, const char * const resource, gboolean send_states) _chat_session_new(const char * const barejid, const char * const resource,
gboolean resource_override, gboolean send_states)
{ {
assert(barejid != NULL); assert(barejid != NULL);
assert(resource != NULL); assert(resource != NULL);
@ -54,9 +55,10 @@ _chat_session_new(const char * const barejid, const char * const resource, gbool
ChatSession *new_session = malloc(sizeof(struct chat_session_t)); ChatSession *new_session = malloc(sizeof(struct chat_session_t));
new_session->barejid = strdup(barejid); new_session->barejid = strdup(barejid);
new_session->resource = strdup(resource); new_session->resource = strdup(resource);
new_session->resource_override = resource_override;
new_session->send_states = send_states; new_session->send_states = send_states;
g_hash_table_insert(sessions, strdup(barejid), new_session); g_hash_table_replace(sessions, strdup(barejid), new_session);
} }
static void static void
@ -83,6 +85,12 @@ chat_sessions_clear(void)
g_hash_table_remove_all(sessions); g_hash_table_remove_all(sessions);
} }
void
chat_session_resource_override(const char * const barejid, const char * const resource)
{
_chat_session_new(barejid, resource, TRUE, FALSE);
}
ChatSession* ChatSession*
chat_session_get(const char * const barejid) chat_session_get(const char * const barejid)
{ {
@ -100,15 +108,14 @@ chat_session_on_recipient_activity(const char * const barejid, const char * cons
// session exists with resource, do nothing // session exists with resource, do nothing
if (g_strcmp0(session->resource, resource) == 0) { if (g_strcmp0(session->resource, resource) == 0) {
return; return;
// session exists with differet resource, replace // session exists with differet resource and no override, replace
} else { } else if (!session->resource_override) {
g_hash_table_remove(sessions, barejid); _chat_session_new(barejid, resource, FALSE, FALSE);
_chat_session_new(barejid, resource, FALSE);
} }
// no session, create one // no session, create one
} else { } else {
_chat_session_new(barejid, resource, FALSE); _chat_session_new(barejid, resource, FALSE, FALSE);
} }
} }

View File

@ -40,12 +40,15 @@
typedef struct chat_session_t { typedef struct chat_session_t {
char *barejid; char *barejid;
char *resource; char *resource;
gboolean resource_override;
gboolean send_states; gboolean send_states;
} ChatSession; } ChatSession;
void chat_sessions_init(void); void chat_sessions_init(void);
void chat_sessions_clear(void); void chat_sessions_clear(void);
void chat_session_resource_override(const char * const barejid, const char * const resource);
ChatSession* chat_session_get(const char * const barejid); ChatSession* chat_session_get(const char * const barejid);
void chat_session_on_recipient_activity(const char * const barejid, const char * const resourcepart); void chat_session_on_recipient_activity(const char * const barejid, const char * const resourcepart);
void chat_session_remove(const char * const barejid); void chat_session_remove(const char * const barejid);

View File

@ -1203,17 +1203,6 @@ cmd_msg(gchar **args, struct cmd_help_t help)
barejid = usr; barejid = usr;
} }
// TODO if msg to current recipient, and resource specified, set resource
// char *resource = NULL;
// ProfWin *current = wins_get_current();
// if (current->type == WIN_CHAT) {
// ProfChatWin *chatwin = (ProfChatWin*)current;
// assert(chatwin->memcheck == PROFCHATWIN_MEMCHECK);
// if ((g_strcmp0(chatwin->barejid, barejid) == 0) && (chatwin->resource)) {
// resource = chatwin->resource;
// }
// }
if (msg != NULL) { if (msg != NULL) {
#ifdef HAVE_LIBOTR #ifdef HAVE_LIBOTR
if (otr_is_secure(barejid)) { if (otr_is_secure(barejid)) {
@ -1635,10 +1624,12 @@ cmd_resource(gchar **args, struct cmd_help_t help)
} }
chatwin->resource_override = strdup(resource); chatwin->resource_override = strdup(resource);
chat_session_resource_override(chatwin->barejid, resource);
return TRUE; return TRUE;
} else if (g_strcmp0(cmd, "off") == 0) { } else if (g_strcmp0(cmd, "off") == 0) {
FREE_SET_NULL(chatwin->resource_override); FREE_SET_NULL(chatwin->resource_override);
chat_session_remove(chatwin->barejid);
return TRUE; return TRUE;
} else { } else {
cons_show("Usage: %s", help.usage); cons_show("Usage: %s", help.usage);

View File

@ -931,8 +931,6 @@ ui_gone_secure(const char * const barejid, gboolean trusted)
chatwin = (ProfChatWin*)window; chatwin = (ProfChatWin*)window;
} }
FREE_SET_NULL(chatwin->resource_override);
chatwin->is_otr = TRUE; chatwin->is_otr = TRUE;
chatwin->is_trusted = trusted; chatwin->is_trusted = trusted;
if (trusted) { if (trusted) {