Skip to content

Commit

Permalink
Net bug fix and store update
Browse files Browse the repository at this point in the history
  • Loading branch information
konect-V committed Jun 14, 2024
1 parent 73d2b1d commit 08246f2
Show file tree
Hide file tree
Showing 22 changed files with 595 additions and 172 deletions.
5 changes: 4 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,10 @@
"inet_ntop.h": "c",
"inet_pton.h": "c",
"progress.h": "c",
"curl_memory.h": "c"
"curl_memory.h": "c",
"apps.h": "c",
"download.h": "c",
"stdlib.h": "c"
},
"files.exclude": {
"bundled": true,
Expand Down
1 change: 1 addition & 0 deletions sources/core/apps/init/source/core/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ int main(int argc, char* argv[]){
setenv("HOME", "/usr", 1);
setenv("PWD", getenv("HOME"), 1);
setenv("PATH", "/usr/bin", 1);
setenv("PATHSTORE", "/usr/store", 1);

setenv("USER", "root", 1);
setenv("HOSTNAME", "kot", 1);
Expand Down
138 changes: 74 additions & 64 deletions sources/core/apps/store/source/apps/apps.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,52 +18,41 @@ static size_t write_callback(void *contents, size_t size, size_t nmemb, void *us
return real_size;
}

fetch_apps_data_t* fetch_apps_data(void){
CURL *curl;
CURLcode res;

curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl){
fetch_apps_data_t* buffer_info = malloc(sizeof(fetch_apps_data_t));
buffer_info->buffer = NULL;
buffer_info->size = 0;
curl_easy_setopt(curl, CURLOPT_URL, "https://kot-store.github.io/apps/");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer_info);
curl_easy_setopt(curl, CURLOPT_CAINFO, "/usr/etc/ssl/cert.pem");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
res = curl_easy_perform(curl);

if(res != CURLE_OK){
fprintf(stderr, "Error : curl_%s\n", curl_easy_strerror(res));
free(buffer_info->buffer);
free(buffer_info);
return NULL;
}else{
return buffer_info;
}

curl_easy_cleanup(curl);
fetch_apps_data_t* fetch_apps_data(CURL* curl){
fetch_apps_data_t* buffer_info = malloc(sizeof(fetch_apps_data_t));
buffer_info->buffer = NULL;
buffer_info->size = 0;
curl_easy_setopt(curl, CURLOPT_URL, "https://kot-store.github.io/apps/");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buffer_info);
curl_easy_setopt(curl, CURLOPT_CAINFO, "/usr/etc/ssl/cert.pem");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
CURLcode res = curl_easy_perform(curl);

if(res != CURLE_OK){
fprintf(stderr, "Error : curl_%s\n", curl_easy_strerror(res));
free(buffer_info->buffer);
free(buffer_info);
return NULL;
}else{
return buffer_info;
}
curl_global_cleanup();

return NULL;
}

char* find_apps_url_by_name(char* name){
fetch_apps_data_t* data_info = fetch_apps_data();
char* find_apps_url_by_name(CURL* curl, char* name){
fetch_apps_data_t* data_info = fetch_apps_data(curl);
if(data_info != NULL){
cJSON* root = cJSON_Parse(data_info->buffer);
cJSON* applications = cJSON_GetObjectItem(root, "applications");

for(int i = 0 ; i < cJSON_GetArraySize(applications); i++){
cJSON* application = cJSON_GetArrayItem(applications, i);
cJSON* application_name = cJSON_GetObjectItem(application, "name");
if(cJSON_IsString(application_name) && (application_name->valuestring != NULL)){
if(!strcmp(name, application_name->valuestring)){
cJSON* json_link_application_url = cJSON_GetObjectItem(application, "json_link");
if(cJSON_IsString(json_link_application_url) && (json_link_application_url->valuestring != NULL)){
if(root != NULL){
cJSON* applications = cJSON_GetObjectItem(root, "applications");

for(int i = 0 ; i < cJSON_GetArraySize(applications); i++){
cJSON* application = cJSON_GetArrayItem(applications, i);
cJSON* application_name = cJSON_GetObjectItem(application, "name");
if(cJSON_IsString(application_name) && (application_name->valuestring != NULL)){
if(!strcmp(name, application_name->valuestring)){
cJSON* json_link_application_url = cJSON_GetObjectItem(application, "json_link");
if(cJSON_IsString(json_link_application_url) && (json_link_application_url->valuestring != NULL)){
char* return_value = malloc(strlen(json_link_application_url->valuestring) + 1);
strcpy(return_value, json_link_application_url->valuestring);
cJSON_Delete(root);
Expand All @@ -72,9 +61,11 @@ char* find_apps_url_by_name(char* name){
free(data_info);

return return_value;
}
}
}
}
}
}

}

cJSON_Delete(root);
Expand All @@ -86,30 +77,38 @@ char* find_apps_url_by_name(char* name){
return NULL;
}

char** find_apps_url_by_tag(char* tag){
fetch_apps_data_t* data_info = fetch_apps_data();
char** return_value = NULL;
app_url_by_tag_t** find_apps_url_by_tag(CURL* curl, char* tag){
fetch_apps_data_t* data_info = fetch_apps_data(curl);
app_url_by_tag_t** return_value = NULL;

if(data_info != NULL){
cJSON* root = cJSON_Parse(data_info->buffer);
cJSON* applications = cJSON_GetObjectItem(root, "applications");

size_t return_value_count_url = 0;
for(int i = 0 ; i < cJSON_GetArraySize(applications); i++){
cJSON* application = cJSON_GetArrayItem(applications, i);
cJSON* application_tags = cJSON_GetObjectItem(application, "tags");

for(int y = 0 ; y < cJSON_GetArraySize(application_tags); y++){
cJSON* application_tag = cJSON_GetArrayItem(application_tags, y);
if(cJSON_IsString(application_tag) && (application_tag->valuestring != NULL)){
if(!strcmp(tag, application_tag->valuestring)){
cJSON* json_link_application_url = cJSON_GetObjectItem(application, "json_link");
if(cJSON_IsString(json_link_application_url) && (json_link_application_url->valuestring != NULL)){
return_value = realloc(return_value, (return_value_count_url + 2) * sizeof(char*));
return_value[return_value_count_url + 1] = NULL;
return_value[return_value_count_url] = malloc(strlen(json_link_application_url->valuestring) + 1);
strcpy(return_value[return_value_count_url], json_link_application_url->valuestring);
return_value_count_url++;
if(root != NULL){
cJSON* applications = cJSON_GetObjectItem(root, "applications");

size_t return_value_count_url = 0;
for(int i = 0 ; i < cJSON_GetArraySize(applications); i++){
cJSON* application = cJSON_GetArrayItem(applications, i);
cJSON* application_tags = cJSON_GetObjectItem(application, "tags");
cJSON* application_name = cJSON_GetObjectItem(application, "name");

if(cJSON_IsString(application_name) && (application_name->valuestring != NULL)){
for(int y = 0 ; y < cJSON_GetArraySize(application_tags); y++){
cJSON* application_tag = cJSON_GetArrayItem(application_tags, y);
if(cJSON_IsString(application_tag) && (application_tag->valuestring != NULL)){
if(!strcmp(tag, application_tag->valuestring)){
cJSON* json_link_application_url = cJSON_GetObjectItem(application, "json_link");
if(cJSON_IsString(json_link_application_url) && (json_link_application_url->valuestring != NULL)){
return_value = realloc(return_value, (return_value_count_url + 2) * sizeof(app_url_by_tag_t*));
return_value[return_value_count_url + 1] = NULL;
return_value[return_value_count_url] = malloc(sizeof(app_url_by_tag_t));
return_value[return_value_count_url]->name = malloc(strlen(application_name->valuestring) + 1);
strcpy(return_value[return_value_count_url]->name, application_name->valuestring);
return_value[return_value_count_url]->url = malloc(strlen(json_link_application_url->valuestring) + 1);
strcpy(return_value[return_value_count_url]->url, json_link_application_url->valuestring);
return_value_count_url++;
}
}
}
}
}
Expand All @@ -123,4 +122,15 @@ char** find_apps_url_by_tag(char* tag){
}

return return_value;
}

void free_app_url_by_tag(app_url_by_tag_t** data){
int i = 0;
while(data[i] != NULL){
free(data[i]->name);
free(data[i]->url);
free(data[i]);
i++;
}
free(data);
}
12 changes: 9 additions & 3 deletions sources/core/apps/store/source/apps/apps.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,14 @@ typedef struct{
size_t size;
}fetch_apps_data_t;

fetch_apps_data_t* fetch_apps_data(void);
char* find_apps_url_by_name(char* name);
char** find_apps_url_by_tag(char* tag);
typedef struct{
char* url;
char* name;
}app_url_by_tag_t;

fetch_apps_data_t* fetch_apps_data(CURL* curl);
char* find_apps_url_by_name(CURL* curl, char* name);
app_url_by_tag_t** find_apps_url_by_tag(CURL* curl, char* tag);
void free_app_url_by_tag(app_url_by_tag_t** data);

#endif // APPS_H
46 changes: 23 additions & 23 deletions sources/core/apps/store/source/core/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,23 @@
#include <curl/curl.h>

#include "../apps/apps.h"
#include "../install/install.h"

void print_help(){
printf("For help: ./store --help\n");
printf("To install an application: ./store --install [app name]\n");
}

int main(int argc, char *argv[]){
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL *curl = curl_easy_init();

if(argc > 1){
if(curl == NULL){
printf("Can't load curl");
return -1;
}else if(argc > 1){
if(!strcmp(argv[1], "--help")){
print_help();
return 0;
}else if(!strcmp(argv[1], "--install") && argc == 2){
char search_mode[3];
printf("Search with > T(tag)/N(name)\n");
Expand All @@ -29,12 +32,12 @@ int main(int argc, char *argv[]){
fgets(tag, sizeof(tag), stdin);
tag[strcspn(tag, "\n")] = 0;

char** url = find_apps_url_by_tag(tag);
app_url_by_tag_t** apps_available = find_apps_url_by_tag(curl, tag);

if(url != NULL){
if(apps_available != NULL){
int i = 0;
while(url[i] != NULL){
printf("%d) %s\n", i, url[i]);
while(apps_available[i] != NULL){
printf("%d) %s\n", i, apps_available[i]->name);
i++;
}

Expand All @@ -47,72 +50,65 @@ int main(int argc, char *argv[]){

if(index_to_install >= 0 && index_to_install < i){
char allow_install[3];
printf("%s > Would you like to install it? (Y/N)\n", url[index_to_install]);
printf("%s > Would you like to install it? (Y/N)\n", apps_available[index_to_install]->name);
fgets(allow_install, sizeof(allow_install), stdin);
allow_install[strcspn(allow_install, "\n")] = 0;
if(!strcmp("Y", allow_install)){
// TODO
install_app(curl, apps_available[index_to_install]->url, apps_available[index_to_install]->name);
}else{
printf("Cancel the installation\n");
}
}else{
printf("Unknow index !\n");
}

free(url);
return 0;
free_app_url_by_tag(apps_available);
}else{
printf("No application found with tag: %s. Please check the spelling or try a different tag.\n", tag);
return 0;
}
}else if(!strcmp("N", search_mode)){
char name[512];
printf("What is the name of the application you want to install?\n");
fgets(name, sizeof(name), stdin);
name[strcspn(name, "\n")] = 0;

char* url = find_apps_url_by_name(name);
char* url = find_apps_url_by_name(curl, name);

if(url != NULL){
char allow_install[3];
printf("%s found in the store. Would you like to install it? (Y/N)\n", name);
fgets(allow_install, sizeof(allow_install), stdin);
allow_install[strcspn(allow_install, "\n")] = 0;
if(!strcmp("Y", allow_install)){
// TODO
install_app(curl, url, name);
}else{
printf("Cancel the installation\n");
}
free(url);
return 0;
}else{
printf("Can't find %s in the store. Did you spell it correctly?\n", name);
return 0;
}
}else{
printf("Unknow search method !\n");
return 0;
}
}else if(!strcmp(argv[1], "--install") && argc == 3){
char* name = argv[2];

char* url = find_apps_url_by_name(name);

char* url = find_apps_url_by_name(curl, name);
if(url != NULL){
char allow_install[3];
printf("%s found in the store. Would you like to install it? (Y/N)\n", name);
fgets(allow_install, sizeof(allow_install), stdin);
allow_install[strcspn(allow_install, "\n")] = 0;
if(!strcmp("Y", allow_install)){
// TODO
install_app(curl, url, name);
}else{
printf("Cancel the installation\n");
}
free(url);
return 0;
}else{
printf("Can't find %s in the store. Did you spell it correctly?\n", name);
return 0;
}
}else{
print_help();
Expand All @@ -121,5 +117,9 @@ int main(int argc, char *argv[]){
print_help();
}

curl_easy_cleanup(curl);

curl_global_cleanup();

return 0;
}
Loading

0 comments on commit 08246f2

Please sign in to comment.