Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
bde0f2c7c3 | |||
83bbac2cd1 | |||
d5dede5a61 | |||
719400068a | |||
aaf8c6adc1 | |||
dc081ae2aa | |||
3cf3097094 | |||
e801626232 | |||
a5093c4aa3 | |||
c311bb5c95 | |||
887705969f | |||
316871523d | |||
a3d193516c |
2
external/solanaceae_tox
vendored
2
external/solanaceae_tox
vendored
Submodule external/solanaceae_tox updated: 4bd7235a73...ce81ef7cf7
2
external/solanaceae_toxcore
vendored
2
external/solanaceae_toxcore
vendored
Submodule external/solanaceae_toxcore updated: 49ab40a1ba...cf3679018b
@ -284,7 +284,7 @@ static void group_private_message_handler(const Tox_Event_Group_Private_Message
|
||||
|
||||
const uint32_t groupnumber = tox_event_group_private_message_get_group_number(event);
|
||||
const uint32_t peer_id = tox_event_group_private_message_get_peer_id(event);
|
||||
const Tox_Message_Type type = tox_event_group_private_message_get_type(event);
|
||||
const Tox_Message_Type type = tox_event_group_private_message_get_message_type(event);
|
||||
const uint8_t *message = tox_event_group_private_message_get_message(event);
|
||||
const size_t length = tox_event_group_private_message_get_message_length(event);
|
||||
const Tox_Group_Message_Id pseudo_msg_id = tox_event_group_private_message_get_message_id(event);
|
||||
|
@ -686,7 +686,7 @@ int main(int argc, char** argv) {
|
||||
{
|
||||
EventTypeTrivial{"uint32_t", "group_number"},
|
||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||
EventTypeByteRange{"name", "name_length", "length"}, // the latter two are ideally the same
|
||||
EventTypeByteRange{"name", "name_length", "name_length"},
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -702,7 +702,7 @@ int main(int argc, char** argv) {
|
||||
{
|
||||
EventTypeTrivial{"uint32_t", "group_number"},
|
||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||
EventTypeByteRange{"topic", "topic_length", "length"}, // the latter two are ideally the same
|
||||
EventTypeByteRange{"topic", "topic_length", "topic_length"},
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -737,7 +737,7 @@ int main(int argc, char** argv) {
|
||||
"Group_Password",
|
||||
{
|
||||
EventTypeTrivial{"uint32_t", "group_number"},
|
||||
EventTypeByteRange{"password", "password_length", "length"}, // the latter two are ideally the same
|
||||
EventTypeByteRange{"password", "password_length", "password_length"},
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -745,8 +745,8 @@ int main(int argc, char** argv) {
|
||||
{
|
||||
EventTypeTrivial{"uint32_t", "group_number"},
|
||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||
EventTypeTrivial{"Tox_Message_Type", "type"},
|
||||
EventTypeByteRange{"message", "message_length", "length"}, // the latter two are ideally the same
|
||||
EventTypeTrivial{"Tox_Message_Type", "message_type"},
|
||||
EventTypeByteRange{"message", "message_length", "message_length"},
|
||||
EventTypeTrivial{"uint32_t", "message_id"},
|
||||
}
|
||||
},
|
||||
@ -755,8 +755,8 @@ int main(int argc, char** argv) {
|
||||
{
|
||||
EventTypeTrivial{"uint32_t", "group_number"},
|
||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||
EventTypeTrivial{"Tox_Message_Type", "type"},
|
||||
EventTypeByteRange{"message", "message_length", "length"}, // the latter two are ideally the same
|
||||
EventTypeTrivial{"Tox_Message_Type", "message_type"},
|
||||
EventTypeByteRange{"message", "message_length", "message_length"},
|
||||
EventTypeTrivial{"uint32_t", "message_id"},
|
||||
}
|
||||
},
|
||||
@ -765,7 +765,7 @@ int main(int argc, char** argv) {
|
||||
{
|
||||
EventTypeTrivial{"uint32_t", "group_number"},
|
||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||
EventTypeByteRange{"data", "data_length", "length"}, // the latter two are ideally the same
|
||||
EventTypeByteRange{"data", "data_length", "data_length"},
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -773,15 +773,15 @@ int main(int argc, char** argv) {
|
||||
{
|
||||
EventTypeTrivial{"uint32_t", "group_number"},
|
||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||
EventTypeByteRange{"data", "data_length", "length"}, // the latter two are ideally the same
|
||||
EventTypeByteRange{"data", "data_length", "data_length"},
|
||||
}
|
||||
},
|
||||
{
|
||||
"Group_Invite",
|
||||
{
|
||||
EventTypeTrivial{"uint32_t", "friend_number"},
|
||||
EventTypeByteRange{"invite_data", "invite_data_length", "length"}, // the latter two are ideally the same
|
||||
EventTypeByteRange{"group_name", "group_name_length", "group_name_length"}, // they are :)
|
||||
EventTypeByteRange{"invite_data", "invite_data_length", "invite_data_length"},
|
||||
EventTypeByteRange{"group_name", "group_name_length", "group_name_length"},
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -797,8 +797,8 @@ int main(int argc, char** argv) {
|
||||
EventTypeTrivial{"uint32_t", "group_number"},
|
||||
EventTypeTrivial{"uint32_t", "peer_id"},
|
||||
EventTypeTrivial{"Tox_Group_Exit_Type", "exit_type"},
|
||||
EventTypeByteRange{"name", "name_length", "name_length"}, // they are :)
|
||||
EventTypeByteRange{"part_message", "part_message_length", "part_message_length"}, // they are :)
|
||||
EventTypeByteRange{"name", "name_length", "name_length"},
|
||||
EventTypeByteRange{"part_message", "part_message_length", "part_message_length"},
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -14,6 +14,7 @@ sh_test(
|
||||
args = ["$(locations %s)" % f for f in CIMPLE_FILES] + [
|
||||
"-Wno-boolean-return",
|
||||
"-Wno-callback-names",
|
||||
"-Wno-enum-from-int",
|
||||
"+RTS",
|
||||
"-N4",
|
||||
"-RTS",
|
||||
|
12
external/toxcore/c-toxcore/toxcore/Messenger.c
vendored
12
external/toxcore/c-toxcore/toxcore/Messenger.c
vendored
@ -775,31 +775,31 @@ int m_set_statusmessage(Messenger *m, const uint8_t *status, uint16_t length)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static bool userstatus_from_int(uint8_t status, Userstatus *out)
|
||||
static bool userstatus_from_int(uint8_t status, Userstatus *out_enum)
|
||||
{
|
||||
switch (status) {
|
||||
case USERSTATUS_NONE: {
|
||||
*out = USERSTATUS_NONE;
|
||||
*out_enum = USERSTATUS_NONE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case USERSTATUS_AWAY: {
|
||||
*out = USERSTATUS_AWAY;
|
||||
*out_enum = USERSTATUS_AWAY;
|
||||
return true;
|
||||
}
|
||||
|
||||
case USERSTATUS_BUSY: {
|
||||
*out = USERSTATUS_BUSY;
|
||||
*out_enum = USERSTATUS_BUSY;
|
||||
return true;
|
||||
}
|
||||
|
||||
case USERSTATUS_INVALID: {
|
||||
*out = USERSTATUS_INVALID;
|
||||
*out_enum = USERSTATUS_INVALID;
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
*out = USERSTATUS_INVALID;
|
||||
*out_enum = USERSTATUS_INVALID;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -220,7 +220,7 @@ static Tox_Event_Group_Custom_Packet *tox_event_group_custom_packet_alloc(void *
|
||||
*****************************************************/
|
||||
|
||||
void tox_events_handle_group_custom_packet(
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, const uint8_t *data, size_t length,
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, const uint8_t *data, size_t data_length,
|
||||
void *user_data)
|
||||
{
|
||||
Tox_Event_Group_Custom_Packet *group_custom_packet = tox_event_group_custom_packet_alloc(user_data);
|
||||
@ -231,5 +231,5 @@ void tox_events_handle_group_custom_packet(
|
||||
|
||||
tox_event_group_custom_packet_set_group_number(group_custom_packet, group_number);
|
||||
tox_event_group_custom_packet_set_peer_id(group_custom_packet, peer_id);
|
||||
tox_event_group_custom_packet_set_data(group_custom_packet, data, length);
|
||||
tox_event_group_custom_packet_set_data(group_custom_packet, data, data_length);
|
||||
}
|
||||
|
@ -220,7 +220,7 @@ static Tox_Event_Group_Custom_Private_Packet *tox_event_group_custom_private_pac
|
||||
*****************************************************/
|
||||
|
||||
void tox_events_handle_group_custom_private_packet(
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, const uint8_t *data, size_t length,
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, const uint8_t *data, size_t data_length,
|
||||
void *user_data)
|
||||
{
|
||||
Tox_Event_Group_Custom_Private_Packet *group_custom_private_packet = tox_event_group_custom_private_packet_alloc(user_data);
|
||||
@ -231,5 +231,5 @@ void tox_events_handle_group_custom_private_packet(
|
||||
|
||||
tox_event_group_custom_private_packet_set_group_number(group_custom_private_packet, group_number);
|
||||
tox_event_group_custom_private_packet_set_peer_id(group_custom_private_packet, peer_id);
|
||||
tox_event_group_custom_private_packet_set_data(group_custom_private_packet, data, length);
|
||||
tox_event_group_custom_private_packet_set_data(group_custom_private_packet, data, data_length);
|
||||
}
|
||||
|
@ -248,7 +248,7 @@ static Tox_Event_Group_Invite *tox_event_group_invite_alloc(void *user_data)
|
||||
*****************************************************/
|
||||
|
||||
void tox_events_handle_group_invite(
|
||||
Tox *tox, uint32_t friend_number, const uint8_t *invite_data, size_t length, const uint8_t *group_name, size_t group_name_length,
|
||||
Tox *tox, uint32_t friend_number, const uint8_t *invite_data, size_t invite_data_length, const uint8_t *group_name, size_t group_name_length,
|
||||
void *user_data)
|
||||
{
|
||||
Tox_Event_Group_Invite *group_invite = tox_event_group_invite_alloc(user_data);
|
||||
@ -258,6 +258,6 @@ void tox_events_handle_group_invite(
|
||||
}
|
||||
|
||||
tox_event_group_invite_set_friend_number(group_invite, friend_number);
|
||||
tox_event_group_invite_set_invite_data(group_invite, invite_data, length);
|
||||
tox_event_group_invite_set_invite_data(group_invite, invite_data, invite_data_length);
|
||||
tox_event_group_invite_set_group_name(group_invite, group_name, group_name_length);
|
||||
}
|
||||
|
@ -27,7 +27,7 @@
|
||||
struct Tox_Event_Group_Message {
|
||||
uint32_t group_number;
|
||||
uint32_t peer_id;
|
||||
Tox_Message_Type type;
|
||||
Tox_Message_Type message_type;
|
||||
uint8_t *message;
|
||||
uint32_t message_length;
|
||||
uint32_t message_id;
|
||||
@ -60,16 +60,16 @@ uint32_t tox_event_group_message_get_peer_id(const Tox_Event_Group_Message *grou
|
||||
}
|
||||
|
||||
non_null()
|
||||
static void tox_event_group_message_set_type(Tox_Event_Group_Message *group_message,
|
||||
Tox_Message_Type type)
|
||||
static void tox_event_group_message_set_message_type(Tox_Event_Group_Message *group_message,
|
||||
Tox_Message_Type message_type)
|
||||
{
|
||||
assert(group_message != nullptr);
|
||||
group_message->type = type;
|
||||
group_message->message_type = message_type;
|
||||
}
|
||||
Tox_Message_Type tox_event_group_message_get_type(const Tox_Event_Group_Message *group_message)
|
||||
Tox_Message_Type tox_event_group_message_get_message_type(const Tox_Event_Group_Message *group_message)
|
||||
{
|
||||
assert(group_message != nullptr);
|
||||
return group_message->type;
|
||||
return group_message->message_type;
|
||||
}
|
||||
|
||||
non_null(1) nullable(2)
|
||||
@ -143,7 +143,7 @@ bool tox_event_group_message_pack(
|
||||
return bin_pack_array(bp, 5)
|
||||
&& bin_pack_u32(bp, event->group_number)
|
||||
&& bin_pack_u32(bp, event->peer_id)
|
||||
&& tox_message_type_pack(event->type, bp)
|
||||
&& tox_message_type_pack(event->message_type, bp)
|
||||
&& bin_pack_bin(bp, event->message, event->message_length)
|
||||
&& bin_pack_u32(bp, event->message_id);
|
||||
}
|
||||
@ -159,7 +159,7 @@ static bool tox_event_group_message_unpack_into(
|
||||
|
||||
return bin_unpack_u32(bu, &event->group_number)
|
||||
&& bin_unpack_u32(bu, &event->peer_id)
|
||||
&& tox_message_type_unpack(&event->type, bu)
|
||||
&& tox_message_type_unpack(&event->message_type, bu)
|
||||
&& bin_unpack_bin(bu, &event->message, &event->message_length)
|
||||
&& bin_unpack_u32(bu, &event->message_id);
|
||||
}
|
||||
@ -254,7 +254,7 @@ static Tox_Event_Group_Message *tox_event_group_message_alloc(void *user_data)
|
||||
*****************************************************/
|
||||
|
||||
void tox_events_handle_group_message(
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, Tox_Message_Type type, const uint8_t *message, size_t length, uint32_t message_id,
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, Tox_Message_Type message_type, const uint8_t *message, size_t message_length, uint32_t message_id,
|
||||
void *user_data)
|
||||
{
|
||||
Tox_Event_Group_Message *group_message = tox_event_group_message_alloc(user_data);
|
||||
@ -265,7 +265,7 @@ void tox_events_handle_group_message(
|
||||
|
||||
tox_event_group_message_set_group_number(group_message, group_number);
|
||||
tox_event_group_message_set_peer_id(group_message, peer_id);
|
||||
tox_event_group_message_set_type(group_message, type);
|
||||
tox_event_group_message_set_message(group_message, message, length);
|
||||
tox_event_group_message_set_message_type(group_message, message_type);
|
||||
tox_event_group_message_set_message(group_message, message, message_length);
|
||||
tox_event_group_message_set_message_id(group_message, message_id);
|
||||
}
|
||||
|
@ -204,7 +204,7 @@ static Tox_Event_Group_Password *tox_event_group_password_alloc(void *user_data)
|
||||
*****************************************************/
|
||||
|
||||
void tox_events_handle_group_password(
|
||||
Tox *tox, uint32_t group_number, const uint8_t *password, size_t length,
|
||||
Tox *tox, uint32_t group_number, const uint8_t *password, size_t password_length,
|
||||
void *user_data)
|
||||
{
|
||||
Tox_Event_Group_Password *group_password = tox_event_group_password_alloc(user_data);
|
||||
@ -214,5 +214,5 @@ void tox_events_handle_group_password(
|
||||
}
|
||||
|
||||
tox_event_group_password_set_group_number(group_password, group_number);
|
||||
tox_event_group_password_set_password(group_password, password, length);
|
||||
tox_event_group_password_set_password(group_password, password, password_length);
|
||||
}
|
||||
|
@ -220,7 +220,7 @@ static Tox_Event_Group_Peer_Name *tox_event_group_peer_name_alloc(void *user_dat
|
||||
*****************************************************/
|
||||
|
||||
void tox_events_handle_group_peer_name(
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, const uint8_t *name, size_t length,
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, const uint8_t *name, size_t name_length,
|
||||
void *user_data)
|
||||
{
|
||||
Tox_Event_Group_Peer_Name *group_peer_name = tox_event_group_peer_name_alloc(user_data);
|
||||
@ -231,5 +231,5 @@ void tox_events_handle_group_peer_name(
|
||||
|
||||
tox_event_group_peer_name_set_group_number(group_peer_name, group_number);
|
||||
tox_event_group_peer_name_set_peer_id(group_peer_name, peer_id);
|
||||
tox_event_group_peer_name_set_name(group_peer_name, name, length);
|
||||
tox_event_group_peer_name_set_name(group_peer_name, name, name_length);
|
||||
}
|
||||
|
@ -27,7 +27,7 @@
|
||||
struct Tox_Event_Group_Private_Message {
|
||||
uint32_t group_number;
|
||||
uint32_t peer_id;
|
||||
Tox_Message_Type type;
|
||||
Tox_Message_Type message_type;
|
||||
uint8_t *message;
|
||||
uint32_t message_length;
|
||||
uint32_t message_id;
|
||||
@ -60,16 +60,16 @@ uint32_t tox_event_group_private_message_get_peer_id(const Tox_Event_Group_Priva
|
||||
}
|
||||
|
||||
non_null()
|
||||
static void tox_event_group_private_message_set_type(Tox_Event_Group_Private_Message *group_private_message,
|
||||
Tox_Message_Type type)
|
||||
static void tox_event_group_private_message_set_message_type(Tox_Event_Group_Private_Message *group_private_message,
|
||||
Tox_Message_Type message_type)
|
||||
{
|
||||
assert(group_private_message != nullptr);
|
||||
group_private_message->type = type;
|
||||
group_private_message->message_type = message_type;
|
||||
}
|
||||
Tox_Message_Type tox_event_group_private_message_get_type(const Tox_Event_Group_Private_Message *group_private_message)
|
||||
Tox_Message_Type tox_event_group_private_message_get_message_type(const Tox_Event_Group_Private_Message *group_private_message)
|
||||
{
|
||||
assert(group_private_message != nullptr);
|
||||
return group_private_message->type;
|
||||
return group_private_message->message_type;
|
||||
}
|
||||
|
||||
non_null(1) nullable(2)
|
||||
@ -143,7 +143,7 @@ bool tox_event_group_private_message_pack(
|
||||
return bin_pack_array(bp, 5)
|
||||
&& bin_pack_u32(bp, event->group_number)
|
||||
&& bin_pack_u32(bp, event->peer_id)
|
||||
&& tox_message_type_pack(event->type, bp)
|
||||
&& tox_message_type_pack(event->message_type, bp)
|
||||
&& bin_pack_bin(bp, event->message, event->message_length)
|
||||
&& bin_pack_u32(bp, event->message_id);
|
||||
}
|
||||
@ -159,7 +159,7 @@ static bool tox_event_group_private_message_unpack_into(
|
||||
|
||||
return bin_unpack_u32(bu, &event->group_number)
|
||||
&& bin_unpack_u32(bu, &event->peer_id)
|
||||
&& tox_message_type_unpack(&event->type, bu)
|
||||
&& tox_message_type_unpack(&event->message_type, bu)
|
||||
&& bin_unpack_bin(bu, &event->message, &event->message_length)
|
||||
&& bin_unpack_u32(bu, &event->message_id);
|
||||
}
|
||||
@ -254,7 +254,7 @@ static Tox_Event_Group_Private_Message *tox_event_group_private_message_alloc(vo
|
||||
*****************************************************/
|
||||
|
||||
void tox_events_handle_group_private_message(
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, Tox_Message_Type type, const uint8_t *message, size_t length, uint32_t message_id,
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, Tox_Message_Type message_type, const uint8_t *message, size_t message_length, uint32_t message_id,
|
||||
void *user_data)
|
||||
{
|
||||
Tox_Event_Group_Private_Message *group_private_message = tox_event_group_private_message_alloc(user_data);
|
||||
@ -265,7 +265,7 @@ void tox_events_handle_group_private_message(
|
||||
|
||||
tox_event_group_private_message_set_group_number(group_private_message, group_number);
|
||||
tox_event_group_private_message_set_peer_id(group_private_message, peer_id);
|
||||
tox_event_group_private_message_set_type(group_private_message, type);
|
||||
tox_event_group_private_message_set_message(group_private_message, message, length);
|
||||
tox_event_group_private_message_set_message_type(group_private_message, message_type);
|
||||
tox_event_group_private_message_set_message(group_private_message, message, message_length);
|
||||
tox_event_group_private_message_set_message_id(group_private_message, message_id);
|
||||
}
|
||||
|
@ -220,7 +220,7 @@ static Tox_Event_Group_Topic *tox_event_group_topic_alloc(void *user_data)
|
||||
*****************************************************/
|
||||
|
||||
void tox_events_handle_group_topic(
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, const uint8_t *topic, size_t length,
|
||||
Tox *tox, uint32_t group_number, uint32_t peer_id, const uint8_t *topic, size_t topic_length,
|
||||
void *user_data)
|
||||
{
|
||||
Tox_Event_Group_Topic *group_topic = tox_event_group_topic_alloc(user_data);
|
||||
@ -231,5 +231,5 @@ void tox_events_handle_group_topic(
|
||||
|
||||
tox_event_group_topic_set_group_number(group_topic, group_number);
|
||||
tox_event_group_topic_set_peer_id(group_topic, peer_id);
|
||||
tox_event_group_topic_set_topic(group_topic, topic, length);
|
||||
tox_event_group_topic_set_topic(group_topic, topic, topic_length);
|
||||
}
|
||||
|
18
external/toxcore/c-toxcore/toxcore/group_pack.c
vendored
18
external/toxcore/c-toxcore/toxcore/group_pack.c
vendored
@ -26,46 +26,46 @@
|
||||
#include "network.h"
|
||||
#include "util.h"
|
||||
|
||||
bool group_privacy_state_from_int(uint8_t value, Group_Privacy_State *out)
|
||||
bool group_privacy_state_from_int(uint8_t value, Group_Privacy_State *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case GI_PUBLIC: {
|
||||
*out = GI_PUBLIC;
|
||||
*out_enum = GI_PUBLIC;
|
||||
return true;
|
||||
}
|
||||
|
||||
case GI_PRIVATE: {
|
||||
*out = GI_PRIVATE;
|
||||
*out_enum = GI_PRIVATE;
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
*out = GI_PUBLIC;
|
||||
*out_enum = GI_PUBLIC;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool group_voice_state_from_int(uint8_t value, Group_Voice_State *out)
|
||||
bool group_voice_state_from_int(uint8_t value, Group_Voice_State *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case GV_ALL: {
|
||||
*out = GV_ALL;
|
||||
*out_enum = GV_ALL;
|
||||
return true;
|
||||
}
|
||||
|
||||
case GV_MODS: {
|
||||
*out = GV_MODS;
|
||||
*out_enum = GV_MODS;
|
||||
return true;
|
||||
}
|
||||
|
||||
case GV_FOUNDER: {
|
||||
*out = GV_FOUNDER;
|
||||
*out_enum = GV_FOUNDER;
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
*out = GV_ALL;
|
||||
*out_enum = GV_ALL;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -34,8 +34,8 @@ non_null()
|
||||
bool gc_load_unpack_group(GC_Chat *chat, Bin_Unpack *bu);
|
||||
|
||||
non_null()
|
||||
bool group_privacy_state_from_int(uint8_t value, Group_Privacy_State *out);
|
||||
bool group_privacy_state_from_int(uint8_t value, Group_Privacy_State *out_enum);
|
||||
non_null()
|
||||
bool group_voice_state_from_int(uint8_t value, Group_Voice_State *out);
|
||||
bool group_voice_state_from_int(uint8_t value, Group_Voice_State *out_enum);
|
||||
|
||||
#endif /* C_TOXCORE_TOXCORE_GROUP_PACK_H */
|
||||
|
8
external/toxcore/c-toxcore/toxcore/tox.c
vendored
8
external/toxcore/c-toxcore/toxcore/tox.c
vendored
@ -3932,7 +3932,7 @@ bool tox_group_get_password(const Tox *tox, uint32_t group_number, uint8_t *pass
|
||||
}
|
||||
|
||||
Tox_Group_Message_Id tox_group_send_message(
|
||||
const Tox *tox, uint32_t group_number, Tox_Message_Type type, const uint8_t *message,
|
||||
const Tox *tox, uint32_t group_number, Tox_Message_Type message_type, const uint8_t *message,
|
||||
size_t length, Tox_Err_Group_Send_Message *error)
|
||||
{
|
||||
assert(tox != nullptr);
|
||||
@ -3953,7 +3953,7 @@ Tox_Group_Message_Id tox_group_send_message(
|
||||
}
|
||||
|
||||
uint32_t message_id = 0;
|
||||
const int ret = gc_send_message(chat, message, length, type, &message_id);
|
||||
const int ret = gc_send_message(chat, message, length, message_type, &message_id);
|
||||
tox_unlock(tox);
|
||||
|
||||
switch (ret) {
|
||||
@ -3995,7 +3995,7 @@ Tox_Group_Message_Id tox_group_send_message(
|
||||
}
|
||||
|
||||
Tox_Group_Message_Id tox_group_send_private_message(const Tox *tox, uint32_t group_number, uint32_t peer_id,
|
||||
Tox_Message_Type type, const uint8_t *message, size_t length, Tox_Err_Group_Send_Private_Message *error)
|
||||
Tox_Message_Type message_type, const uint8_t *message, size_t length, Tox_Err_Group_Send_Private_Message *error)
|
||||
{
|
||||
assert(tox != nullptr);
|
||||
|
||||
@ -4015,7 +4015,7 @@ Tox_Group_Message_Id tox_group_send_private_message(const Tox *tox, uint32_t gro
|
||||
}
|
||||
|
||||
uint32_t message_id = 0;
|
||||
const int ret = gc_send_private_message(chat, gc_peer_id_from_int(peer_id), type, message, length, &message_id);
|
||||
const int ret = gc_send_private_message(chat, gc_peer_id_from_int(peer_id), message_type, message, length, &message_id);
|
||||
tox_unlock(tox);
|
||||
|
||||
switch (ret) {
|
||||
|
57
external/toxcore/c-toxcore/toxcore/tox.h
vendored
57
external/toxcore/c-toxcore/toxcore/tox.h
vendored
@ -4094,11 +4094,11 @@ bool tox_group_peer_get_public_key(
|
||||
* @param group_number The group number of the group the name change is intended for.
|
||||
* @param peer_id The ID of the peer who has changed their name.
|
||||
* @param name The name data.
|
||||
* @param length The length of the name.
|
||||
* @param name_length The length of the name.
|
||||
*/
|
||||
typedef void tox_group_peer_name_cb(
|
||||
Tox *tox, Tox_Group_Number group_number, Tox_Group_Peer_Number peer_id,
|
||||
const uint8_t name[], size_t length, void *user_data);
|
||||
const uint8_t name[], size_t name_length, void *user_data);
|
||||
|
||||
/**
|
||||
* Set the callback for the `group_peer_name` event. Pass NULL to unset.
|
||||
@ -4235,11 +4235,11 @@ bool tox_group_get_topic(
|
||||
* @param peer_id The ID of the peer who changed the topic. If the peer who set the topic
|
||||
* is not present in our peer list this value will be set to 0.
|
||||
* @param topic The topic data.
|
||||
* @param length The topic length.
|
||||
* @param topic_length The topic length.
|
||||
*/
|
||||
typedef void tox_group_topic_cb(
|
||||
Tox *tox, Tox_Group_Number group_number, Tox_Group_Peer_Number peer_id,
|
||||
const uint8_t topic[], size_t length,
|
||||
const uint8_t topic[], size_t topic_length,
|
||||
void *user_data);
|
||||
|
||||
/**
|
||||
@ -4416,11 +4416,11 @@ bool tox_group_get_password(
|
||||
/**
|
||||
* @param group_number The group number of the group for which the password has changed.
|
||||
* @param password The new group password.
|
||||
* @param length The length of the password.
|
||||
* @param password_length The length of the password.
|
||||
*/
|
||||
typedef void tox_group_password_cb(
|
||||
Tox *tox, Tox_Group_Number group_number,
|
||||
const uint8_t password[], size_t length,
|
||||
const uint8_t password[], size_t password_length,
|
||||
void *user_data);
|
||||
|
||||
/**
|
||||
@ -4493,7 +4493,7 @@ const char *tox_err_group_send_message_to_string(Tox_Err_Group_Send_Message valu
|
||||
* then reassemble the fragments. Messages may not be empty.
|
||||
*
|
||||
* @param group_number The group number of the group the message is intended for.
|
||||
* @param type Message type (normal, action, ...).
|
||||
* @param message_type Message type (normal, action, ...).
|
||||
* @param message A non-NULL pointer to the first element of a byte array
|
||||
* containing the message text.
|
||||
* @param length Length of the message to be sent.
|
||||
@ -4502,7 +4502,7 @@ const char *tox_err_group_send_message_to_string(Tox_Err_Group_Send_Message valu
|
||||
* returned message ID value will be undefined.
|
||||
*/
|
||||
Tox_Group_Message_Id tox_group_send_message(
|
||||
const Tox *tox, Tox_Group_Number group_number, Tox_Message_Type type,
|
||||
const Tox *tox, Tox_Group_Number group_number, Tox_Message_Type message_type,
|
||||
const uint8_t message[], size_t length,
|
||||
Tox_Err_Group_Send_Message *error);
|
||||
|
||||
@ -4533,6 +4533,11 @@ typedef enum Tox_Err_Group_Send_Private_Message {
|
||||
*/
|
||||
TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_EMPTY,
|
||||
|
||||
/**
|
||||
* The message type is invalid.
|
||||
*/
|
||||
TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_BAD_TYPE,
|
||||
|
||||
/**
|
||||
* The caller does not have the required permissions to send group messages.
|
||||
*/
|
||||
@ -4548,11 +4553,6 @@ typedef enum Tox_Err_Group_Send_Private_Message {
|
||||
*/
|
||||
TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_DISCONNECTED,
|
||||
|
||||
/**
|
||||
* The message type is invalid.
|
||||
*/
|
||||
TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_BAD_TYPE,
|
||||
|
||||
} Tox_Err_Group_Send_Private_Message;
|
||||
|
||||
const char *tox_err_group_send_private_message_to_string(Tox_Err_Group_Send_Private_Message value);
|
||||
@ -4569,6 +4569,7 @@ const char *tox_err_group_send_private_message_to_string(Tox_Err_Group_Send_Priv
|
||||
*
|
||||
* @param group_number The group number of the group the message is intended for.
|
||||
* @param peer_id The ID of the peer the message is intended for.
|
||||
* @param message_type The type of message (normal, action, ...).
|
||||
* @param message A non-NULL pointer to the first element of a byte array
|
||||
* containing the message text.
|
||||
* @param length Length of the message to be sent.
|
||||
@ -4576,7 +4577,7 @@ const char *tox_err_group_send_private_message_to_string(Tox_Err_Group_Send_Priv
|
||||
* @return true on success.
|
||||
*/
|
||||
Tox_Group_Message_Id tox_group_send_private_message(
|
||||
const Tox *tox, Tox_Group_Number group_number, Tox_Group_Peer_Number peer_id, Tox_Message_Type type,
|
||||
const Tox *tox, Tox_Group_Number group_number, Tox_Group_Peer_Number peer_id, Tox_Message_Type message_type,
|
||||
const uint8_t message[], size_t length,
|
||||
Tox_Err_Group_Send_Private_Message *error);
|
||||
|
||||
@ -4729,14 +4730,14 @@ bool tox_group_send_custom_private_packet(const Tox *tox, Tox_Group_Number group
|
||||
/**
|
||||
* @param group_number The group number of the group the message is intended for.
|
||||
* @param peer_id The ID of the peer who sent the message.
|
||||
* @param type The type of message (normal, action, ...).
|
||||
* @param message_type The type of message (normal, action, ...).
|
||||
* @param message The message data.
|
||||
* @param message_length The length of the message.
|
||||
* @param message_id A pseudo message id that clients can use to uniquely identify this group message.
|
||||
* @param length The length of the message.
|
||||
*/
|
||||
typedef void tox_group_message_cb(
|
||||
Tox *tox, Tox_Group_Number group_number, Tox_Group_Peer_Number peer_id, Tox_Message_Type type,
|
||||
const uint8_t message[], size_t length, Tox_Group_Message_Id message_id, void *user_data);
|
||||
Tox *tox, Tox_Group_Number group_number, Tox_Group_Peer_Number peer_id, Tox_Message_Type message_type,
|
||||
const uint8_t message[], size_t message_length, Tox_Group_Message_Id message_id, void *user_data);
|
||||
|
||||
/**
|
||||
* Set the callback for the `group_message` event. Pass NULL to unset.
|
||||
@ -4748,12 +4749,14 @@ void tox_callback_group_message(Tox *tox, tox_group_message_cb *callback);
|
||||
/**
|
||||
* @param group_number The group number of the group the private message is intended for.
|
||||
* @param peer_id The ID of the peer who sent the private message.
|
||||
* @param message_type The type of message (normal, action, ...).
|
||||
* @param message The message data.
|
||||
* @param length The length of the message.
|
||||
* @param message_length The length of the message.
|
||||
* @param message_id A pseudo message id that clients can use to uniquely identify this group message.
|
||||
*/
|
||||
typedef void tox_group_private_message_cb(
|
||||
Tox *tox, Tox_Group_Number group_number, Tox_Group_Peer_Number peer_id, Tox_Message_Type type,
|
||||
const uint8_t message[], size_t length, Tox_Group_Message_Id message_id, void *user_data);
|
||||
Tox *tox, Tox_Group_Number group_number, Tox_Group_Peer_Number peer_id, Tox_Message_Type message_type,
|
||||
const uint8_t message[], size_t message_length, Tox_Group_Message_Id message_id, void *user_data);
|
||||
|
||||
/**
|
||||
* Set the callback for the `group_private_message` event. Pass NULL to unset.
|
||||
@ -4766,11 +4769,11 @@ void tox_callback_group_private_message(Tox *tox, tox_group_private_message_cb *
|
||||
* @param group_number The group number of the group the packet is intended for.
|
||||
* @param peer_id The ID of the peer who sent the packet.
|
||||
* @param data The packet data.
|
||||
* @param length The length of the data.
|
||||
* @param data_length The length of the data.
|
||||
*/
|
||||
typedef void tox_group_custom_packet_cb(
|
||||
Tox *tox, Tox_Group_Number group_number, Tox_Group_Peer_Number peer_id,
|
||||
const uint8_t data[], size_t length, void *user_data);
|
||||
const uint8_t data[], size_t data_length, void *user_data);
|
||||
|
||||
/**
|
||||
* Set the callback for the `group_custom_packet` event. Pass NULL to unset.
|
||||
@ -4783,11 +4786,11 @@ void tox_callback_group_custom_packet(Tox *tox, tox_group_custom_packet_cb *call
|
||||
* @param group_number The group number of the group the packet is intended for.
|
||||
* @param peer_id The ID of the peer who sent the packet.
|
||||
* @param data The packet data.
|
||||
* @param length The length of the data.
|
||||
* @param data_length The length of the data.
|
||||
*/
|
||||
typedef void tox_group_custom_private_packet_cb(
|
||||
Tox *tox, Tox_Group_Number group_number, Tox_Group_Peer_Number peer_id,
|
||||
const uint8_t data[], size_t length, void *user_data);
|
||||
const uint8_t data[], size_t data_length, void *user_data);
|
||||
|
||||
/**
|
||||
* Set the callback for the `group_custom_private_packet` event. Pass NULL to unset.
|
||||
@ -4923,11 +4926,11 @@ Tox_Group_Number tox_group_invite_accept(
|
||||
/**
|
||||
* @param friend_number The friend number of the contact who sent the invite.
|
||||
* @param invite_data The invite data.
|
||||
* @param length The length of invite_data.
|
||||
* @param invite_data_length The length of invite_data.
|
||||
*/
|
||||
typedef void tox_group_invite_cb(
|
||||
Tox *tox, Tox_Friend_Number friend_number,
|
||||
const uint8_t invite_data[], size_t length,
|
||||
const uint8_t invite_data[], size_t invite_data_length,
|
||||
const uint8_t group_name[], size_t group_name_length,
|
||||
void *user_data);
|
||||
|
||||
|
6
external/toxcore/c-toxcore/toxcore/tox_api.c
vendored
6
external/toxcore/c-toxcore/toxcore/tox_api.c
vendored
@ -1340,6 +1340,9 @@ const char *tox_err_group_send_private_message_to_string(Tox_Err_Group_Send_Priv
|
||||
case TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_EMPTY:
|
||||
return "TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_EMPTY";
|
||||
|
||||
case TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_BAD_TYPE:
|
||||
return "TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_BAD_TYPE";
|
||||
|
||||
case TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_PERMISSIONS:
|
||||
return "TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_PERMISSIONS";
|
||||
|
||||
@ -1348,9 +1351,6 @@ const char *tox_err_group_send_private_message_to_string(Tox_Err_Group_Send_Priv
|
||||
|
||||
case TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_DISCONNECTED:
|
||||
return "TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_DISCONNECTED";
|
||||
|
||||
case TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_BAD_TYPE:
|
||||
return "TOX_ERR_GROUP_SEND_PRIVATE_MESSAGE_BAD_TYPE";
|
||||
}
|
||||
|
||||
return "<invalid Tox_Err_Group_Send_Private_Message>";
|
||||
|
86
external/toxcore/c-toxcore/toxcore/tox_event.c
vendored
86
external/toxcore/c-toxcore/toxcore/tox_event.c
vendored
@ -725,216 +725,216 @@ bool tox_event_pack(const Tox_Event *event, Bin_Pack *bp)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static bool tox_event_type_from_int(uint32_t value, Tox_Event_Type *out)
|
||||
static bool tox_event_type_from_int(uint32_t value, Tox_Event_Type *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_EVENT_SELF_CONNECTION_STATUS: {
|
||||
*out = TOX_EVENT_SELF_CONNECTION_STATUS;
|
||||
*out_enum = TOX_EVENT_SELF_CONNECTION_STATUS;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FRIEND_REQUEST: {
|
||||
*out = TOX_EVENT_FRIEND_REQUEST;
|
||||
*out_enum = TOX_EVENT_FRIEND_REQUEST;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FRIEND_CONNECTION_STATUS: {
|
||||
*out = TOX_EVENT_FRIEND_CONNECTION_STATUS;
|
||||
*out_enum = TOX_EVENT_FRIEND_CONNECTION_STATUS;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FRIEND_LOSSY_PACKET: {
|
||||
*out = TOX_EVENT_FRIEND_LOSSY_PACKET;
|
||||
*out_enum = TOX_EVENT_FRIEND_LOSSY_PACKET;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FRIEND_LOSSLESS_PACKET: {
|
||||
*out = TOX_EVENT_FRIEND_LOSSLESS_PACKET;
|
||||
*out_enum = TOX_EVENT_FRIEND_LOSSLESS_PACKET;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FRIEND_NAME: {
|
||||
*out = TOX_EVENT_FRIEND_NAME;
|
||||
*out_enum = TOX_EVENT_FRIEND_NAME;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FRIEND_STATUS: {
|
||||
*out = TOX_EVENT_FRIEND_STATUS;
|
||||
*out_enum = TOX_EVENT_FRIEND_STATUS;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FRIEND_STATUS_MESSAGE: {
|
||||
*out = TOX_EVENT_FRIEND_STATUS_MESSAGE;
|
||||
*out_enum = TOX_EVENT_FRIEND_STATUS_MESSAGE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FRIEND_MESSAGE: {
|
||||
*out = TOX_EVENT_FRIEND_MESSAGE;
|
||||
*out_enum = TOX_EVENT_FRIEND_MESSAGE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FRIEND_READ_RECEIPT: {
|
||||
*out = TOX_EVENT_FRIEND_READ_RECEIPT;
|
||||
*out_enum = TOX_EVENT_FRIEND_READ_RECEIPT;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FRIEND_TYPING: {
|
||||
*out = TOX_EVENT_FRIEND_TYPING;
|
||||
*out_enum = TOX_EVENT_FRIEND_TYPING;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FILE_CHUNK_REQUEST: {
|
||||
*out = TOX_EVENT_FILE_CHUNK_REQUEST;
|
||||
*out_enum = TOX_EVENT_FILE_CHUNK_REQUEST;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FILE_RECV: {
|
||||
*out = TOX_EVENT_FILE_RECV;
|
||||
*out_enum = TOX_EVENT_FILE_RECV;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FILE_RECV_CHUNK: {
|
||||
*out = TOX_EVENT_FILE_RECV_CHUNK;
|
||||
*out_enum = TOX_EVENT_FILE_RECV_CHUNK;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_FILE_RECV_CONTROL: {
|
||||
*out = TOX_EVENT_FILE_RECV_CONTROL;
|
||||
*out_enum = TOX_EVENT_FILE_RECV_CONTROL;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_CONFERENCE_INVITE: {
|
||||
*out = TOX_EVENT_CONFERENCE_INVITE;
|
||||
*out_enum = TOX_EVENT_CONFERENCE_INVITE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_CONFERENCE_CONNECTED: {
|
||||
*out = TOX_EVENT_CONFERENCE_CONNECTED;
|
||||
*out_enum = TOX_EVENT_CONFERENCE_CONNECTED;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_CONFERENCE_PEER_LIST_CHANGED: {
|
||||
*out = TOX_EVENT_CONFERENCE_PEER_LIST_CHANGED;
|
||||
*out_enum = TOX_EVENT_CONFERENCE_PEER_LIST_CHANGED;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_CONFERENCE_PEER_NAME: {
|
||||
*out = TOX_EVENT_CONFERENCE_PEER_NAME;
|
||||
*out_enum = TOX_EVENT_CONFERENCE_PEER_NAME;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_CONFERENCE_TITLE: {
|
||||
*out = TOX_EVENT_CONFERENCE_TITLE;
|
||||
*out_enum = TOX_EVENT_CONFERENCE_TITLE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_CONFERENCE_MESSAGE: {
|
||||
*out = TOX_EVENT_CONFERENCE_MESSAGE;
|
||||
*out_enum = TOX_EVENT_CONFERENCE_MESSAGE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_PEER_NAME: {
|
||||
*out = TOX_EVENT_GROUP_PEER_NAME;
|
||||
*out_enum = TOX_EVENT_GROUP_PEER_NAME;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_PEER_STATUS: {
|
||||
*out = TOX_EVENT_GROUP_PEER_STATUS;
|
||||
*out_enum = TOX_EVENT_GROUP_PEER_STATUS;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_TOPIC: {
|
||||
*out = TOX_EVENT_GROUP_TOPIC;
|
||||
*out_enum = TOX_EVENT_GROUP_TOPIC;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_PRIVACY_STATE: {
|
||||
*out = TOX_EVENT_GROUP_PRIVACY_STATE;
|
||||
*out_enum = TOX_EVENT_GROUP_PRIVACY_STATE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_VOICE_STATE: {
|
||||
*out = TOX_EVENT_GROUP_VOICE_STATE;
|
||||
*out_enum = TOX_EVENT_GROUP_VOICE_STATE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_TOPIC_LOCK: {
|
||||
*out = TOX_EVENT_GROUP_TOPIC_LOCK;
|
||||
*out_enum = TOX_EVENT_GROUP_TOPIC_LOCK;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_PEER_LIMIT: {
|
||||
*out = TOX_EVENT_GROUP_PEER_LIMIT;
|
||||
*out_enum = TOX_EVENT_GROUP_PEER_LIMIT;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_PASSWORD: {
|
||||
*out = TOX_EVENT_GROUP_PASSWORD;
|
||||
*out_enum = TOX_EVENT_GROUP_PASSWORD;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_MESSAGE: {
|
||||
*out = TOX_EVENT_GROUP_MESSAGE;
|
||||
*out_enum = TOX_EVENT_GROUP_MESSAGE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_PRIVATE_MESSAGE: {
|
||||
*out = TOX_EVENT_GROUP_PRIVATE_MESSAGE;
|
||||
*out_enum = TOX_EVENT_GROUP_PRIVATE_MESSAGE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_CUSTOM_PACKET: {
|
||||
*out = TOX_EVENT_GROUP_CUSTOM_PACKET;
|
||||
*out_enum = TOX_EVENT_GROUP_CUSTOM_PACKET;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_CUSTOM_PRIVATE_PACKET: {
|
||||
*out = TOX_EVENT_GROUP_CUSTOM_PRIVATE_PACKET;
|
||||
*out_enum = TOX_EVENT_GROUP_CUSTOM_PRIVATE_PACKET;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_INVITE: {
|
||||
*out = TOX_EVENT_GROUP_INVITE;
|
||||
*out_enum = TOX_EVENT_GROUP_INVITE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_PEER_JOIN: {
|
||||
*out = TOX_EVENT_GROUP_PEER_JOIN;
|
||||
*out_enum = TOX_EVENT_GROUP_PEER_JOIN;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_PEER_EXIT: {
|
||||
*out = TOX_EVENT_GROUP_PEER_EXIT;
|
||||
*out_enum = TOX_EVENT_GROUP_PEER_EXIT;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_SELF_JOIN: {
|
||||
*out = TOX_EVENT_GROUP_SELF_JOIN;
|
||||
*out_enum = TOX_EVENT_GROUP_SELF_JOIN;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_JOIN_FAIL: {
|
||||
*out = TOX_EVENT_GROUP_JOIN_FAIL;
|
||||
*out_enum = TOX_EVENT_GROUP_JOIN_FAIL;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_GROUP_MODERATION: {
|
||||
*out = TOX_EVENT_GROUP_MODERATION;
|
||||
*out_enum = TOX_EVENT_GROUP_MODERATION;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_DHT_GET_NODES_RESPONSE: {
|
||||
*out = TOX_EVENT_DHT_GET_NODES_RESPONSE;
|
||||
*out_enum = TOX_EVENT_DHT_GET_NODES_RESPONSE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_EVENT_INVALID: {
|
||||
*out = TOX_EVENT_INVALID;
|
||||
*out_enum = TOX_EVENT_INVALID;
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
*out = TOX_EVENT_INVALID;
|
||||
*out_enum = TOX_EVENT_INVALID;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -248,7 +248,7 @@ uint32_t tox_event_group_message_get_group_number(
|
||||
const Tox_Event_Group_Message *group_message);
|
||||
uint32_t tox_event_group_message_get_peer_id(
|
||||
const Tox_Event_Group_Message *group_message);
|
||||
Tox_Message_Type tox_event_group_message_get_type(
|
||||
Tox_Message_Type tox_event_group_message_get_message_type(
|
||||
const Tox_Event_Group_Message *group_message);
|
||||
const uint8_t *tox_event_group_message_get_message(
|
||||
const Tox_Event_Group_Message *group_message);
|
||||
@ -262,7 +262,7 @@ uint32_t tox_event_group_private_message_get_group_number(
|
||||
const Tox_Event_Group_Private_Message *group_private_message);
|
||||
uint32_t tox_event_group_private_message_get_peer_id(
|
||||
const Tox_Event_Group_Private_Message *group_private_message);
|
||||
Tox_Message_Type tox_event_group_private_message_get_type(
|
||||
Tox_Message_Type tox_event_group_private_message_get_message_type(
|
||||
const Tox_Event_Group_Private_Message *group_private_message);
|
||||
const uint8_t *tox_event_group_private_message_get_message(
|
||||
const Tox_Event_Group_Private_Message *group_private_message);
|
||||
|
110
external/toxcore/c-toxcore/toxcore/tox_unpack.c
vendored
110
external/toxcore/c-toxcore/toxcore/tox_unpack.c
vendored
@ -11,21 +11,21 @@
|
||||
#include "tox.h"
|
||||
|
||||
non_null()
|
||||
static bool tox_conference_type_from_int(uint32_t value, Tox_Conference_Type *out)
|
||||
static bool tox_conference_type_from_int(uint32_t value, Tox_Conference_Type *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_CONFERENCE_TYPE_TEXT: {
|
||||
*out = TOX_CONFERENCE_TYPE_TEXT;
|
||||
*out_enum = TOX_CONFERENCE_TYPE_TEXT;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_CONFERENCE_TYPE_AV: {
|
||||
*out = TOX_CONFERENCE_TYPE_AV;
|
||||
*out_enum = TOX_CONFERENCE_TYPE_AV;
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
*out = TOX_CONFERENCE_TYPE_TEXT;
|
||||
*out_enum = TOX_CONFERENCE_TYPE_TEXT;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -38,26 +38,26 @@ bool tox_conference_type_unpack(Tox_Conference_Type *val, Bin_Unpack *bu)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static bool tox_connection_from_int(uint32_t value, Tox_Connection *out)
|
||||
static bool tox_connection_from_int(uint32_t value, Tox_Connection *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_CONNECTION_NONE: {
|
||||
*out = TOX_CONNECTION_NONE;
|
||||
*out_enum = TOX_CONNECTION_NONE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_CONNECTION_TCP: {
|
||||
*out = TOX_CONNECTION_TCP;
|
||||
*out_enum = TOX_CONNECTION_TCP;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_CONNECTION_UDP: {
|
||||
*out = TOX_CONNECTION_UDP;
|
||||
*out_enum = TOX_CONNECTION_UDP;
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
*out = TOX_CONNECTION_NONE;
|
||||
*out_enum = TOX_CONNECTION_NONE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -71,26 +71,26 @@ bool tox_connection_unpack(Tox_Connection *val, Bin_Unpack *bu)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static bool tox_file_control_from_int(uint32_t value, Tox_File_Control *out)
|
||||
static bool tox_file_control_from_int(uint32_t value, Tox_File_Control *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_FILE_CONTROL_RESUME: {
|
||||
*out = TOX_FILE_CONTROL_RESUME;
|
||||
*out_enum = TOX_FILE_CONTROL_RESUME;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_FILE_CONTROL_PAUSE: {
|
||||
*out = TOX_FILE_CONTROL_PAUSE;
|
||||
*out_enum = TOX_FILE_CONTROL_PAUSE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_FILE_CONTROL_CANCEL: {
|
||||
*out = TOX_FILE_CONTROL_CANCEL;
|
||||
*out_enum = TOX_FILE_CONTROL_CANCEL;
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
*out = TOX_FILE_CONTROL_RESUME;
|
||||
*out_enum = TOX_FILE_CONTROL_RESUME;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -104,21 +104,21 @@ bool tox_file_control_unpack(Tox_File_Control *val, Bin_Unpack *bu)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static bool tox_message_type_from_int(uint32_t value, Tox_Message_Type *out)
|
||||
static bool tox_message_type_from_int(uint32_t value, Tox_Message_Type *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_MESSAGE_TYPE_NORMAL: {
|
||||
*out = TOX_MESSAGE_TYPE_NORMAL;
|
||||
*out_enum = TOX_MESSAGE_TYPE_NORMAL;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_MESSAGE_TYPE_ACTION: {
|
||||
*out = TOX_MESSAGE_TYPE_ACTION;
|
||||
*out_enum = TOX_MESSAGE_TYPE_ACTION;
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
*out = TOX_MESSAGE_TYPE_NORMAL;
|
||||
*out_enum = TOX_MESSAGE_TYPE_NORMAL;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -132,26 +132,26 @@ bool tox_message_type_unpack(Tox_Message_Type *val, Bin_Unpack *bu)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static bool tox_user_status_from_int(uint32_t value, Tox_User_Status *out)
|
||||
static bool tox_user_status_from_int(uint32_t value, Tox_User_Status *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_USER_STATUS_NONE: {
|
||||
*out = TOX_USER_STATUS_NONE;
|
||||
*out_enum = TOX_USER_STATUS_NONE;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_USER_STATUS_AWAY: {
|
||||
*out = TOX_USER_STATUS_AWAY;
|
||||
*out_enum = TOX_USER_STATUS_AWAY;
|
||||
return true;
|
||||
}
|
||||
|
||||
case TOX_USER_STATUS_BUSY: {
|
||||
*out = TOX_USER_STATUS_BUSY;
|
||||
*out_enum = TOX_USER_STATUS_BUSY;
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
*out = TOX_USER_STATUS_NONE;
|
||||
*out_enum = TOX_USER_STATUS_NONE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -165,19 +165,19 @@ bool tox_user_status_unpack(Tox_User_Status *val, Bin_Unpack *bu)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static bool tox_group_privacy_state_from_int(uint32_t value, Tox_Group_Privacy_State *out)
|
||||
static bool tox_group_privacy_state_from_int(uint32_t value, Tox_Group_Privacy_State *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_GROUP_PRIVACY_STATE_PUBLIC: {
|
||||
*out = TOX_GROUP_PRIVACY_STATE_PUBLIC;
|
||||
*out_enum = TOX_GROUP_PRIVACY_STATE_PUBLIC;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_PRIVACY_STATE_PRIVATE: {
|
||||
*out = TOX_GROUP_PRIVACY_STATE_PRIVATE;
|
||||
*out_enum = TOX_GROUP_PRIVACY_STATE_PRIVATE;
|
||||
return true;
|
||||
}
|
||||
default: {
|
||||
*out = TOX_GROUP_PRIVACY_STATE_PUBLIC;
|
||||
*out_enum = TOX_GROUP_PRIVACY_STATE_PUBLIC;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -189,23 +189,23 @@ bool tox_group_privacy_state_unpack(Tox_Group_Privacy_State *val, Bin_Unpack *bu
|
||||
&& tox_group_privacy_state_from_int(u32, val);
|
||||
}
|
||||
non_null()
|
||||
static bool tox_group_voice_state_from_int(uint32_t value, Tox_Group_Voice_State *out)
|
||||
static bool tox_group_voice_state_from_int(uint32_t value, Tox_Group_Voice_State *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_GROUP_VOICE_STATE_ALL: {
|
||||
*out = TOX_GROUP_VOICE_STATE_ALL;
|
||||
*out_enum = TOX_GROUP_VOICE_STATE_ALL;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_VOICE_STATE_MODERATOR: {
|
||||
*out = TOX_GROUP_VOICE_STATE_MODERATOR;
|
||||
*out_enum = TOX_GROUP_VOICE_STATE_MODERATOR;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_VOICE_STATE_FOUNDER: {
|
||||
*out = TOX_GROUP_VOICE_STATE_FOUNDER;
|
||||
*out_enum = TOX_GROUP_VOICE_STATE_FOUNDER;
|
||||
return true;
|
||||
}
|
||||
default: {
|
||||
*out = TOX_GROUP_VOICE_STATE_ALL;
|
||||
*out_enum = TOX_GROUP_VOICE_STATE_ALL;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -218,19 +218,19 @@ bool tox_group_voice_state_unpack(Tox_Group_Voice_State *val, Bin_Unpack *bu)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static bool tox_group_topic_lock_from_int(uint32_t value, Tox_Group_Topic_Lock *out)
|
||||
static bool tox_group_topic_lock_from_int(uint32_t value, Tox_Group_Topic_Lock *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_GROUP_TOPIC_LOCK_ENABLED: {
|
||||
*out = TOX_GROUP_TOPIC_LOCK_ENABLED;
|
||||
*out_enum = TOX_GROUP_TOPIC_LOCK_ENABLED;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_TOPIC_LOCK_DISABLED: {
|
||||
*out = TOX_GROUP_TOPIC_LOCK_DISABLED;
|
||||
*out_enum = TOX_GROUP_TOPIC_LOCK_DISABLED;
|
||||
return true;
|
||||
}
|
||||
default: {
|
||||
*out = TOX_GROUP_TOPIC_LOCK_ENABLED;
|
||||
*out_enum = TOX_GROUP_TOPIC_LOCK_ENABLED;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -243,23 +243,23 @@ bool tox_group_topic_lock_unpack(Tox_Group_Topic_Lock *val, Bin_Unpack *bu)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static bool tox_group_join_fail_from_int(uint32_t value, Tox_Group_Join_Fail *out)
|
||||
static bool tox_group_join_fail_from_int(uint32_t value, Tox_Group_Join_Fail *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_GROUP_JOIN_FAIL_PEER_LIMIT: {
|
||||
*out = TOX_GROUP_JOIN_FAIL_PEER_LIMIT;
|
||||
*out_enum = TOX_GROUP_JOIN_FAIL_PEER_LIMIT;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_JOIN_FAIL_INVALID_PASSWORD: {
|
||||
*out = TOX_GROUP_JOIN_FAIL_INVALID_PASSWORD;
|
||||
*out_enum = TOX_GROUP_JOIN_FAIL_INVALID_PASSWORD;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_JOIN_FAIL_UNKNOWN: {
|
||||
*out = TOX_GROUP_JOIN_FAIL_UNKNOWN;
|
||||
*out_enum = TOX_GROUP_JOIN_FAIL_UNKNOWN;
|
||||
return true;
|
||||
}
|
||||
default: {
|
||||
*out = TOX_GROUP_JOIN_FAIL_PEER_LIMIT;
|
||||
*out_enum = TOX_GROUP_JOIN_FAIL_PEER_LIMIT;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -272,27 +272,27 @@ bool tox_group_join_fail_unpack(Tox_Group_Join_Fail *val, Bin_Unpack *bu)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static bool tox_group_mod_event_from_int(uint32_t value, Tox_Group_Mod_Event *out)
|
||||
static bool tox_group_mod_event_from_int(uint32_t value, Tox_Group_Mod_Event *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_GROUP_MOD_EVENT_KICK: {
|
||||
*out = TOX_GROUP_MOD_EVENT_KICK;
|
||||
*out_enum = TOX_GROUP_MOD_EVENT_KICK;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_MOD_EVENT_OBSERVER: {
|
||||
*out = TOX_GROUP_MOD_EVENT_OBSERVER;
|
||||
*out_enum = TOX_GROUP_MOD_EVENT_OBSERVER;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_MOD_EVENT_USER: {
|
||||
*out = TOX_GROUP_MOD_EVENT_USER;
|
||||
*out_enum = TOX_GROUP_MOD_EVENT_USER;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_MOD_EVENT_MODERATOR: {
|
||||
*out = TOX_GROUP_MOD_EVENT_MODERATOR;
|
||||
*out_enum = TOX_GROUP_MOD_EVENT_MODERATOR;
|
||||
return true;
|
||||
}
|
||||
default: {
|
||||
*out = TOX_GROUP_MOD_EVENT_KICK;
|
||||
*out_enum = TOX_GROUP_MOD_EVENT_KICK;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -305,35 +305,35 @@ bool tox_group_mod_event_unpack(Tox_Group_Mod_Event *val, Bin_Unpack *bu)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static bool tox_group_exit_type_from_int(uint32_t value, Tox_Group_Exit_Type *out)
|
||||
static bool tox_group_exit_type_from_int(uint32_t value, Tox_Group_Exit_Type *out_enum)
|
||||
{
|
||||
switch (value) {
|
||||
case TOX_GROUP_EXIT_TYPE_QUIT: {
|
||||
*out = TOX_GROUP_EXIT_TYPE_QUIT;
|
||||
*out_enum = TOX_GROUP_EXIT_TYPE_QUIT;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_EXIT_TYPE_TIMEOUT: {
|
||||
*out = TOX_GROUP_EXIT_TYPE_TIMEOUT;
|
||||
*out_enum = TOX_GROUP_EXIT_TYPE_TIMEOUT;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_EXIT_TYPE_DISCONNECTED: {
|
||||
*out = TOX_GROUP_EXIT_TYPE_DISCONNECTED;
|
||||
*out_enum = TOX_GROUP_EXIT_TYPE_DISCONNECTED;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_EXIT_TYPE_SELF_DISCONNECTED: {
|
||||
*out = TOX_GROUP_EXIT_TYPE_SELF_DISCONNECTED;
|
||||
*out_enum = TOX_GROUP_EXIT_TYPE_SELF_DISCONNECTED;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_EXIT_TYPE_KICK: {
|
||||
*out = TOX_GROUP_EXIT_TYPE_KICK;
|
||||
*out_enum = TOX_GROUP_EXIT_TYPE_KICK;
|
||||
return true;
|
||||
}
|
||||
case TOX_GROUP_EXIT_TYPE_SYNC_ERROR: {
|
||||
*out = TOX_GROUP_EXIT_TYPE_SYNC_ERROR;
|
||||
*out_enum = TOX_GROUP_EXIT_TYPE_SYNC_ERROR;
|
||||
return true;
|
||||
}
|
||||
default: {
|
||||
*out = TOX_GROUP_EXIT_TYPE_QUIT;
|
||||
*out_enum = TOX_GROUP_EXIT_TYPE_QUIT;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
8
flake.lock
generated
8
flake.lock
generated
@ -20,16 +20,16 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1694553957,
|
||||
"narHash": "sha256-8o15HEax53lBJjjcr5VHMpuuT6vBcrzSNB6y2iGlPaU=",
|
||||
"lastModified": 1709953752,
|
||||
"narHash": "sha256-LW84B4vM1cn7E6cDNQn2LndT9iJXI1dRE5fwbNFbQa8=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e7fe745d22df5fa282b321e577fe18d4f62e0f0b",
|
||||
"rev": "fcaa81ed3c273237217330cf342ef1873b77c80a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "release-23.05",
|
||||
"ref": "release-23.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
# append '.?submodules=1' to the nix commands.
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/release-23.05";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/release-23.11";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
|
@ -35,6 +35,16 @@ namespace Components {
|
||||
float fade {1.f};
|
||||
};
|
||||
|
||||
struct ConvertedTimeCache {
|
||||
// calling localtime is expensive af
|
||||
int tm_year {0};
|
||||
int tm_yday {0};
|
||||
int tm_mon {0};
|
||||
int tm_mday {0};
|
||||
int tm_hour {0};
|
||||
int tm_min {0};
|
||||
};
|
||||
|
||||
} // Components
|
||||
|
||||
static constexpr float lerp(float a, float b, float t) {
|
||||
@ -324,7 +334,8 @@ float ChatGui4::render(float time_delta) {
|
||||
//tmp_view.use<Message::Components::Timestamp>();
|
||||
//tmp_view.each([&](const Message3 e, Message::Components::ContactFrom& c_from, Message::Components::ContactTo& c_to, Message::Components::Timestamp ts
|
||||
//) {
|
||||
uint64_t prev_ts {0};
|
||||
//uint64_t prev_ts {0};
|
||||
Components::ConvertedTimeCache prev_time {};
|
||||
auto tmp_view = msg_reg.view<Message::Components::Timestamp>();
|
||||
for (auto view_it = tmp_view.rbegin(), view_last = tmp_view.rend(); view_it != view_last; view_it++) {
|
||||
const Message3 e = *view_it;
|
||||
@ -342,15 +353,12 @@ float ChatGui4::render(float time_delta) {
|
||||
// TODO: why?
|
||||
ImGui::TableNextRow(0, TEXT_BASE_HEIGHT);
|
||||
|
||||
{ // check if date changed
|
||||
// TODO: find defined ways of casting to time_t
|
||||
std::time_t prev = prev_ts / 1000;
|
||||
std::time_t next = ts.ts / 1000;
|
||||
std::tm prev_tm = *std::localtime(&prev);
|
||||
std::tm next_tm = *std::localtime(&next);
|
||||
if (msg_reg.all_of<Components::ConvertedTimeCache>(e)) { // check if date changed
|
||||
// TODO: move conversion up?
|
||||
const auto& next_time = msg_reg.get<Components::ConvertedTimeCache>(e);
|
||||
if (
|
||||
prev_tm.tm_yday != next_tm.tm_yday ||
|
||||
prev_tm.tm_year != next_tm.tm_year // making sure
|
||||
prev_time.tm_yday != next_time.tm_yday ||
|
||||
prev_time.tm_year != next_time.tm_year // making sure
|
||||
) {
|
||||
// name
|
||||
if (ImGui::TableNextColumn()) {
|
||||
@ -359,14 +367,14 @@ float ChatGui4::render(float time_delta) {
|
||||
// msg
|
||||
if (ImGui::TableNextColumn()) {
|
||||
ImGui::TextDisabled("DATE CHANGED from %d.%d.%d to %d.%d.%d",
|
||||
1900+prev_tm.tm_year, 1+prev_tm.tm_mon, prev_tm.tm_mday,
|
||||
1900+next_tm.tm_year, 1+next_tm.tm_mon, next_tm.tm_mday
|
||||
1900+prev_time.tm_year, 1+prev_time.tm_mon, prev_time.tm_mday,
|
||||
1900+next_time.tm_year, 1+next_time.tm_mon, next_time.tm_mday
|
||||
);
|
||||
}
|
||||
ImGui::TableNextRow(0, TEXT_BASE_HEIGHT);
|
||||
}
|
||||
|
||||
prev_ts = ts.ts;
|
||||
prev_time = next_time;
|
||||
}
|
||||
|
||||
|
||||
@ -519,12 +527,24 @@ float ChatGui4::render(float time_delta) {
|
||||
|
||||
// ts
|
||||
if (ImGui::TableNextColumn()) {
|
||||
auto time = std::chrono::system_clock::to_time_t(
|
||||
std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds>{std::chrono::milliseconds{ts.ts}}
|
||||
);
|
||||
auto localtime = std::localtime(&time);
|
||||
if (!msg_reg.all_of<Components::ConvertedTimeCache>(e)) {
|
||||
auto time = std::chrono::system_clock::to_time_t(
|
||||
std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds>{std::chrono::milliseconds{ts.ts}}
|
||||
);
|
||||
auto localtime = std::localtime(&time);
|
||||
msg_reg.emplace<Components::ConvertedTimeCache>(
|
||||
e,
|
||||
localtime->tm_year,
|
||||
localtime->tm_yday,
|
||||
localtime->tm_mon,
|
||||
localtime->tm_mday,
|
||||
localtime->tm_hour,
|
||||
localtime->tm_min
|
||||
);
|
||||
}
|
||||
const auto& ctc = msg_reg.get<Components::ConvertedTimeCache>(e);
|
||||
|
||||
ImGui::Text("%.2d:%.2d", localtime->tm_hour, localtime->tm_min);
|
||||
ImGui::Text("%.2d:%.2d", ctc.tm_hour, ctc.tm_min);
|
||||
}
|
||||
|
||||
// extra
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "./image_loader_webp.hpp"
|
||||
|
||||
#include <memory>
|
||||
#include <webp/demux.h>
|
||||
#include <webp/mux.h>
|
||||
#include <webp/encode.h>
|
||||
@ -21,13 +22,16 @@ ImageLoaderWebP::ImageInfo ImageLoaderWebP::loadInfoFromMemory(const uint8_t* da
|
||||
// Tune 'dec_options' as needed.
|
||||
dec_options.color_mode = MODE_RGBA;
|
||||
|
||||
WebPAnimDecoder* dec = WebPAnimDecoderNew(&webp_data, &dec_options);
|
||||
if (dec == nullptr) {
|
||||
std::unique_ptr<WebPAnimDecoder, decltype(&WebPAnimDecoderDelete)> dec{
|
||||
WebPAnimDecoderNew(&webp_data, &dec_options),
|
||||
&WebPAnimDecoderDelete
|
||||
};
|
||||
if (!static_cast<bool>(dec)) {
|
||||
return res;
|
||||
}
|
||||
|
||||
WebPAnimInfo anim_info;
|
||||
WebPAnimDecoderGetInfo(dec, &anim_info);
|
||||
WebPAnimDecoderGetInfo(dec.get(), &anim_info);
|
||||
res.width = anim_info.canvas_width;
|
||||
res.height = anim_info.canvas_height;
|
||||
res.file_ext = "webp";
|
||||
@ -48,22 +52,25 @@ ImageLoaderWebP::ImageResult ImageLoaderWebP::loadFromMemoryRGBA(const uint8_t*
|
||||
// Tune 'dec_options' as needed.
|
||||
dec_options.color_mode = MODE_RGBA;
|
||||
|
||||
WebPAnimDecoder* dec = WebPAnimDecoderNew(&webp_data, &dec_options);
|
||||
if (dec == nullptr) {
|
||||
std::unique_ptr<WebPAnimDecoder, decltype(&WebPAnimDecoderDelete)> dec{
|
||||
WebPAnimDecoderNew(&webp_data, &dec_options),
|
||||
&WebPAnimDecoderDelete
|
||||
};
|
||||
if (!static_cast<bool>(dec)) {
|
||||
return res;
|
||||
}
|
||||
|
||||
WebPAnimInfo anim_info;
|
||||
WebPAnimDecoderGetInfo(dec, &anim_info);
|
||||
WebPAnimDecoderGetInfo(dec.get(), &anim_info);
|
||||
res.width = anim_info.canvas_width;
|
||||
res.height = anim_info.canvas_height;
|
||||
res.file_ext = "webp";
|
||||
|
||||
int prev_timestamp = 0;
|
||||
while (WebPAnimDecoderHasMoreFrames(dec)) {
|
||||
while (WebPAnimDecoderHasMoreFrames(dec.get())) {
|
||||
uint8_t* buf;
|
||||
int timestamp;
|
||||
WebPAnimDecoderGetNext(dec, &buf, ×tamp);
|
||||
WebPAnimDecoderGetNext(dec.get(), &buf, ×tamp);
|
||||
// ... (Render 'buf' based on 'timestamp').
|
||||
// ... (Do NOT free 'buf', as it is owned by 'dec').
|
||||
|
||||
@ -74,8 +81,6 @@ ImageLoaderWebP::ImageResult ImageLoaderWebP::loadFromMemoryRGBA(const uint8_t*
|
||||
new_frame.data.insert(new_frame.data.end(), buf, buf+(res.width*res.height*4));
|
||||
}
|
||||
|
||||
WebPAnimDecoderDelete(dec);
|
||||
|
||||
assert(anim_info.frame_count == res.frames.size());
|
||||
|
||||
return res;
|
||||
|
18
src/main.cpp
18
src/main.cpp
@ -10,7 +10,6 @@
|
||||
#include "./start_screen.hpp"
|
||||
|
||||
#include <memory>
|
||||
#include <future>
|
||||
#include <iostream>
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
@ -29,8 +28,6 @@ int main(int argc, char** argv) {
|
||||
std::cerr << "SDL_Init failed (" << SDL_GetError() << ")\n";
|
||||
return 1;
|
||||
}
|
||||
// me just messing with RAII cleanup
|
||||
auto sdl_scope = std::async(std::launch::deferred, &SDL_Quit);
|
||||
|
||||
// more RAII
|
||||
std::unique_ptr<SDL_Window, decltype(&SDL_DestroyWindow)> window {
|
||||
@ -86,9 +83,7 @@ int main(int argc, char** argv) {
|
||||
}
|
||||
|
||||
ImGui_ImplSDL3_InitForSDLRenderer(window.get(), renderer.get());
|
||||
auto imgui_sdl_scope = std::async(std::launch::deferred, &ImGui_ImplSDL3_Shutdown);
|
||||
ImGui_ImplSDLRenderer3_Init(renderer.get());
|
||||
auto imgui_sdlrenderer_scope = std::async(std::launch::deferred, &ImGui_ImplSDLRenderer3_Shutdown);
|
||||
|
||||
std::unique_ptr<Screen> screen = std::make_unique<StartScreen>(renderer.get());
|
||||
|
||||
@ -213,6 +208,19 @@ int main(int argc, char** argv) {
|
||||
#endif
|
||||
}
|
||||
|
||||
// TODO: use scope for the unique ptrs
|
||||
|
||||
screen.reset();
|
||||
|
||||
ImGui_ImplSDLRenderer3_Shutdown();
|
||||
ImGui_ImplSDL3_Shutdown();
|
||||
ImGui::DestroyContext();
|
||||
|
||||
renderer.reset();
|
||||
window.reset();
|
||||
|
||||
SDL_Quit();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -215,9 +215,24 @@ Screen* MainScreen::render(float time_delta, bool&) {
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
if (ImGui::BeginMenu("Settings")) {
|
||||
if (ImGui::MenuItem("ImGui Style Editor")) {
|
||||
ImGui::SeparatorText("ImGui");
|
||||
|
||||
if (ImGui::MenuItem("Style Editor")) {
|
||||
_show_tool_style_editor = true;
|
||||
}
|
||||
|
||||
if (ImGui::MenuItem("Metrics")) {
|
||||
_show_tool_metrics = true;
|
||||
}
|
||||
|
||||
if (ImGui::MenuItem("Debug Log")) {
|
||||
_show_tool_debug_log = true;
|
||||
}
|
||||
|
||||
if (ImGui::MenuItem("ID Stack Tool")) {
|
||||
_show_tool_id_stack = true;
|
||||
}
|
||||
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
ImGui::EndMenuBar();
|
||||
@ -234,6 +249,18 @@ Screen* MainScreen::render(float time_delta, bool&) {
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
if (_show_tool_metrics) {
|
||||
ImGui::ShowMetricsWindow(&_show_tool_metrics);
|
||||
}
|
||||
|
||||
if (_show_tool_debug_log) {
|
||||
ImGui::ShowDebugLogWindow(&_show_tool_debug_log);
|
||||
}
|
||||
|
||||
if (_show_tool_id_stack) {
|
||||
ImGui::ShowIDStackToolWindow(&_show_tool_id_stack);
|
||||
}
|
||||
|
||||
if constexpr (false) {
|
||||
ImGui::ShowDemoWindow();
|
||||
}
|
||||
@ -376,7 +403,7 @@ Screen* MainScreen::render(float time_delta, bool&) {
|
||||
}
|
||||
|
||||
Screen* MainScreen::tick(float time_delta, bool& quit) {
|
||||
quit = !tc.iterate(); // compute
|
||||
quit = !tc.iterate(time_delta); // compute
|
||||
|
||||
tcm.iterate(time_delta); // compute
|
||||
|
||||
|
@ -76,6 +76,9 @@ struct MainScreen final : public Screen {
|
||||
ToxDHTCapHisto tdch;
|
||||
|
||||
bool _show_tool_style_editor {false};
|
||||
bool _show_tool_metrics {false};
|
||||
bool _show_tool_debug_log {false};
|
||||
bool _show_tool_id_stack {false};
|
||||
|
||||
bool _window_hidden {false};
|
||||
uint64_t _window_hidden_ts {0};
|
||||
|
@ -1,13 +1,17 @@
|
||||
#include "./sdlrenderer_texture_uploader.hpp"
|
||||
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
SDLRendererTextureUploader::SDLRendererTextureUploader(SDL_Renderer* renderer_) :
|
||||
renderer(renderer_)
|
||||
{
|
||||
}
|
||||
|
||||
uint64_t SDLRendererTextureUploader::uploadRGBA(const uint8_t* data, uint32_t width, uint32_t height, Filter filter) {
|
||||
uint64_t SDLRendererTextureUploader::uploadRGBA(const uint8_t* data, uint32_t width, uint32_t height, Filter filter, Access access) {
|
||||
// TODO: test if pitch is 4 or 4*width
|
||||
SDL_Surface* surf = SDL_CreateSurfaceFrom(
|
||||
(void*)data,
|
||||
@ -17,8 +21,15 @@ uint64_t SDLRendererTextureUploader::uploadRGBA(const uint8_t* data, uint32_t wi
|
||||
);
|
||||
assert(surf); // TODO: add error reporting
|
||||
|
||||
SDL_Texture* tex = SDL_CreateTextureFromSurface(renderer, surf);
|
||||
SDL_Texture* tex = SDL_CreateTexture(
|
||||
renderer,
|
||||
surf->format->format,
|
||||
access == Access::STREAMING ? SDL_TEXTUREACCESS_STREAMING : SDL_TEXTUREACCESS_STATIC,
|
||||
surf->w, surf->h
|
||||
);
|
||||
assert(tex); // TODO: add error reporting
|
||||
// TODO: error reporting
|
||||
SDL_UpdateTexture(tex, nullptr, surf->pixels, surf->pitch);
|
||||
|
||||
if (filter == NEAREST) {
|
||||
SDL_SetTextureScaleMode(tex, SDL_SCALEMODE_NEAREST);
|
||||
@ -31,6 +42,27 @@ uint64_t SDLRendererTextureUploader::uploadRGBA(const uint8_t* data, uint32_t wi
|
||||
return reinterpret_cast<uint64_t>(tex);
|
||||
}
|
||||
|
||||
bool SDLRendererTextureUploader::updateRGBA(uint64_t tex_id, const uint8_t* data, size_t size) {
|
||||
auto* texture = static_cast<SDL_Texture*>(reinterpret_cast<void*>(tex_id));
|
||||
if (texture == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
uint8_t* pixels = nullptr;
|
||||
int pitch = 0;
|
||||
|
||||
if (SDL_LockTexture(texture, nullptr, (void**)&pixels, &pitch) != 0) {
|
||||
std::cerr << "SDLRTU error: failed locking texture '" << SDL_GetError() << "'\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
std::memcpy(pixels, data, size);
|
||||
|
||||
SDL_UnlockTexture(texture);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void SDLRendererTextureUploader::destroy(uint64_t tex_id) {
|
||||
SDL_DestroyTexture(static_cast<SDL_Texture*>(reinterpret_cast<void*>(tex_id)));
|
||||
}
|
||||
|
@ -10,7 +10,8 @@ struct SDLRendererTextureUploader : public TextureUploaderI {
|
||||
SDLRendererTextureUploader(SDL_Renderer* renderer_);
|
||||
~SDLRendererTextureUploader(void) = default;
|
||||
|
||||
uint64_t uploadRGBA(const uint8_t* data, uint32_t width, uint32_t height, Filter filter) override;
|
||||
uint64_t uploadRGBA(const uint8_t* data, uint32_t width, uint32_t height, Filter filter, Access access) override;
|
||||
bool updateRGBA(uint64_t tex_id, const uint8_t* data, size_t size) override;
|
||||
void destroy(uint64_t tex_id) override;
|
||||
};
|
||||
|
||||
|
@ -83,6 +83,7 @@ bool SendImagePopup::load(void) {
|
||||
}
|
||||
}
|
||||
|
||||
assert(preview_image.textures.empty());
|
||||
preview_image.timestamp_last_rendered = Message::getTimeMS();
|
||||
preview_image.current_texture = 0;
|
||||
for (const auto& [ms, data] : original_image.frames) {
|
||||
@ -173,7 +174,7 @@ void SendImagePopup::render(float time_delta) {
|
||||
|
||||
// TODO: add cancel shortcut (esc)
|
||||
if (ImGui::BeginPopupModal("send image##SendImagePopup", nullptr/*, ImGuiWindowFlags_NoDecoration*/)) {
|
||||
const auto TEXT_BASE_WIDTH = ImGui::CalcTextSize("A").x;
|
||||
//const auto TEXT_BASE_WIDTH = ImGui::CalcTextSize("A").x;
|
||||
const auto TEXT_BASE_HEIGHT = ImGui::GetTextLineHeightWithSpacing();
|
||||
|
||||
preview_image.doAnimation(Message::getTimeMS());
|
||||
|
@ -1,18 +1,29 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstddef>
|
||||
|
||||
struct TextureUploaderI {
|
||||
static constexpr const char* version {"1"};
|
||||
static constexpr const char* version {"2"};
|
||||
|
||||
enum Filter {
|
||||
NEAREST,
|
||||
LINEAR,
|
||||
};
|
||||
|
||||
enum Access {
|
||||
STATIC,
|
||||
STREAMING,
|
||||
// target?
|
||||
};
|
||||
|
||||
virtual ~TextureUploaderI(void) {}
|
||||
|
||||
virtual uint64_t uploadRGBA(const uint8_t* data, uint32_t width, uint32_t height, Filter filter = LINEAR) = 0;
|
||||
virtual uint64_t uploadRGBA(const uint8_t* data, uint32_t width, uint32_t height, Filter filter = LINEAR, Access access = STATIC) = 0;
|
||||
|
||||
// keeps width height filter
|
||||
// TODO: wh instead of size?
|
||||
virtual bool updateRGBA(uint64_t tex_id, const uint8_t* data, size_t size) = 0;
|
||||
|
||||
virtual void destroy(uint64_t tex_id) = 0;
|
||||
};
|
||||
|
@ -1,5 +1,4 @@
|
||||
#include "./tox_client.hpp"
|
||||
#include "toxcore/tox.h"
|
||||
|
||||
// meh, change this
|
||||
#include <exception>
|
||||
@ -121,10 +120,13 @@ ToxClient::ToxClient(std::string_view save_path, std::string_view save_password)
|
||||
}
|
||||
|
||||
ToxClient::~ToxClient(void) {
|
||||
if (_tox_profile_dirty) {
|
||||
saveToxProfile();
|
||||
}
|
||||
tox_kill(_tox);
|
||||
}
|
||||
|
||||
bool ToxClient::iterate(void) {
|
||||
bool ToxClient::iterate(float time_delta) {
|
||||
Tox_Err_Events_Iterate err_e_it = TOX_ERR_EVENTS_ITERATE_OK;
|
||||
auto* events = tox_events_iterate(_tox, false, &err_e_it);
|
||||
if (err_e_it == TOX_ERR_EVENTS_ITERATE_OK && events != nullptr) {
|
||||
@ -136,7 +138,8 @@ bool ToxClient::iterate(void) {
|
||||
|
||||
tox_events_free(events);
|
||||
|
||||
if (_tox_profile_dirty) {
|
||||
_save_heat -= time_delta;
|
||||
if (_tox_profile_dirty && _save_heat <= 0.f) {
|
||||
saveToxProfile();
|
||||
}
|
||||
|
||||
@ -180,5 +183,6 @@ void ToxClient::saveToxProfile(void) {
|
||||
}
|
||||
|
||||
_tox_profile_dirty = false;
|
||||
_save_heat = 10.f;
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,7 @@ class ToxClient : public ToxDefaultImpl, public ToxEventProviderBase {
|
||||
std::string _tox_profile_path;
|
||||
std::string _tox_profile_password;
|
||||
bool _tox_profile_dirty {true}; // set in callbacks
|
||||
float _save_heat {0.f};
|
||||
|
||||
public:
|
||||
//ToxClient(/*const CommandLine& cl*/);
|
||||
@ -34,7 +35,7 @@ class ToxClient : public ToxDefaultImpl, public ToxEventProviderBase {
|
||||
void setDirty(void) { _tox_profile_dirty = true; }
|
||||
|
||||
// returns false when we shoul stop the program
|
||||
bool iterate(void);
|
||||
bool iterate(float time_delta);
|
||||
void stop(void); // let it know it should exit
|
||||
|
||||
void setToxProfilePath(const std::string& new_path) { _tox_profile_path = new_path; }
|
||||
|
@ -16,4 +16,20 @@ struct ToxPrivateImpl : public ToxPrivateI {
|
||||
uint16_t toxDHTGetNumCloselistAnnounceCapable(void) override {
|
||||
return tox_dht_get_num_closelist_announce_capable(_tox);
|
||||
}
|
||||
|
||||
std::tuple<std::optional<std::string>, Tox_Err_Group_Peer_Query> toxGroupPeerGetIPAddress(uint32_t group_number, uint32_t peer_id) override {
|
||||
Tox_Err_Group_Peer_Query err = TOX_ERR_GROUP_PEER_QUERY_OK;
|
||||
size_t str_size = tox_group_peer_get_ip_address_size(_tox, group_number, peer_id, &err);
|
||||
if (err != TOX_ERR_GROUP_PEER_QUERY_OK) {
|
||||
return {std::nullopt, err};
|
||||
}
|
||||
std::string ip_str(str_size, '\0');
|
||||
|
||||
tox_group_peer_get_ip_address(_tox, group_number, peer_id, reinterpret_cast<uint8_t*>(ip_str.data()), &err);
|
||||
if (err == TOX_ERR_GROUP_PEER_QUERY_OK) {
|
||||
return {ip_str, err};
|
||||
} else {
|
||||
return {std::nullopt, err};
|
||||
}
|
||||
}
|
||||
};
|
||||
|
Reference in New Issue
Block a user