implement message sending to channels
This commit is contained in:
@@ -90,6 +90,12 @@ bool dc_api_create_channel(dc_api_t api, dc_account_t login,
|
||||
*/
|
||||
bool dc_api_get_messages(dc_api_t api, dc_account_t login, dc_channel_t c);
|
||||
|
||||
/**
|
||||
* post a message to the given channel
|
||||
*/
|
||||
bool dc_api_post_message(dc_api_t api, dc_account_t login,
|
||||
dc_channel_t c, dc_message_t m);
|
||||
|
||||
/**
|
||||
* Fetch a list of friends of the login account "login". The friends are stored
|
||||
* within the login object.
|
||||
|
||||
@@ -10,6 +10,7 @@ struct dc_message_;
|
||||
typedef struct dc_message_ *dc_message_t;
|
||||
|
||||
dc_message_t dc_message_new(void);
|
||||
dc_message_t dc_message_new_content(char const *s, int len);
|
||||
dc_message_t dc_message_from_json(json_t *j);
|
||||
json_t *dc_message_to_json(dc_message_t m);
|
||||
|
||||
|
||||
@@ -52,6 +52,12 @@ bool dc_session_has_token(dc_session_t s);
|
||||
*/
|
||||
dc_account_t dc_session_me(dc_session_t s);
|
||||
|
||||
/**
|
||||
* Return the API handle in use by the session. Do not unref the reference
|
||||
* and if you need it for something else, dc_ref() it yourself.
|
||||
*/
|
||||
dc_api_t dc_session_api(dc_session_t s);
|
||||
|
||||
/**
|
||||
* access to the internal account cache
|
||||
*/
|
||||
|
||||
@@ -2,6 +2,36 @@
|
||||
|
||||
#include "internal.h"
|
||||
|
||||
bool dc_api_post_message(dc_api_t api, dc_account_t login,
|
||||
dc_channel_t c, dc_message_t m)
|
||||
{
|
||||
bool ret = false;
|
||||
char *url = NULL;
|
||||
json_t *j = NULL, *reply = NULL;
|
||||
|
||||
return_if_true(api == NULL || login == NULL || m == NULL, false);
|
||||
return_if_true(dc_message_content(m) == NULL, false);
|
||||
|
||||
asprintf(&url, "channels/%s/messages", dc_channel_id(c));
|
||||
goto_if_true(url == NULL, cleanup);
|
||||
|
||||
j = dc_message_to_json(m);
|
||||
goto_if_true(j == NULL, cleanup);
|
||||
|
||||
reply = dc_api_call_sync(api, "POST", TOKEN(login), url, j);
|
||||
goto_if_true(reply != NULL, cleanup);
|
||||
|
||||
ret = true;
|
||||
|
||||
cleanup:
|
||||
|
||||
free(url);
|
||||
json_decref(j);
|
||||
json_decref(reply);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool dc_api_get_messages(dc_api_t api, dc_account_t login, dc_channel_t c)
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
@@ -40,6 +40,24 @@ dc_message_t dc_message_new(void)
|
||||
return dc_ref(m);
|
||||
}
|
||||
|
||||
dc_message_t dc_message_new_content(char const *s, int len)
|
||||
{
|
||||
dc_message_t m = dc_message_new();
|
||||
return_if_true(m == NULL, NULL);
|
||||
|
||||
if (len < 0) {
|
||||
len = strlen(s);
|
||||
}
|
||||
|
||||
m->content = strndup(s, len);
|
||||
if (m->content == NULL) {
|
||||
dc_unref(m);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
dc_message_t dc_message_from_json(json_t *j)
|
||||
{
|
||||
dc_message_t m = NULL;
|
||||
|
||||
@@ -227,6 +227,12 @@ bool dc_session_has_token(dc_session_t s)
|
||||
return dc_account_has_token(s->login);
|
||||
}
|
||||
|
||||
dc_api_t dc_session_api(dc_session_t s)
|
||||
{
|
||||
return_if_true(s == NULL, NULL);
|
||||
return s->api;
|
||||
}
|
||||
|
||||
dc_account_t dc_session_me(dc_session_t s)
|
||||
{
|
||||
return_if_true(s == NULL, NULL);
|
||||
|
||||
Reference in New Issue
Block a user