Compare commits
	
		
			9 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 719400068a | |||
| aaf8c6adc1 | |||
| dc081ae2aa | |||
| 3cf3097094 | |||
| e801626232 | |||
| a5093c4aa3 | |||
| c311bb5c95 | |||
| 887705969f | |||
| 316871523d | 
							
								
								
									
										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;
 | 
			
		||||
 
 | 
			
		||||
@@ -376,7 +376,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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,8 @@
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
#include <cstring>
 | 
			
		||||
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
SDLRendererTextureUploader::SDLRendererTextureUploader(SDL_Renderer* renderer_) :
 | 
			
		||||
	renderer(renderer_)
 | 
			
		||||
{
 | 
			
		||||
@@ -19,16 +21,15 @@ uint64_t SDLRendererTextureUploader::uploadRGBA(const uint8_t* data, uint32_t wi
 | 
			
		||||
	);
 | 
			
		||||
	assert(surf); // TODO: add error reporting
 | 
			
		||||
 | 
			
		||||
	// hacky hint usage
 | 
			
		||||
	if (access == Access::STREAMING) {
 | 
			
		||||
		SDL_SetHint("SDL_TextureAccess", "SDL_TEXTUREACCESS_STREAMING");
 | 
			
		||||
	} else {
 | 
			
		||||
		SDL_SetHint("SDL_TextureAccess", "SDL_TEXTUREACCESS_STATIC");
 | 
			
		||||
	}
 | 
			
		||||
	// TODO: cleanup hints after
 | 
			
		||||
 | 
			
		||||
	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);
 | 
			
		||||
@@ -51,7 +52,7 @@ bool SDLRendererTextureUploader::updateRGBA(uint64_t tex_id, const uint8_t* data
 | 
			
		||||
	int pitch = 0;
 | 
			
		||||
 | 
			
		||||
	if (SDL_LockTexture(texture, nullptr, (void**)&pixels, &pitch) != 0) {
 | 
			
		||||
		// TODO: error
 | 
			
		||||
		std::cerr << "SDLRTU error: failed locking texture '" << SDL_GetError() << "'\n";
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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,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