first channel API
This commit is contained in:
parent
be4e5cedc3
commit
e2bdd05775
@ -18,6 +18,7 @@ SET(SOURCES
|
|||||||
"include/dc/util.h"
|
"include/dc/util.h"
|
||||||
"src/account.c"
|
"src/account.c"
|
||||||
"src/api.c"
|
"src/api.c"
|
||||||
|
"src/api-channel.c"
|
||||||
"src/api-friends.c"
|
"src/api-friends.c"
|
||||||
"src/apisync.c"
|
"src/apisync.c"
|
||||||
"src/channel.c"
|
"src/channel.c"
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include <dc/apisync.h>
|
#include <dc/apisync.h>
|
||||||
#include <dc/account.h>
|
#include <dc/account.h>
|
||||||
#include <dc/guild.h>
|
#include <dc/guild.h>
|
||||||
|
#include <dc/channel.h>
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
@ -59,6 +60,16 @@ bool dc_api_get_userinfo(dc_api_t api, dc_account_t login,
|
|||||||
bool dc_api_get_userguilds(dc_api_t api, dc_account_t login,
|
bool dc_api_get_userguilds(dc_api_t api, dc_account_t login,
|
||||||
GPtrArray **guilds);
|
GPtrArray **guilds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a 1:1 or 1:N DM channel with the given recipients. The recipients must
|
||||||
|
* have their ID (snowflake) set. Returns the new channel, complete with ID, and
|
||||||
|
* all in "channel". Note that the "login" user is automatically added to the DM
|
||||||
|
* session, so it is not needed to add him to recipients.
|
||||||
|
*/
|
||||||
|
bool dc_api_create_channel(dc_api_t api, dc_account_t login,
|
||||||
|
dc_account_t *recipients, size_t nrecp,
|
||||||
|
dc_channel_t *channel);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetch a list of friends of the login account "login". The friends are stored
|
* Fetch a list of friends of the login account "login". The friends are stored
|
||||||
* within the login object.
|
* within the login object.
|
||||||
|
53
libdc/src/api-channel.c
Normal file
53
libdc/src/api-channel.c
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#include <dc/api.h>
|
||||||
|
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
|
bool dc_api_create_channel(dc_api_t api, dc_account_t login,
|
||||||
|
dc_account_t *recipients, size_t nrecp,
|
||||||
|
dc_channel_t *channel)
|
||||||
|
{
|
||||||
|
bool ret = false;
|
||||||
|
json_t *data = NULL, *array = NULL, *reply = NULL;
|
||||||
|
char *url = NULL;
|
||||||
|
dc_channel_t c = NULL;
|
||||||
|
size_t i = 0;
|
||||||
|
|
||||||
|
return_if_true(api == NULL || login == NULL || channel == NULL, false);
|
||||||
|
|
||||||
|
asprintf(&url, "users/%s/channels", dc_account_id(login));
|
||||||
|
goto_if_true(url == NULL, cleanup);
|
||||||
|
|
||||||
|
/* build a JSON object that contains one array called "recipients":
|
||||||
|
* {"recipients": ["snowflake#1", "snowflake#N"]}
|
||||||
|
*/
|
||||||
|
data = json_object();
|
||||||
|
array = json_array();
|
||||||
|
goto_if_true(data == NULL || array == NULL, cleanup);
|
||||||
|
|
||||||
|
for (i = 0; i < nrecp; i++) {
|
||||||
|
dc_account_t r = recipients[0];
|
||||||
|
if (dc_account_id(r) == NULL) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
json_array_append_new(array, json_string(dc_account_id(r)));
|
||||||
|
}
|
||||||
|
|
||||||
|
goto_if_true(json_array_size(array) == 0, cleanup);
|
||||||
|
json_object_set_new(data, "recipients", array);
|
||||||
|
|
||||||
|
reply = dc_api_call_sync(api, "POST", dc_account_token(login), url, data);
|
||||||
|
goto_if_true(reply == NULL, cleanup);
|
||||||
|
|
||||||
|
c = dc_channel_from_json(reply);
|
||||||
|
goto_if_true(c == NULL, cleanup);
|
||||||
|
|
||||||
|
*channel = c;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
|
||||||
|
free(url);
|
||||||
|
json_decref(reply);
|
||||||
|
json_decref(data);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user