Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Librem5
lurch
Commits
e98b2199
Commit
e98b2199
authored
Dec 04, 2019
by
Richard Bayerle
Browse files
Add 'enable' for chats to API
parent
a1a3a0dc
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/lurch_api.c
View file @
e98b2199
...
...
@@ -185,6 +185,26 @@ void lurch_api_disable_im_handler(PurpleAccount * acc_p, const char * contact_ba
g_free
(
db_fn_omemo
);
}
void
lurch_api_enable_chat_handler
(
PurpleAccount
*
acc_p
,
const
char
*
full_conversation_name
,
void
(
*
cb
)(
int32_t
err
,
void
*
user_data_p
),
void
*
user_data_p
)
{
int32_t
ret_val
=
0
;
char
*
uname
=
(
void
*
)
0
;
char
*
db_fn_omemo
=
(
void
*
)
0
;
uname
=
lurch_util_uname_strip
(
purple_account_get_username
(
acc_p
));
db_fn_omemo
=
lurch_util_uname_get_db_fn
(
uname
,
LURCH_DB_NAME_OMEMO
);
ret_val
=
omemo_storage_chatlist_save
(
full_conversation_name
,
db_fn_omemo
);
if
(
ret_val
)
{
purple_debug_error
(
MODULE_NAME
,
"Failed to enable OMEMO for chat %s using DB %s.
\n
"
,
full_conversation_name
,
db_fn_omemo
);
}
cb
(
ret_val
,
user_data_p
);
g_free
(
uname
);
g_free
(
db_fn_omemo
);
}
void
lurch_api_fp_get_handler
(
PurpleAccount
*
acc_p
,
void
(
*
cb
)(
int32_t
err
,
const
char
*
fp_printable
,
void
*
user_data_p
),
void
*
user_data_p
)
{
int32_t
ret_val
=
0
;
char
*
uname
=
(
void
*
)
0
;
...
...
@@ -442,13 +462,14 @@ typedef enum {
* When adding a new signal: increase this number and add the name, handler function, and handler function type
* to the respective array.
*/
#define NUM_OF_SIGNALS
8
#define NUM_OF_SIGNALS
9
const
char
*
signal_names
[
NUM_OF_SIGNALS
]
=
{
"lurch-id-list"
,
"lurch-id-remove"
,
"lurch-enable-im"
,
"lurch-disable-im"
,
"lurch-enable-chat"
,
"lurch-fp-get"
,
"lurch-fp-list"
,
"lurch-fp-other"
,
...
...
@@ -460,6 +481,7 @@ const void * signal_handlers[NUM_OF_SIGNALS] = {
lurch_api_id_remove_handler
,
lurch_api_enable_im_handler
,
lurch_api_disable_im_handler
,
lurch_api_enable_chat_handler
,
lurch_api_fp_get_handler
,
lurch_api_fp_list_handler
,
lurch_api_fp_other_handler
,
...
...
@@ -471,6 +493,7 @@ const lurch_api_handler_t signal_handler_types[NUM_OF_SIGNALS] = {
LURCH_API_HANDLER_ACC_DID_CB_DATA
,
LURCH_API_HANDLER_ACC_JID_CB_DATA
,
LURCH_API_HANDLER_ACC_JID_CB_DATA
,
LURCH_API_HANDLER_ACC_JID_CB_DATA
,
LURCH_API_HANDLER_ACC_CB_DATA
,
LURCH_API_HANDLER_ACC_CB_DATA
,
LURCH_API_HANDLER_ACC_JID_CB_DATA
,
...
...
@@ -551,4 +574,4 @@ void lurch_api_unload() {
purple_signal_unregister
(
plugins_handle_p
,
signal_name
);
}
}
\ No newline at end of file
}
src/lurch_api.h
View file @
e98b2199
...
...
@@ -74,6 +74,13 @@ void lurch_api_enable_im_handler(PurpleAccount * acc_p, const char * contact_bar
*/
void
lurch_api_disable_im_handler
(
PurpleAccount
*
acc_p
,
const
char
*
contact_bare_jid
,
void
(
*
cb
)(
int32_t
err
,
void
*
user_data_p
),
void
*
user_data_p
);
/**
* SIGNAL: lurch-enable-chat
*
* Enables OMEMO for the specified chat. The conversation name can be obtained by simply calling purple_conversation_get_name().
*/
void
lurch_api_enable_chat_handler
(
PurpleAccount
*
acc_p
,
const
char
*
full_conversation_name
,
void
(
*
cb
)(
int32_t
err
,
void
*
user_data_p
),
void
*
user_data_p
);
/**
* SIGNAL: lurch-fp-get
*
...
...
@@ -103,4 +110,4 @@ void lurch_api_fp_other_handler(PurpleAccount * acc_p, const char * contact_bare
*
* Checks the OMEMO status for the given contact. Result is one of lurch_status_t.
*/
void
lurch_api_status_im_handler
(
PurpleAccount
*
acc_p
,
const
char
*
contact_bare_jid
,
void
(
*
cb
)(
int32_t
err
,
lurch_status_t
status
,
void
*
user_data_p
),
void
*
user_data_p
);
\ No newline at end of file
void
lurch_api_status_im_handler
(
PurpleAccount
*
acc_p
,
const
char
*
contact_bare_jid
,
void
(
*
cb
)(
int32_t
err
,
lurch_status_t
status
,
void
*
user_data_p
),
void
*
user_data_p
);
src/lurch_cmd_ui.c
View file @
e98b2199
...
...
@@ -193,14 +193,26 @@ static void lurch_cmd_id(PurpleConversation * conv_p, const char * arg, const ch
}
static
void
lurch_cmd_enable
(
PurpleConversation
*
conv_p
)
{
char
*
bare_jid
=
(
void
*
)
0
;
void
*
plugins_handle
=
purple_plugins_get_handle
();
PurpleConversationType
conv_type
=
purple_conversation_get_type
(
conv_p
);
char
*
conv_bare_jid
=
jabber_get_bare_jid
(
purple_conversation_get_name
(
conv_p
));
if
(
conv_type
==
PURPLE_CONV_TYPE_IM
)
{
purple_signal_emit
(
purple_plugins_get_handle
(),
"lurch-enable-im"
,
purple_conversation_get_account
(
conv_p
),
conv_bare_jid
,
lurch_enable_print
,
conv_p
);
PurpleAccount
*
acc_p
=
purple_conversation_get_account
(
conv_p
);
const
char
*
conv_name
=
purple_conversation_get_name
(
conv_p
);
switch
(
conv_type
)
{
case
PURPLE_CONV_TYPE_IM
:
bare_jid
=
jabber_get_bare_jid
(
conv_name
);
purple_signal_emit
(
plugins_handle
,
"lurch-enable-im"
,
acc_p
,
bare_jid
,
lurch_enable_print
,
conv_p
);
break
;
case
PURPLE_CONV_TYPE_CHAT
:
purple_signal_emit
(
plugins_handle
,
"lurch-enable-chat"
,
acc_p
,
conv_name
,
lurch_enable_print
,
conv_p
);
break
;
default:
lurch_cmd_print_err
(
conv_p
,
"Conversation type not supported."
);
break
;
}
g_free
(
conv_
bare_jid
);
g_free
(
bare_jid
);
}
static
void
lurch_cmd_disable
(
PurpleConversation
*
conv_p
)
{
...
...
@@ -267,4 +279,4 @@ PurpleCmdRet lurch_cmd_func_v2(PurpleConversation * conv_p,
}
return
PURPLE_CMD_RET_OK
;
}
\ No newline at end of file
}
test/test_lurch_api.c
View file @
e98b2199
...
...
@@ -289,7 +289,7 @@ static void test_lurch_api_id_remove_handler_id_not_in_list(void ** state) {
lurch_api_id_remove_handler
((
void
*
)
"ignored"
,
7331
,
lurch_api_id_remove_handler_cb_mock
,
test_user_data
);
}
static
void
lurch_api_enable_
im_
handler_cb_mock
(
int32_t
err
,
void
*
user_data_p
)
{
static
void
lurch_api_enable_handler_cb_mock
(
int32_t
err
,
void
*
user_data_p
)
{
check_expected
(
err
);
check_expected
(
user_data_p
);
}
...
...
@@ -308,10 +308,10 @@ static void test_lurch_api_enable_im_handler(void ** state) {
will_return
(
__wrap_omemo_storage_chatlist_delete
,
EXIT_SUCCESS
);
char
*
test_user_data
=
"TEST USER DATA"
;
expect_value
(
lurch_api_enable_
im_
handler_cb_mock
,
err
,
EXIT_SUCCESS
);
expect_value
(
lurch_api_enable_
im_
handler_cb_mock
,
user_data_p
,
test_user_data
);
expect_value
(
lurch_api_enable_handler_cb_mock
,
err
,
EXIT_SUCCESS
);
expect_value
(
lurch_api_enable_handler_cb_mock
,
user_data_p
,
test_user_data
);
lurch_api_enable_im_handler
((
void
*
)
"ignored"
,
contact_bare_jid
,
lurch_api_enable_
im_
handler_cb_mock
,
test_user_data
);
lurch_api_enable_im_handler
((
void
*
)
"ignored"
,
contact_bare_jid
,
lurch_api_enable_handler_cb_mock
,
test_user_data
);
}
/**
...
...
@@ -328,10 +328,50 @@ static void test_lurch_api_enable_im_handler_err(void ** state) {
will_return
(
__wrap_omemo_storage_chatlist_delete
,
EXIT_FAILURE
);
char
*
test_user_data
=
"TEST USER DATA"
;
expect_value
(
lurch_api_enable_
im_
handler_cb_mock
,
err
,
EXIT_FAILURE
);
expect_value
(
lurch_api_enable_
im_
handler_cb_mock
,
user_data_p
,
test_user_data
);
expect_value
(
lurch_api_enable_handler_cb_mock
,
err
,
EXIT_FAILURE
);
expect_value
(
lurch_api_enable_handler_cb_mock
,
user_data_p
,
test_user_data
);
lurch_api_enable_im_handler
((
void
*
)
"ignored"
,
contact_bare_jid
,
lurch_api_enable_im_handler_cb_mock
,
test_user_data
);
lurch_api_enable_im_handler
((
void
*
)
"ignored"
,
contact_bare_jid
,
lurch_api_enable_handler_cb_mock
,
test_user_data
);
}
/**
* Adds conversation name to 'the list' to enable OMEMO for it.
*/
static
void
test_lurch_api_enable_chat_handler
(
void
**
state
)
{
(
void
)
state
;
const
char
*
conv_name
=
"conversation name"
;
const
char
*
user_jid
=
"me-testing@test.org/resource"
;
will_return
(
__wrap_purple_account_get_username
,
user_jid
);
expect_string
(
__wrap_omemo_storage_chatlist_save
,
chat
,
conv_name
);
will_return
(
__wrap_omemo_storage_chatlist_save
,
EXIT_SUCCESS
);
char
*
test_user_data
=
"TEST USER DATA"
;
expect_value
(
lurch_api_enable_handler_cb_mock
,
err
,
EXIT_SUCCESS
);
expect_value
(
lurch_api_enable_handler_cb_mock
,
user_data_p
,
test_user_data
);
lurch_api_enable_chat_handler
((
void
*
)
"ignored"
,
conv_name
,
lurch_api_enable_handler_cb_mock
,
test_user_data
);
}
/**
* Calls the callback with the return value in case of an error.
*/
static
void
test_lurch_api_enable_chat_handler_err
(
void
**
state
)
{
(
void
)
state
;
const
char
*
conv_name
=
"conversation name"
;
const
char
*
user_jid
=
"me-testing@test.org/resource"
;
will_return
(
__wrap_purple_account_get_username
,
user_jid
);
expect_string
(
__wrap_omemo_storage_chatlist_save
,
chat
,
conv_name
);
will_return
(
__wrap_omemo_storage_chatlist_save
,
EXIT_FAILURE
);
char
*
test_user_data
=
"TEST USER DATA"
;
expect_value
(
lurch_api_enable_handler_cb_mock
,
err
,
EXIT_FAILURE
);
expect_value
(
lurch_api_enable_handler_cb_mock
,
user_data_p
,
test_user_data
);
lurch_api_enable_chat_handler
((
void
*
)
"ignored"
,
conv_name
,
lurch_api_enable_handler_cb_mock
,
test_user_data
);
}
static
void
lurch_api_disable_im_handler_cb_mock
(
int32_t
err
,
void
*
user_data_p
)
{
...
...
@@ -852,8 +892,8 @@ static void test_lurch_api_status_im_handler_err(void ** state) {
static
void
test_lurch_api_init
(
void
**
state
)
{
(
void
)
state
;
// currently, there are
8
signals
size_t
signals
=
8
;
// currently, there are
9
signals
size_t
signals
=
9
;
for
(
int
i
=
0
;
i
<
signals
;
i
++
)
{
expect_function_call
(
__wrap_purple_signal_register
);
...
...
@@ -869,7 +909,7 @@ static void test_lurch_api_init(void ** state) {
static
void
test_lurch_api_unload
(
void
**
state
)
{
(
void
)
state
;
size_t
signals
=
8
;
size_t
signals
=
9
;
for
(
int
i
=
0
;
i
<
signals
;
i
++
)
{
expect_function_call
(
__wrap_purple_signal_disconnect
);
...
...
@@ -887,6 +927,8 @@ int main(void) {
cmocka_unit_test
(
test_lurch_api_id_remove_handler_id_not_in_list
),
cmocka_unit_test
(
test_lurch_api_enable_im_handler
),
cmocka_unit_test
(
test_lurch_api_enable_im_handler_err
),
cmocka_unit_test
(
test_lurch_api_enable_chat_handler
),
cmocka_unit_test
(
test_lurch_api_enable_chat_handler_err
),
cmocka_unit_test
(
test_lurch_api_disable_im_handler
),
cmocka_unit_test
(
test_lurch_api_disable_im_handler_err
),
cmocka_unit_test
(
test_lurch_api_fp_get_handler
),
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment