diff --git a/include/mastodont_chats.h b/include/mastodont_chats.h new file mode 100644 index 0000000..2e5d4da --- /dev/null +++ b/include/mastodont_chats.h @@ -0,0 +1,45 @@ +/* + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#ifndef MASTODONT_CHATS_H +#define MASTODONT_CHATS_H +#include "mastodont_types.h" +#include "mastodont_account.h" + +struct mstdnt_chat +{ + struct mstdnt_account account; + const char* id; + int unread; +}; + +struct mstdnt_chats_args +{ + mstdnt_bool with_muted; + const char* max_id; + const char* min_id; + const char* since_id; + int offset; + int limit; +}; + +int mastodont_get_chats_v2(mastodont_t* data, + struct mstdnt_args* m_args, + struct mstdnt_chats_args* args, + struct mstdnt_storage* storage, + struct mstdnt_chat* chats[], + size_t* chats_len); + +#endif // MASTODONT_CHATS_H diff --git a/src/chats.c b/src/chats.c new file mode 100644 index 0000000..d9b0f12 --- /dev/null +++ b/src/chats.c @@ -0,0 +1,60 @@ +/* + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include +#include +#include + +struct _mstdnt_chats_cb_args +{ + struct mstdnt_chat** chats; + size_t* chats_len; +}; + +int mastodont_get_chats_v2(mastodont_t* data, + struct mstdnt_args* m_args, + struct mstdnt_chats_args* args, + struct mstdnt_storage* storage, + struct mstdnt_chat* chats[], + size_t* size) +{ + struct _mstdnt_chats_cb_args cb_args = { chats, size }; + struct _mstdnt_query_param params[] = { + { _MSTDNT_QUERY_BOOL, "with_muted", { .b = args->with_muted } }, + { _MSTDNT_QUERY_STRING, "max_id", { .s = args->max_id } }, + { _MSTDNT_QUERY_STRING, "min_id", { .s = args->min_id } }, + { _MSTDNT_QUERY_STRING, "since_id", { .s = args->since_id } }, + { _MSTDNT_QUERY_INT, "limit", { .i = args->limit } }, + { _MSTDNT_QUERY_INT, "offset", { .i = args->offset } }, + }; + + struct mastodont_request_args req_args = { + .storage = storage, + .url = "api/v2/pleroma/chats", + .params_query = params, + .params_query_len = _mstdnt_arg_len(params), + .params_post = NULL, + .params_post_len = 0, + .request_type = CURLOPT_HTTPGET, + .request_type_custom = NULL, + .args = cb_args, + .callback = mstdnt_chats_json_callback, + }; + + return mastodont_request(data, m_args, &req_args); +}