new: ctx package list functions
This commit is contained in:
parent
bb1f5a61b2
commit
73a1f997e6
@ -14,6 +14,13 @@ typedef struct lm_ctx {
|
|||||||
const char *version; // libmp version (read-only)
|
const char *version; // libmp version (read-only)
|
||||||
} lm_ctx_t;
|
} lm_ctx_t;
|
||||||
|
|
||||||
|
typedef struct lm_ctx_list {
|
||||||
|
lm_pool_t *head;
|
||||||
|
lm_pool_t *pool;
|
||||||
|
lm_pkg_t *pkg;
|
||||||
|
ssize_t count;
|
||||||
|
} lm_ctx_list_t;
|
||||||
|
|
||||||
typedef struct lm_ctx_resolve_list {
|
typedef struct lm_ctx_resolve_list {
|
||||||
lm_pkg_t *resolving;
|
lm_pkg_t *resolving;
|
||||||
lm_pkg_t *packages;
|
lm_pkg_t *packages;
|
||||||
@ -62,6 +69,10 @@ void lm_ctx_free(lm_ctx_t *ctx);
|
|||||||
/* ####################
|
/* ####################
|
||||||
## main fucntions ##
|
## main fucntions ##
|
||||||
#################### */
|
#################### */
|
||||||
|
lm_ctx_list_t *lm_ctx_list(lm_ctx_t *ctx, lm_ctx_list_t *list); // returns the state of package list
|
||||||
|
lm_pkg_t *lm_ctx_list_next(lm_ctx_list_t *list); // returns the next package in the list
|
||||||
|
void lm_ctx_list_free(lm_ctx_list_t *list); // frees the package list state
|
||||||
|
|
||||||
lm_ctx_resolve_list_t *lm_ctx_resolve(
|
lm_ctx_resolve_list_t *lm_ctx_resolve(
|
||||||
lm_ctx_t *ctx, lm_pkg_t *pkg, lm_ctx_resolve_list_t *list); // resolves a package and returns a list of packages
|
lm_ctx_t *ctx, lm_pkg_t *pkg, lm_ctx_resolve_list_t *list); // resolves a package and returns a list of packages
|
||||||
lm_pkg_t *lm_ctx_resolve_next(lm_ctx_resolve_list_t *list); // returns the next package in the list
|
lm_pkg_t *lm_ctx_resolve_next(lm_ctx_resolve_list_t *list); // returns the next package in the list
|
||||||
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2024-08-04 15:24+0300\n"
|
"POT-Creation-Date: 2024-08-04 18:59+0300\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -102,5 +102,6 @@ void lm_ctx_free(lm_ctx_t *ctx) {
|
|||||||
lm_database_free(ctx->db);
|
lm_database_free(ctx->db);
|
||||||
|
|
||||||
lm_error_clear();
|
lm_error_clear();
|
||||||
|
bzero(ctx, sizeof(lm_ctx_t));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
60
src/ctx/list.c
Normal file
60
src/ctx/list.c
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
#include "../../include/package.h"
|
||||||
|
#include "../../include/error.h"
|
||||||
|
#include "../../include/ctx.h"
|
||||||
|
|
||||||
|
#include <strings.h>
|
||||||
|
|
||||||
|
lm_ctx_list_t *lm_ctx_list(lm_ctx_t *ctx, lm_ctx_list_t *list){
|
||||||
|
if(NULL == ctx || NULL == list){
|
||||||
|
lm_error_set(LM_ERR_ArgNULL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
list->pool = ctx->pools;
|
||||||
|
list->head = ctx->pools;
|
||||||
|
list->pkg = NULL;
|
||||||
|
list->count = 0;
|
||||||
|
|
||||||
|
while(NULL != list->pool){
|
||||||
|
list->pkg = list->pool->pkg;
|
||||||
|
while(NULL != list->pkg){
|
||||||
|
list->count++;
|
||||||
|
list->pkg = list->pkg->next;
|
||||||
|
}
|
||||||
|
list->pool = list->pool->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
list->pool = NULL;
|
||||||
|
list->pkg = NULL;
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
lm_pkg_t *lm_ctx_list_next(lm_ctx_list_t *list){
|
||||||
|
if(NULL == list){
|
||||||
|
lm_error_set(LM_ERR_ArgNULL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(NULL == list->pool || NULL == list->pkg){
|
||||||
|
if((list->pool = list->head) != NULL)
|
||||||
|
list->pkg = list->pool->pkg;
|
||||||
|
return list->pkg;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((list->pkg = list->pkg->next) && NULL == list->pkg){
|
||||||
|
if((list->pool = list->pool->next) != NULL)
|
||||||
|
list->pkg = list->pool->pkg;
|
||||||
|
return list->pkg;
|
||||||
|
}
|
||||||
|
|
||||||
|
return list->pkg;
|
||||||
|
}
|
||||||
|
|
||||||
|
void lm_ctx_list_free(lm_ctx_list_t *list){
|
||||||
|
if(NULL == list){
|
||||||
|
lm_error_set(LM_ERR_ArgNULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bzero(list, sizeof(lm_ctx_list_t));
|
||||||
|
}
|
@ -57,12 +57,12 @@ size_t lm_ctx_sync(lm_ctx_t *ctx, bool do_update, lm_ctx_sync_callback_t callbac
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!do_update && !lm_pool_info_load(cur)){
|
if(!do_update && !lm_pool_info_load(cur)){
|
||||||
pdebug(__func__, "(%s) failed to load info: %s", cur->name, lm_strerror());
|
pdebug(__func__, "(%s) failed to load info: %s", cur->name, lm_strerror());
|
||||||
goto next_info;
|
goto next_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(do_update && !lm_pool_info_download(cur, __lm_ctx_sync_callback, &cbdata)) {
|
else if(do_update && !lm_pool_info_download(cur, __lm_ctx_sync_callback, &cbdata)) {
|
||||||
pdebug(__func__, "(%s) failed to update info: %s", cur->name, lm_strerror());
|
pdebug(__func__, "(%s) failed to update info: %s", cur->name, lm_strerror());
|
||||||
goto next_info;
|
goto next_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,10 +70,15 @@ size_t lm_ctx_sync(lm_ctx_t *ctx, bool do_update, lm_ctx_sync_callback_t callbac
|
|||||||
status = true;
|
status = true;
|
||||||
|
|
||||||
next_info:
|
next_info:
|
||||||
if(NULL != callback && status)
|
if(NULL != callback && status){
|
||||||
callback(ctx, cur, SYNC_INFO_SUCCESS, 0, 0, data);
|
if(!callback(ctx, cur, SYNC_INFO_SUCCESS, 0, 0, data))
|
||||||
else if(NULL != callback && !status)
|
goto fail;
|
||||||
callback(ctx, cur, SYNC_INFO_FAIL, 0, 0, data);
|
}
|
||||||
|
|
||||||
|
else if(NULL != callback && !status){
|
||||||
|
if(!callback(ctx, cur, SYNC_INFO_FAIL, 0, 0, data))
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
if(status)
|
if(status)
|
||||||
cur->loaded = true;
|
cur->loaded = true;
|
||||||
@ -107,12 +112,12 @@ size_t lm_ctx_sync(lm_ctx_t *ctx, bool do_update, lm_ctx_sync_callback_t callbac
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!do_update && !lm_pool_list_load(cur, tempdir)){
|
if(!do_update && !lm_pool_list_load(cur, tempdir)){
|
||||||
pdebug(__func__, "(%s) failed to load list: %s", cur->name, lm_strerror());
|
pdebug(__func__, "(%s) failed to load list: %s", cur->name, lm_strerror());
|
||||||
goto next_list;
|
goto next_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(do_update && !lm_pool_list_download(cur, tempdir, __lm_ctx_sync_callback, &cbdata)) {
|
else if(do_update && !lm_pool_list_download(cur, tempdir, __lm_ctx_sync_callback, &cbdata)) {
|
||||||
pdebug(__func__, "(%s) failed to update list: %s", cur->name, lm_strerror());
|
pdebug(__func__, "(%s) failed to update list: %s", cur->name, lm_strerror());
|
||||||
goto next_list;
|
goto next_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,19 +128,26 @@ size_t lm_ctx_sync(lm_ctx_t *ctx, bool do_update, lm_ctx_sync_callback_t callbac
|
|||||||
free(tempdir);
|
free(tempdir);
|
||||||
tempdir = NULL;
|
tempdir = NULL;
|
||||||
|
|
||||||
if(NULL != callback && status)
|
if(NULL != callback && status){
|
||||||
callback(ctx, cur, SYNC_LIST_SUCCESS, 0, 0, data);
|
if(!callback(ctx, cur, SYNC_LIST_SUCCESS, 0, 0, data))
|
||||||
else if(NULL != callback && !status)
|
goto fail;
|
||||||
callback(ctx, cur, SYNC_LIST_FAIL, 0, 0, data);
|
}
|
||||||
|
|
||||||
|
else if(NULL != callback && !status){
|
||||||
|
if(!callback(ctx, cur, SYNC_LIST_FAIL, 0, 0, data))
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
if(!status)
|
if(!status)
|
||||||
cur->loaded = false;
|
cur->loaded = false;
|
||||||
else
|
else
|
||||||
loaded_count++;
|
loaded_count++;
|
||||||
|
|
||||||
status = false;
|
status = false;
|
||||||
cur = cur->next;
|
cur = cur->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return loaded_count;
|
return loaded_count;
|
||||||
|
fail:
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user