добавлена документация
This commit is contained in:
parent
7efbd654b7
commit
5bc1c8de68
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
/.idea/
|
/.idea/
|
||||||
/cmake-build-debug/
|
/cmake-build-debug/
|
||||||
|
/doc/
|
@ -16,7 +16,6 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef YADISK_YADISK_H
|
#ifndef YADISK_YADISK_H
|
||||||
#define YADISK_YADISK_H
|
#define YADISK_YADISK_H
|
||||||
|
|
||||||
|
@ -114,6 +114,7 @@ int api_http_request(
|
|||||||
} else {
|
} else {
|
||||||
snprintf(url, sizeof(url), "%s%s", YANDEX_DISK_API_HOST, path);
|
snprintf(url, sizeof(url), "%s%s", YANDEX_DISK_API_HOST, path);
|
||||||
}
|
}
|
||||||
|
printf("%s\n", url);
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cb);
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, cb);
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&chunk);
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&chunk);
|
||||||
|
@ -43,10 +43,11 @@ int api_http_request(yadisk_api_client* client,
|
|||||||
|
|
||||||
#define __DANGER_GET_JSON_OBJECT(root, key) \
|
#define __DANGER_GET_JSON_OBJECT(root, key) \
|
||||||
json_object* obj = NULL; \
|
json_object* obj = NULL; \
|
||||||
if (!json_object_object_get_ex(root, key, &obj)){\
|
if (!json_object_object_get_ex(root, key, &obj)){ \
|
||||||
json_object_put(root); \
|
}
|
||||||
THROW_PARSE_JSON_ERROR \
|
|
||||||
} \
|
// json_object_put(root);
|
||||||
|
// THROW_PARSE_JSON_ERROR
|
||||||
|
|
||||||
#define GET_JSON_STRING(root, key, v) { \
|
#define GET_JSON_STRING(root, key, v) { \
|
||||||
__DANGER_GET_JSON_OBJECT(root, key) \
|
__DANGER_GET_JSON_OBJECT(root, key) \
|
||||||
|
@ -22,10 +22,23 @@
|
|||||||
#include "yadisk_get_disk.h"
|
#include "yadisk_get_disk.h"
|
||||||
#include "yadisk_api_internal.h"
|
#include "yadisk_api_internal.h"
|
||||||
|
|
||||||
yadisk_code yadisk_get_disk(yadisk_api_client* client, yadisk_disk_info* info)
|
yadisk_code yadisk_get_disk(yadisk_api_client* client, yadisk_get_disk_params* params, yadisk_disk_info* info)
|
||||||
{
|
{
|
||||||
|
query_param* qparams = NULL;
|
||||||
|
int num_params = 0;
|
||||||
|
const int max_params = 1;
|
||||||
|
|
||||||
|
if (params != NULL) {
|
||||||
|
qparams = malloc(max_params * sizeof(query_param));
|
||||||
|
if (params->fields != NULL) {
|
||||||
|
qparams[num_params].key = "fields";
|
||||||
|
qparams[num_params].value = strdup(params->fields);
|
||||||
|
num_params++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
char* output = NULL;
|
char* output = NULL;
|
||||||
int error = api_http_request(client, "GET", "/v1/disk", NULL, 0, &output);
|
int error = api_http_request(client, "GET", "/v1/disk", qparams, num_params, &output);
|
||||||
if (error) {
|
if (error) {
|
||||||
return YADISK_FAILED_HTTP_REQUEST;
|
return YADISK_FAILED_HTTP_REQUEST;
|
||||||
}
|
}
|
||||||
@ -40,20 +53,25 @@ yadisk_code yadisk_get_disk(yadisk_api_client* client, yadisk_disk_info* info)
|
|||||||
GET_JSON_BOOL(root, "is_paid", &(info->is_paid));
|
GET_JSON_BOOL(root, "is_paid", &(info->is_paid));
|
||||||
|
|
||||||
json_object *user_object;
|
json_object *user_object;
|
||||||
if (!json_object_object_get_ex(root, "user", &user_object))
|
if (!json_object_object_get_ex(root, "user", &user_object)) {
|
||||||
THROW_PARSE_JSON_ERROR
|
// THROW_PARSE_JSON_ERROR
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user_object) {
|
||||||
GET_JSON_STRING(user_object, "reg_time", &(info->user.reg_time));
|
GET_JSON_STRING(user_object, "reg_time", &(info->user.reg_time));
|
||||||
GET_JSON_STRING(user_object, "display_name", &(info->user.display_name));
|
GET_JSON_STRING(user_object, "display_name", &(info->user.display_name));
|
||||||
GET_JSON_STRING(user_object, "uid", &(info->user.uid));
|
GET_JSON_STRING(user_object, "uid", &(info->user.uid));
|
||||||
GET_JSON_STRING(user_object, "country", &(info->user.country));
|
GET_JSON_STRING(user_object, "country", &(info->user.country));
|
||||||
GET_JSON_BOOL(user_object, "is_child", &(info->user.is_child));
|
GET_JSON_BOOL(user_object, "is_child", &(info->user.is_child));
|
||||||
GET_JSON_STRING(user_object, "login", &(info->user.login));
|
GET_JSON_STRING(user_object, "login", &(info->user.login));
|
||||||
|
}
|
||||||
|
|
||||||
json_object *system_folders;
|
json_object *system_folders;
|
||||||
if (!json_object_object_get_ex(root, "system_folders", &system_folders))
|
if (!json_object_object_get_ex(root, "system_folders", &system_folders)) {
|
||||||
THROW_PARSE_JSON_ERROR
|
// THROW_PARSE_JSON_ERROR
|
||||||
|
}
|
||||||
|
|
||||||
|
if (system_folders) {
|
||||||
GET_JSON_STRING(system_folders, "odnoklassniki", &(info->system_folders.odnoklassniki));
|
GET_JSON_STRING(system_folders, "odnoklassniki", &(info->system_folders.odnoklassniki));
|
||||||
GET_JSON_STRING(system_folders, "google", &(info->system_folders.google));
|
GET_JSON_STRING(system_folders, "google", &(info->system_folders.google));
|
||||||
GET_JSON_STRING(system_folders, "instagram", &(info->system_folders.instagram));
|
GET_JSON_STRING(system_folders, "instagram", &(info->system_folders.instagram));
|
||||||
@ -69,6 +87,7 @@ yadisk_code yadisk_get_disk(yadisk_api_client* client, yadisk_disk_info* info)
|
|||||||
GET_JSON_STRING(system_folders, "photostream", &(info->system_folders.photostream));
|
GET_JSON_STRING(system_folders, "photostream", &(info->system_folders.photostream));
|
||||||
GET_JSON_STRING(system_folders, "screenshots", &(info->system_folders.screenshots));
|
GET_JSON_STRING(system_folders, "screenshots", &(info->system_folders.screenshots));
|
||||||
GET_JSON_STRING(system_folders, "scans", &(info->system_folders.scans));
|
GET_JSON_STRING(system_folders, "scans", &(info->system_folders.scans));
|
||||||
|
}
|
||||||
|
|
||||||
GET_JSON_BOOL(root, "unlimited_autoupload_enabled", &(info->unlimited_autoupload_enabled));
|
GET_JSON_BOOL(root, "unlimited_autoupload_enabled", &(info->unlimited_autoupload_enabled));
|
||||||
GET_JSON_UINT64(root, "revision", &(info->revision));
|
GET_JSON_UINT64(root, "revision", &(info->revision));
|
||||||
|
@ -18,12 +18,19 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*/
|
||||||
#ifndef YADISK_YADISK_GET_DISK_H
|
#ifndef YADISK_YADISK_GET_DISK_H
|
||||||
#define YADISK_YADISK_GET_DISK_H
|
#define YADISK_YADISK_GET_DISK_H
|
||||||
|
|
||||||
#include "yadisk_shared.h"
|
#include "yadisk_shared.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en User info
|
||||||
|
* @ru Информация о пользователе
|
||||||
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char* reg_time;
|
const char* reg_time;
|
||||||
const char* display_name;
|
const char* display_name;
|
||||||
@ -33,6 +40,11 @@ typedef struct {
|
|||||||
const char* login;
|
const char* login;
|
||||||
} yadisk_user_info;
|
} yadisk_user_info;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en System folders paths
|
||||||
|
* @ru Пути системных папок
|
||||||
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char* odnoklassniki;
|
const char* odnoklassniki;
|
||||||
const char* google;
|
const char* google;
|
||||||
@ -51,18 +63,90 @@ typedef struct {
|
|||||||
const char* scans;
|
const char* scans;
|
||||||
} yadisk_system_folders;
|
} yadisk_system_folders;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en Information about the disk
|
||||||
|
* @ru Информация о диске
|
||||||
|
*/
|
||||||
typedef struct yadisk_disk_info {
|
typedef struct yadisk_disk_info {
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en Total space
|
||||||
|
* @ru Общий объем
|
||||||
|
*/
|
||||||
unsigned long total_space;
|
unsigned long total_space;
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en Trash size
|
||||||
|
* @ru Объем корзины
|
||||||
|
*/
|
||||||
unsigned long trash_size;
|
unsigned long trash_size;
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en Used space
|
||||||
|
* @ru Использованный объем
|
||||||
|
*/
|
||||||
unsigned long used_space;
|
unsigned long used_space;
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en Is paid tariff
|
||||||
|
* @ru Платный ли тариф
|
||||||
|
*/
|
||||||
int is_paid;
|
int is_paid;
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en Registration date
|
||||||
|
* @ru Дата регистрации
|
||||||
|
*/
|
||||||
const char* reg_time;
|
const char* reg_time;
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en System folders paths
|
||||||
|
* @ru Пути системных папок
|
||||||
|
*/
|
||||||
yadisk_system_folders system_folders;
|
yadisk_system_folders system_folders;
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en Info about user
|
||||||
|
* @ru Информация о пользователе
|
||||||
|
*/
|
||||||
yadisk_user_info user;
|
yadisk_user_info user;
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en Unlimited autoupload
|
||||||
|
* @ru Безлимитная автозагрузка
|
||||||
|
*/
|
||||||
int unlimited_autoupload_enabled;
|
int unlimited_autoupload_enabled;
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @en Revision
|
||||||
|
* @ru Ревизия
|
||||||
|
*/
|
||||||
unsigned long revision;
|
unsigned long revision;
|
||||||
} yadisk_disk_info;
|
} yadisk_disk_info;
|
||||||
|
|
||||||
yadisk_code yadisk_get_disk(yadisk_api_client* client, yadisk_disk_info* info);
|
typedef struct {
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @ru Список возвращаемых атрибутов.
|
||||||
|
*/
|
||||||
|
const char* fields;
|
||||||
|
} yadisk_get_disk_params;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @ru Функция для получения метаинформации о диске пользователя.
|
||||||
|
*
|
||||||
|
* Реализует метод `GET /v1/disk`
|
||||||
|
* @param client
|
||||||
|
* @ru Клиент Яндекс.Диска
|
||||||
|
* @param params
|
||||||
|
* @ru Параметры запроса
|
||||||
|
* @param info
|
||||||
|
* @ru Информация о диске. Результат выполнения операции
|
||||||
|
* @return
|
||||||
|
* @ru Код возврата (YADISK_OK в случае успеха).
|
||||||
|
*/
|
||||||
|
yadisk_code yadisk_get_disk(yadisk_api_client* client, yadisk_get_disk_params* params, yadisk_disk_info* info);
|
||||||
|
|
||||||
#endif //YADISK_YADISK_GET_DISK_H
|
#endif //YADISK_YADISK_GET_DISK_H
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
yadisk_code
|
yadisk_code
|
||||||
yadisk_get_disk_resources(
|
yadisk_get_disk_resources(
|
||||||
yadisk_api_client* client, const char* path, yadisk_resource_info* info
|
yadisk_api_client* client, yadisk_get_disk_resources_params* path, yadisk_resource_info* info
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
char* output = NULL;
|
char* output = NULL;
|
||||||
|
@ -65,6 +65,7 @@ struct yadisk_resource_item {
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
/** Массив элементов */
|
||||||
struct yadisk_resource_item* items; // Массив элементов
|
struct yadisk_resource_item* items; // Массив элементов
|
||||||
unsigned long items_count; // Количество элементов
|
unsigned long items_count; // Количество элементов
|
||||||
unsigned long limit;
|
unsigned long limit;
|
||||||
@ -79,6 +80,16 @@ typedef struct {
|
|||||||
const yadisk_resource_embedded* _embedded;
|
const yadisk_resource_embedded* _embedded;
|
||||||
} yadisk_resource_info;
|
} yadisk_resource_info;
|
||||||
|
|
||||||
yadisk_code yadisk_get_disk_resources(yadisk_api_client* client, const char* path, yadisk_resource_info* resource);
|
typedef struct {
|
||||||
|
const char* path;
|
||||||
|
const char* fields;
|
||||||
|
unsigned long limit;
|
||||||
|
unsigned long offset;
|
||||||
|
int preview_crop;
|
||||||
|
const char* preview_size;
|
||||||
|
const char* sort;
|
||||||
|
} yadisk_get_disk_resources_params;
|
||||||
|
|
||||||
|
yadisk_code yadisk_get_disk_resources(yadisk_api_client* client, yadisk_get_disk_resources_params* params, yadisk_resource_info* resource);
|
||||||
|
|
||||||
#endif // YADISK_GET_DISK_RESOURCES_H_INCLUDED
|
#endif // YADISK_GET_DISK_RESOURCES_H_INCLUDED
|
||||||
|
@ -18,7 +18,9 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/lgpl-3.0.html>.
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*/
|
||||||
#ifndef YADISK_YADISK_SHARED_H
|
#ifndef YADISK_YADISK_SHARED_H
|
||||||
#define YADISK_YADISK_SHARED_H
|
#define YADISK_YADISK_SHARED_H
|
||||||
|
|
||||||
@ -26,17 +28,74 @@
|
|||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <json.h>
|
#include <json.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @ru Определение кодов ошибок для взаимодействия с сервисом Яндекс.Диск.
|
||||||
|
*
|
||||||
|
* Это перечисление используется для представления различных состояний, которые могут возникнуть
|
||||||
|
* при взаимодействии с API Яндекс.Диска. Оно включает в себя как успешные, так и ошибочные
|
||||||
|
* результаты операций.
|
||||||
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @ru Операция выполнена успешно, без ошибок.
|
||||||
|
*/
|
||||||
YADISK_OK = 0,
|
YADISK_OK = 0,
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @ru Ошибка при разборе JSON.
|
||||||
|
*
|
||||||
|
* Возникает, если полученный от Яндекс.Диска ответ не может быть
|
||||||
|
* корректно интерпретирован как валидный JSON.
|
||||||
|
*/
|
||||||
YADISK_FAILED_PARSE_JSON = 1,
|
YADISK_FAILED_PARSE_JSON = 1,
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @ru Ошибка HTTP запроса.
|
||||||
|
*
|
||||||
|
* Этот код возвращается, когда происходит сбой в процессе
|
||||||
|
* отправки запроса или получения ответа от Яндекс.Диска,
|
||||||
|
* например, из-за проблем с сетевым соединением.
|
||||||
|
*/
|
||||||
YADISK_FAILED_HTTP_REQUEST = 2
|
YADISK_FAILED_HTTP_REQUEST = 2
|
||||||
} yadisk_code;
|
} yadisk_code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @ru Структура для клиента API Яндекс.Диска.
|
||||||
|
*
|
||||||
|
* Эта структура используется для хранения данных, необходимых для взаимодействия с API Яндекс.Диска.
|
||||||
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @ru OAuth токен для аутентификации в API Яндекс.Диска.
|
||||||
|
*/
|
||||||
char* token;
|
char* token;
|
||||||
} yadisk_api_client;
|
} yadisk_api_client;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @ru Инициализирует клиента Яндекс.Диска.
|
||||||
|
*
|
||||||
|
* Вызывает необходимые процедуры для подготовки клиента к работе с API Яндекс.Диска.
|
||||||
|
* Эта функция должна быть вызвана перед началом работы с API.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* @ru Код ошибки (0 в случае успеха).
|
||||||
|
*/
|
||||||
int yadisk_init();
|
int yadisk_init();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief
|
||||||
|
* @ru Освобождает ресурсы, связанные с клиентом Яндекс.Диска.
|
||||||
|
*
|
||||||
|
* Эта функция освобождает все ресурсы и выполняет необходимые действия по очистке
|
||||||
|
* после завершения работы с API Яндекс.Диска. Она должна быть вызвана после
|
||||||
|
* завершения всех операций с API.
|
||||||
|
*/
|
||||||
void yadisk_cleanup();
|
void yadisk_cleanup();
|
||||||
|
|
||||||
#endif //YADISK_YADISK_SHARED_H
|
#endif //YADISK_YADISK_SHARED_H
|
||||||
|
12
tests/app.c
12
tests/app.c
@ -36,7 +36,12 @@ int main()
|
|||||||
}
|
}
|
||||||
|
|
||||||
yadisk_disk_info info;
|
yadisk_disk_info info;
|
||||||
yadisk_get_disk(client, &info);
|
// yadisk_get_disk_params params1 = {.fields = "total_space"};
|
||||||
|
yadisk_code result = yadisk_get_disk(client, NULL, &info);
|
||||||
|
if (result != YADISK_OK) {
|
||||||
|
printf("Erorr yadisk_get_disk\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
printf("Total disk size: %lu\n", info.total_space);
|
printf("Total disk size: %lu\n", info.total_space);
|
||||||
printf("Trash size: %lu\n", info.trash_size);
|
printf("Trash size: %lu\n", info.trash_size);
|
||||||
@ -75,7 +80,10 @@ int main()
|
|||||||
printf("=================\n");
|
printf("=================\n");
|
||||||
|
|
||||||
yadisk_resource_info resource;
|
yadisk_resource_info resource;
|
||||||
yadisk_get_disk_resources(client, "/", &resource);
|
yadisk_get_disk_resources_params params = {
|
||||||
|
.path = "/"
|
||||||
|
};
|
||||||
|
yadisk_get_disk_resources(client, ¶ms, &resource);
|
||||||
printf("Path: %s\n", resource.path);
|
printf("Path: %s\n", resource.path);
|
||||||
printf("Name: %s\n", resource.name);
|
printf("Name: %s\n", resource.name);
|
||||||
printf("Type: %s\n", resource.type);
|
printf("Type: %s\n", resource.type);
|
||||||
|
Loading…
Reference in New Issue
Block a user