mirror of
https://git.jabber.space/devs/cproof.git
synced 2026-07-28 08:26:21 +00:00
Added individual options to send and request delivery receipts
This commit is contained in:
@@ -101,6 +101,7 @@ static char * _resource_autocomplete(const char * const input);
|
|||||||
static char * _titlebar_autocomplete(const char * const input);
|
static char * _titlebar_autocomplete(const char * const input);
|
||||||
static char * _inpblock_autocomplete(const char * const input);
|
static char * _inpblock_autocomplete(const char * const input);
|
||||||
static char * _time_autocomplete(const char * const input);
|
static char * _time_autocomplete(const char * const input);
|
||||||
|
static char * _receipts_autocomplete(const char * const input);
|
||||||
|
|
||||||
GHashTable *commands = NULL;
|
GHashTable *commands = NULL;
|
||||||
|
|
||||||
@@ -920,12 +921,14 @@ static struct cmd_t command_defs[] =
|
|||||||
NULL } } },
|
NULL } } },
|
||||||
|
|
||||||
{ "/receipts",
|
{ "/receipts",
|
||||||
cmd_receipts, parse_args, 1, 1, &cons_receipts_setting,
|
cmd_receipts, parse_args, 2, 2, &cons_receipts_setting,
|
||||||
{ "/receipts on|off", "Message delivery receipts.",
|
{ "/receipts send|request on|off", "Message delivery receipts.",
|
||||||
{ "/receipts on|off",
|
{ "/receipts send|request on|off",
|
||||||
"----------------",
|
"-----------------------------",
|
||||||
"Enable or disable message delivery receipts.",
|
"Enable or disable message delivery receipts. The interface will indicate when a message has been received.",
|
||||||
"The user interface will indicate when a message has been received.",
|
"",
|
||||||
|
"send on|off : Enable or disable sending of delivery receipts.",
|
||||||
|
"request on|off : Enable or disable sending of delivery receipt requests.",
|
||||||
NULL } } },
|
NULL } } },
|
||||||
|
|
||||||
{ "/reconnect",
|
{ "/reconnect",
|
||||||
@@ -1198,6 +1201,7 @@ static Autocomplete time_ac;
|
|||||||
static Autocomplete time_statusbar_ac;
|
static Autocomplete time_statusbar_ac;
|
||||||
static Autocomplete resource_ac;
|
static Autocomplete resource_ac;
|
||||||
static Autocomplete inpblock_ac;
|
static Autocomplete inpblock_ac;
|
||||||
|
static Autocomplete receipts_ac;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialise command autocompleter and history
|
* Initialise command autocompleter and history
|
||||||
@@ -1555,6 +1559,10 @@ cmd_init(void)
|
|||||||
inpblock_ac = autocomplete_new();
|
inpblock_ac = autocomplete_new();
|
||||||
autocomplete_add(inpblock_ac, "timeout");
|
autocomplete_add(inpblock_ac, "timeout");
|
||||||
autocomplete_add(inpblock_ac, "dynamic");
|
autocomplete_add(inpblock_ac, "dynamic");
|
||||||
|
|
||||||
|
receipts_ac = autocomplete_new();
|
||||||
|
autocomplete_add(receipts_ac, "send");
|
||||||
|
autocomplete_add(receipts_ac, "request");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1612,6 +1620,7 @@ cmd_uninit(void)
|
|||||||
autocomplete_free(time_statusbar_ac);
|
autocomplete_free(time_statusbar_ac);
|
||||||
autocomplete_free(resource_ac);
|
autocomplete_free(resource_ac);
|
||||||
autocomplete_free(inpblock_ac);
|
autocomplete_free(inpblock_ac);
|
||||||
|
autocomplete_free(receipts_ac);
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
@@ -1778,6 +1787,7 @@ cmd_reset_autocomplete()
|
|||||||
autocomplete_reset(time_statusbar_ac);
|
autocomplete_reset(time_statusbar_ac);
|
||||||
autocomplete_reset(resource_ac);
|
autocomplete_reset(resource_ac);
|
||||||
autocomplete_reset(inpblock_ac);
|
autocomplete_reset(inpblock_ac);
|
||||||
|
autocomplete_reset(receipts_ac);
|
||||||
|
|
||||||
if (ui_current_win_type() == WIN_CHAT) {
|
if (ui_current_win_type() == WIN_CHAT) {
|
||||||
ProfChatWin *chatwin = wins_get_current_chat();
|
ProfChatWin *chatwin = wins_get_current_chat();
|
||||||
@@ -1897,7 +1907,7 @@ _cmd_complete_parameters(const char * const input)
|
|||||||
// autocomplete boolean settings
|
// autocomplete boolean settings
|
||||||
gchar *boolean_choices[] = { "/beep", "/intype", "/states", "/outtype",
|
gchar *boolean_choices[] = { "/beep", "/intype", "/states", "/outtype",
|
||||||
"/flash", "/splash", "/chlog", "/grlog", "/mouse", "/history",
|
"/flash", "/splash", "/chlog", "/grlog", "/mouse", "/history",
|
||||||
"/vercheck", "/privileges", "/presence", "/wrap", "/carbons", "/receipts" };
|
"/vercheck", "/privileges", "/presence", "/wrap", "/carbons" };
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(boolean_choices); i++) {
|
for (i = 0; i < ARRAY_SIZE(boolean_choices); i++) {
|
||||||
result = autocomplete_param_with_func(input, boolean_choices[i], prefs_autocomplete_boolean_choice);
|
result = autocomplete_param_with_func(input, boolean_choices[i], prefs_autocomplete_boolean_choice);
|
||||||
@@ -1998,6 +2008,7 @@ _cmd_complete_parameters(const char * const input)
|
|||||||
g_hash_table_insert(ac_funcs, "/titlebar", _titlebar_autocomplete);
|
g_hash_table_insert(ac_funcs, "/titlebar", _titlebar_autocomplete);
|
||||||
g_hash_table_insert(ac_funcs, "/inpblock", _inpblock_autocomplete);
|
g_hash_table_insert(ac_funcs, "/inpblock", _inpblock_autocomplete);
|
||||||
g_hash_table_insert(ac_funcs, "/time", _time_autocomplete);
|
g_hash_table_insert(ac_funcs, "/time", _time_autocomplete);
|
||||||
|
g_hash_table_insert(ac_funcs, "/receipts", _receipts_autocomplete);
|
||||||
|
|
||||||
int len = strlen(input);
|
int len = strlen(input);
|
||||||
char parsed[len+1];
|
char parsed[len+1];
|
||||||
@@ -2814,6 +2825,29 @@ _statuses_autocomplete(const char * const input)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
_receipts_autocomplete(const char * const input)
|
||||||
|
{
|
||||||
|
char *result = NULL;
|
||||||
|
|
||||||
|
result = autocomplete_param_with_func(input, "/receipts send", prefs_autocomplete_boolean_choice);
|
||||||
|
if (result != NULL) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = autocomplete_param_with_func(input, "/receipts request", prefs_autocomplete_boolean_choice);
|
||||||
|
if (result != NULL) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = autocomplete_param_with_ac(input, "/receipts", receipts_ac, TRUE);
|
||||||
|
if (result != NULL) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
_alias_autocomplete(const char * const input)
|
_alias_autocomplete(const char * const input)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4016,8 +4016,16 @@ cmd_carbons(gchar **args, struct cmd_help_t help)
|
|||||||
gboolean
|
gboolean
|
||||||
cmd_receipts(gchar **args, struct cmd_help_t help)
|
cmd_receipts(gchar **args, struct cmd_help_t help)
|
||||||
{
|
{
|
||||||
return _cmd_set_boolean_preference(args[0], help,
|
if (g_strcmp0(args[0], "send") == 0) {
|
||||||
"Message delivery receipts", PREF_RECEIPTS);
|
return _cmd_set_boolean_preference(args[1], help,
|
||||||
|
"Send delivery receipts", PREF_RECEIPTS_SEND);
|
||||||
|
} else if (g_strcmp0(args[0], "request") == 0) {
|
||||||
|
return _cmd_set_boolean_preference(args[1], help,
|
||||||
|
"Request delivery receipets", PREF_RECEIPTS_REQUEST);
|
||||||
|
} else {
|
||||||
|
cons_show("Usage: %s", help.usage);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
|
|||||||
@@ -543,7 +543,8 @@ _get_group(preference_t pref)
|
|||||||
case PREF_CONNECT_ACCOUNT:
|
case PREF_CONNECT_ACCOUNT:
|
||||||
case PREF_DEFAULT_ACCOUNT:
|
case PREF_DEFAULT_ACCOUNT:
|
||||||
case PREF_CARBONS:
|
case PREF_CARBONS:
|
||||||
case PREF_RECEIPTS:
|
case PREF_RECEIPTS_SEND:
|
||||||
|
case PREF_RECEIPTS_REQUEST:
|
||||||
return PREF_GROUP_CONNECTION;
|
return PREF_GROUP_CONNECTION;
|
||||||
case PREF_OTR_LOG:
|
case PREF_OTR_LOG:
|
||||||
case PREF_OTR_POLICY:
|
case PREF_OTR_POLICY:
|
||||||
@@ -580,8 +581,10 @@ _get_key(preference_t pref)
|
|||||||
return "history";
|
return "history";
|
||||||
case PREF_CARBONS:
|
case PREF_CARBONS:
|
||||||
return "carbons";
|
return "carbons";
|
||||||
case PREF_RECEIPTS:
|
case PREF_RECEIPTS_SEND:
|
||||||
return "receipts";
|
return "receipts.send";
|
||||||
|
case PREF_RECEIPTS_REQUEST:
|
||||||
|
return "receipts.request";
|
||||||
case PREF_MOUSE:
|
case PREF_MOUSE:
|
||||||
return "mouse";
|
return "mouse";
|
||||||
case PREF_OCCUPANTS:
|
case PREF_OCCUPANTS:
|
||||||
|
|||||||
@@ -60,7 +60,8 @@ typedef enum {
|
|||||||
PREF_INTYPE,
|
PREF_INTYPE,
|
||||||
PREF_HISTORY,
|
PREF_HISTORY,
|
||||||
PREF_CARBONS,
|
PREF_CARBONS,
|
||||||
PREF_RECEIPTS,
|
PREF_RECEIPTS_SEND,
|
||||||
|
PREF_RECEIPTS_REQUEST,
|
||||||
PREF_MOUSE,
|
PREF_MOUSE,
|
||||||
PREF_OCCUPANTS,
|
PREF_OCCUPANTS,
|
||||||
PREF_OCCUPANTS_SIZE,
|
PREF_OCCUPANTS_SIZE,
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ buffer_mark_received(ProfBuff buffer, const char * const id)
|
|||||||
GSList *entries = buffer->entries;
|
GSList *entries = buffer->entries;
|
||||||
while (entries) {
|
while (entries) {
|
||||||
ProfBuffEntry *entry = entries->data;
|
ProfBuffEntry *entry = entries->data;
|
||||||
if (entry->receipt) {
|
if (entry->receipt && g_strcmp0(entry->receipt->id, id) == 0) {
|
||||||
if (!entry->receipt->received) {
|
if (!entry->receipt->received) {
|
||||||
entry->receipt->received = TRUE;
|
entry->receipt->received = TRUE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|||||||
@@ -1199,10 +1199,16 @@ cons_carbons_setting(void)
|
|||||||
void
|
void
|
||||||
cons_receipts_setting(void)
|
cons_receipts_setting(void)
|
||||||
{
|
{
|
||||||
if (prefs_get_boolean(PREF_RECEIPTS))
|
if (prefs_get_boolean(PREF_RECEIPTS_REQUEST))
|
||||||
cons_show("Message receipts (/receipts) : ON");
|
cons_show("Request receipts (/receipts) : ON");
|
||||||
else
|
else
|
||||||
cons_show("Message receipts (/receipts) : OFF");
|
cons_show("Request receipts (/receipts) : OFF");
|
||||||
|
|
||||||
|
if (prefs_get_boolean(PREF_RECEIPTS_SEND))
|
||||||
|
cons_show("Send receipts (/receipts) : ON");
|
||||||
|
else
|
||||||
|
cons_show("Send receipts (/receipts) : OFF");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -1467,7 +1467,7 @@ ui_outgoing_chat_msg(const char * const barejid, const char * const message, cha
|
|||||||
ProfChatWin *chatwin = (ProfChatWin*)window;
|
ProfChatWin *chatwin = (ProfChatWin*)window;
|
||||||
chat_state_active(chatwin->state);
|
chat_state_active(chatwin->state);
|
||||||
|
|
||||||
if (prefs_get_boolean(PREF_RECEIPTS) && id) {
|
if (prefs_get_boolean(PREF_RECEIPTS_REQUEST) && id) {
|
||||||
win_print_with_receipt(window, '-', NULL, 0, THEME_TEXT_ME, "me", message, id);
|
win_print_with_receipt(window, '-', NULL, 0, THEME_TEXT_ME, "me", message, id);
|
||||||
} else {
|
} else {
|
||||||
win_print(window, '-', NULL, 0, THEME_TEXT_ME, "me", message);
|
win_print(window, '-', NULL, 0, THEME_TEXT_ME, "me", message);
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ message_send_chat(const char * const barejid, const char * const msg)
|
|||||||
if (state) {
|
if (state) {
|
||||||
stanza_attach_state(ctx, message, state);
|
stanza_attach_state(ctx, message, state);
|
||||||
}
|
}
|
||||||
if (prefs_get_boolean(PREF_RECEIPTS)) {
|
if (prefs_get_boolean(PREF_RECEIPTS_REQUEST)) {
|
||||||
stanza_attach_receipt_request(ctx, message);
|
stanza_attach_receipt_request(ctx, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,7 +151,7 @@ message_send_chat_encrypted(const char * const barejid, const char * const msg)
|
|||||||
stanza_attach_state(ctx, message, state);
|
stanza_attach_state(ctx, message, state);
|
||||||
}
|
}
|
||||||
stanza_attach_carbons_private(ctx, message);
|
stanza_attach_carbons_private(ctx, message);
|
||||||
if (prefs_get_boolean(PREF_RECEIPTS)) {
|
if (prefs_get_boolean(PREF_RECEIPTS_REQUEST)) {
|
||||||
stanza_attach_receipt_request(ctx, message);
|
stanza_attach_receipt_request(ctx, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -621,7 +621,7 @@ _chat_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza,
|
|||||||
} else {
|
} else {
|
||||||
handle_incoming_message(jid->barejid, jid->resourcepart, message);
|
handle_incoming_message(jid->barejid, jid->resourcepart, message);
|
||||||
}
|
}
|
||||||
if (id) {
|
if (id && prefs_get_boolean(PREF_RECEIPTS_SEND)) {
|
||||||
xmpp_stanza_t *receipts = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_RECEIPTS);
|
xmpp_stanza_t *receipts = xmpp_stanza_get_child_by_ns(stanza, STANZA_NS_RECEIPTS);
|
||||||
if (receipts) {
|
if (receipts) {
|
||||||
char *receipts_name = xmpp_stanza_get_name(receipts);
|
char *receipts_name = xmpp_stanza_get_name(receipts);
|
||||||
|
|||||||
Reference in New Issue
Block a user