added delay for autojoin
This commit is contained in:
parent
bc00b79aa4
commit
2908d7f824
@ -39,9 +39,9 @@ struct t_config_option *twc_config_friend_request_message;
|
|||||||
struct t_config_option *twc_config_short_id_size;
|
struct t_config_option *twc_config_short_id_size;
|
||||||
|
|
||||||
char *twc_profile_option_names[TWC_PROFILE_NUM_OPTIONS] = {
|
char *twc_profile_option_names[TWC_PROFILE_NUM_OPTIONS] = {
|
||||||
"save_file", "autoload", "autojoin", "max_friend_requests",
|
"save_file", "autoload", "autojoin", "autojoin_delay",
|
||||||
"proxy_address", "proxy_port", "proxy_type", "udp",
|
"max_friend_requests", "proxy_address", "proxy_port", "proxy_type",
|
||||||
"ipv6", "passphrase", "logging",
|
"udp", "ipv6", "passphrase", "logging",
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -222,6 +222,15 @@ twc_config_init_option(struct t_twc_profile *profile,
|
|||||||
"by your friends";
|
"by your friends";
|
||||||
default_value = "off";
|
default_value = "off";
|
||||||
break;
|
break;
|
||||||
|
case TWC_PROFILE_OPTION_AUTOJOIN_DELAY:
|
||||||
|
type = "integer";
|
||||||
|
description = "delay befor do autojoin (in ms) this required to "
|
||||||
|
"tox from entering incorrect state and stop processing "
|
||||||
|
"group events";
|
||||||
|
min = 0;
|
||||||
|
max = INT_MAX;
|
||||||
|
default_value = "5000";
|
||||||
|
break;
|
||||||
case TWC_PROFILE_OPTION_IPV6:
|
case TWC_PROFILE_OPTION_IPV6:
|
||||||
type = "boolean";
|
type = "boolean";
|
||||||
description = "use IPv6 as well as IPv4 to connect to the Tox "
|
description = "use IPv6 as well as IPv4 to connect to the Tox "
|
||||||
|
@ -57,6 +57,11 @@ twc_group_chat_invite_add(struct t_twc_profile *profile, int32_t friend_number,
|
|||||||
invite->data = data_copy;
|
invite->data = data_copy;
|
||||||
invite->data_size = size;
|
invite->data_size = size;
|
||||||
|
|
||||||
|
if (TWC_PROFILE_OPTION_BOOLEAN(profile, TWC_PROFILE_OPTION_AUTOJOIN))
|
||||||
|
invite->autojoin_delay = TWC_PROFILE_OPTION_INTEGER(profile, TWC_PROFILE_OPTION_AUTOJOIN_DELAY);
|
||||||
|
else
|
||||||
|
invite->autojoin_delay = 0;
|
||||||
|
|
||||||
twc_list_item_new_data_add(profile->group_chat_invites, invite);
|
twc_list_item_new_data_add(profile->group_chat_invites, invite);
|
||||||
|
|
||||||
return profile->group_chat_invites->count - 1;
|
return profile->group_chat_invites->count - 1;
|
||||||
|
@ -37,6 +37,7 @@ struct t_twc_group_chat_invite
|
|||||||
uint8_t group_chat_type;
|
uint8_t group_chat_type;
|
||||||
uint8_t *data;
|
uint8_t *data;
|
||||||
size_t data_size;
|
size_t data_size;
|
||||||
|
uint32_t autojoin_delay;
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -30,6 +30,7 @@ enum t_twc_profile_option
|
|||||||
TWC_PROFILE_OPTION_SAVEFILE = 0,
|
TWC_PROFILE_OPTION_SAVEFILE = 0,
|
||||||
TWC_PROFILE_OPTION_AUTOLOAD,
|
TWC_PROFILE_OPTION_AUTOLOAD,
|
||||||
TWC_PROFILE_OPTION_AUTOJOIN,
|
TWC_PROFILE_OPTION_AUTOJOIN,
|
||||||
|
TWC_PROFILE_OPTION_AUTOJOIN_DELAY,
|
||||||
TWC_PROFILE_OPTION_MAX_FRIEND_REQUESTS,
|
TWC_PROFILE_OPTION_MAX_FRIEND_REQUESTS,
|
||||||
TWC_PROFILE_OPTION_PROXY_ADDRESS,
|
TWC_PROFILE_OPTION_PROXY_ADDRESS,
|
||||||
TWC_PROFILE_OPTION_PROXY_PORT,
|
TWC_PROFILE_OPTION_PROXY_PORT,
|
||||||
|
@ -40,12 +40,18 @@
|
|||||||
int
|
int
|
||||||
twc_do_timer_cb(const void *pointer, void *data, int remaining_calls)
|
twc_do_timer_cb(const void *pointer, void *data, int remaining_calls)
|
||||||
{
|
{
|
||||||
|
uint32_t interval;
|
||||||
|
int i;
|
||||||
|
int64_t rc;
|
||||||
|
char *tags;
|
||||||
|
|
||||||
/* TODO: don't strip the const */
|
/* TODO: don't strip the const */
|
||||||
struct t_twc_profile *profile = (void *)pointer;
|
struct t_twc_profile *profile = (void *)pointer;
|
||||||
|
|
||||||
|
interval = tox_iteration_interval(profile->tox);
|
||||||
tox_iterate(profile->tox, profile);
|
tox_iterate(profile->tox, profile);
|
||||||
struct t_hook *hook =
|
struct t_hook *hook =
|
||||||
weechat_hook_timer(tox_iteration_interval(profile->tox), 0, 1,
|
weechat_hook_timer(interval, 0, 1,
|
||||||
twc_do_timer_cb, profile, NULL);
|
twc_do_timer_cb, profile, NULL);
|
||||||
profile->tox_do_timer = hook;
|
profile->tox_do_timer = hook;
|
||||||
|
|
||||||
@ -55,6 +61,75 @@ twc_do_timer_cb(const void *pointer, void *data, int remaining_calls)
|
|||||||
connection == TOX_CONNECTION_TCP || connection == TOX_CONNECTION_UDP;
|
connection == TOX_CONNECTION_TCP || connection == TOX_CONNECTION_UDP;
|
||||||
twc_profile_set_online_status(profile, is_connected);
|
twc_profile_set_online_status(profile, is_connected);
|
||||||
|
|
||||||
|
if (TWC_PROFILE_OPTION_BOOLEAN(profile, TWC_PROFILE_OPTION_AUTOJOIN))
|
||||||
|
{
|
||||||
|
struct t_twc_group_chat_invite *invite;
|
||||||
|
for(i = 0; (invite = twc_group_chat_invite_with_index(profile, i)); i++)
|
||||||
|
if(invite->autojoin_delay <= 0)
|
||||||
|
{
|
||||||
|
struct t_twc_chat *friend_chat =
|
||||||
|
twc_chat_search_friend(profile, invite->friend_number, false);
|
||||||
|
char *friend_name = twc_get_name_nt(profile->tox, invite->friend_number);
|
||||||
|
char *type_str;
|
||||||
|
switch (invite->group_chat_type)
|
||||||
|
{
|
||||||
|
case TOX_CONFERENCE_TYPE_TEXT:
|
||||||
|
type_str = "a text-only group chat";
|
||||||
|
break;
|
||||||
|
case TOX_CONFERENCE_TYPE_AV:
|
||||||
|
type_str = "an audio/vikdeo group chat";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
type_str = "a group chat";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = twc_group_chat_invite_join(invite);
|
||||||
|
// item will be deleted, backtrack
|
||||||
|
i--;
|
||||||
|
if (rc >= 0)
|
||||||
|
{
|
||||||
|
tags = "notify_private";
|
||||||
|
if (friend_chat)
|
||||||
|
{
|
||||||
|
weechat_printf_date_tags(
|
||||||
|
friend_chat->buffer, 0, tags,
|
||||||
|
"%sWe joined the %s%s%s's invite to %s.",
|
||||||
|
weechat_prefix("network"), weechat_color("chat_nick_other"),
|
||||||
|
friend_name, weechat_color("reset"), type_str);
|
||||||
|
tags = "";
|
||||||
|
}
|
||||||
|
weechat_printf_date_tags(
|
||||||
|
profile->buffer, 0, tags,
|
||||||
|
"%sWe joined the %s%s%s's invite to %s.",
|
||||||
|
weechat_prefix("network"), weechat_color("chat_nick_other"),
|
||||||
|
friend_name, weechat_color("reset"), type_str);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tags = "notify_highlight";
|
||||||
|
if (friend_chat)
|
||||||
|
{
|
||||||
|
weechat_printf_date_tags(
|
||||||
|
friend_chat->buffer, 0, tags,
|
||||||
|
"%s%s%s%s invites you to join %s, but we failed to "
|
||||||
|
"process the invite. Please try again.",
|
||||||
|
weechat_prefix("network"), weechat_color("chat_nick_other"),
|
||||||
|
friend_name, weechat_color("reset"));
|
||||||
|
tags = "";
|
||||||
|
}
|
||||||
|
weechat_printf_date_tags(
|
||||||
|
profile->buffer, 0, tags,
|
||||||
|
"%s%s%s%s invites you to join %s, but we failed to "
|
||||||
|
"process the invite. Please try again.",
|
||||||
|
weechat_prefix("network"), weechat_color("chat_nick_other"),
|
||||||
|
friend_name, weechat_color("reset"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
invite->autojoin_delay -= interval;
|
||||||
|
}
|
||||||
|
|
||||||
return WEECHAT_RC_OK;
|
return WEECHAT_RC_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,66 +323,6 @@ twc_group_invite_callback(Tox *tox, uint32_t friend_number,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TWC_PROFILE_OPTION_BOOLEAN(profile, TWC_PROFILE_OPTION_AUTOJOIN))
|
|
||||||
{
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case TOX_CONFERENCE_TYPE_TEXT:
|
|
||||||
rc = tox_conference_join(tox, friend_number, invite_data,
|
|
||||||
length, &err);
|
|
||||||
break;
|
|
||||||
#ifdef TOXAV_ENABLED
|
|
||||||
case TOX_CONFERENCE_TYPE_AV:
|
|
||||||
rc = toxav_join_av_groupchat(tox, friend_number, invite_data,
|
|
||||||
length, NULL, NULL);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
rc = -1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc >= 0 && err == TOX_ERR_CONFERENCE_JOIN_OK)
|
|
||||||
{
|
|
||||||
tags = "notify_private";
|
|
||||||
if (friend_chat)
|
|
||||||
{
|
|
||||||
weechat_printf_date_tags(
|
|
||||||
friend_chat->buffer, 0, tags,
|
|
||||||
"%sWe joined the %s%s%s's invite to %s.",
|
|
||||||
weechat_prefix("network"), weechat_color("chat_nick_other"),
|
|
||||||
friend_name, weechat_color("reset"), type_str);
|
|
||||||
tags = "";
|
|
||||||
}
|
|
||||||
weechat_printf_date_tags(
|
|
||||||
profile->buffer, 0, tags,
|
|
||||||
"%sWe joined the %s%s%s's invite to %s.",
|
|
||||||
weechat_prefix("network"), weechat_color("chat_nick_other"),
|
|
||||||
friend_name, weechat_color("reset"), type_str);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tags = "notify_highlight";
|
|
||||||
if (friend_chat)
|
|
||||||
{
|
|
||||||
weechat_printf_date_tags(
|
|
||||||
friend_chat->buffer, 0, tags,
|
|
||||||
"%s%s%s%s invites you to join %s, but we failed to "
|
|
||||||
"process the invite. Please try again.",
|
|
||||||
weechat_prefix("network"), weechat_color("chat_nick_other"),
|
|
||||||
friend_name, weechat_color("reset"));
|
|
||||||
tags = "";
|
|
||||||
}
|
|
||||||
weechat_printf_date_tags(
|
|
||||||
profile->buffer, 0, tags,
|
|
||||||
"%s%s%s%s invites you to join %s, but we failed to "
|
|
||||||
"process the invite. Please try again.",
|
|
||||||
weechat_prefix("network"), weechat_color("chat_nick_other"),
|
|
||||||
friend_name, weechat_color("reset"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rc = twc_group_chat_invite_add(profile, friend_number, type,
|
rc = twc_group_chat_invite_add(profile, friend_number, type,
|
||||||
(uint8_t *)invite_data, length);
|
(uint8_t *)invite_data, length);
|
||||||
|
|
||||||
@ -351,7 +366,6 @@ twc_group_invite_callback(Tox *tox, uint32_t friend_number,
|
|||||||
weechat_prefix("network"), weechat_color("chat_nick_other"),
|
weechat_prefix("network"), weechat_color("chat_nick_other"),
|
||||||
friend_name, weechat_color("reset"), rc);
|
friend_name, weechat_color("reset"), rc);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
free(friend_name);
|
free(friend_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user