From 87a358ee078c9306e5845e6441154cef4625945a Mon Sep 17 00:00:00 2001 From: Enris Nogare von Tein <ent13@inf.ufpr.br> Date: Tue, 7 Jun 2016 11:37:26 -0300 Subject: [PATCH] Removed outdated code from the repository. Separated functions that use curl from utils.c/h to upload-utils.c/h because utils.c got too big. Updated makefile to compile upload-utils.c/h Signed-off-by: Enris Nogare von Tein <ent13@inf.ufpr.br> --- .gitignore | 1 + useful/stg312/.size.out | 2 +- useful/stg312/.upid.out | 1 - useful/stg312/makefile | 2 +- useful/stg312/openslx_gui | Bin 90772 -> 96516 bytes useful/stg312/openslx_gui.c | 1 + useful/stg312/stg4.c | 9 +- useful/stg312/upload-utils.c | 453 ++++++++++++++++++++++++++ useful/stg312/upload-utils.h | 20 ++ useful/stg312/upload.c | 1 + useful/stg312/utils.c | 3 +- useful/stg312/utils.h | 8 +- useful/stg4cloner/clone_stage4.sh | 27 -- useful/stg4cloner/makefile | 16 - useful/stg4cloner/pic.png | Bin 690 -> 0 bytes useful/stg4cloner/squash.sh | 38 --- useful/stg4cloner/stage4_cloner | Bin 36719 -> 0 bytes useful/stg4cloner/stage4_cloner.c | 508 ------------------------------ 18 files changed, 490 insertions(+), 600 deletions(-) create mode 100644 useful/stg312/upload-utils.c create mode 100644 useful/stg312/upload-utils.h delete mode 100755 useful/stg4cloner/clone_stage4.sh delete mode 100644 useful/stg4cloner/makefile delete mode 100644 useful/stg4cloner/pic.png delete mode 100755 useful/stg4cloner/squash.sh delete mode 100755 useful/stg4cloner/stage4_cloner delete mode 100644 useful/stg4cloner/stage4_cloner.c diff --git a/.gitignore b/.gitignore index cd5905fd..f3557344 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ server/local_builds/ remote/modules/systemd/dltmp.systemd-204.tar.xz scripts/home/ stage4/ +useful/backup-por-facilidade/ useful/ainda-nao-sei-usar-o-git.tar.gz useful/ainda-nao-sei-usar-o-git/ useful/stg312-dummy/ diff --git a/useful/stg312/.size.out b/useful/stg312/.size.out index ef0af295..d20b3065 100644 --- a/useful/stg312/.size.out +++ b/useful/stg312/.size.out @@ -1 +1 @@ -1726520 trying.r1.tar.gz +6906932 trying-stuff.r1.tar.gz diff --git a/useful/stg312/.upid.out b/useful/stg312/.upid.out index 980a992b..e69de29b 100644 --- a/useful/stg312/.upid.out +++ b/useful/stg312/.upid.out @@ -1 +0,0 @@ -{"uploadid":"XoqQjZRveULpcdtxUzzB431MnUxQZ1UwheD","status":"ok","code":"003","msg":"New upload succesful"} \ No newline at end of file diff --git a/useful/stg312/makefile b/useful/stg312/makefile index 386966be..be912afe 100644 --- a/useful/stg312/makefile +++ b/useful/stg312/makefile @@ -1,7 +1,7 @@ NAME=openslx_gui CFLAGS=-g -Wall -fdiagnostics-show-option GTKFLAGS=-export-dynamic `pkg-config --cflags --libs gtk+-3.0 jansson` -lX11 -lcurl -SRCS=openslx_gui.c stg4.c utils.c +SRCS=openslx_gui.c stg4.c utils.c upload-utils.c CC=gcc # top-level rule to create the program. diff --git a/useful/stg312/openslx_gui b/useful/stg312/openslx_gui index b4c8155408350dbd645a69fce1f8be39ed370e6a..4b3a28a9778424b8988c0491d134cd3d04757dde 100755 GIT binary patch delta 40544 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 delta 35303 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%0ARFXdZwn104bjQYI$@v(g!=>PsDi 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 UZkWgTnT-#1mT<drDdR(C0J_ma`Tzg` diff --git a/useful/stg312/openslx_gui.c b/useful/stg312/openslx_gui.c index d495fe2f..a9dfc385 100644 --- a/useful/stg312/openslx_gui.c +++ b/useful/stg312/openslx_gui.c @@ -14,6 +14,7 @@ #include <gdk/gdk.h> #include <glib.h> #include <jansson.h> +#include "upload-utils.h" void tela_upload_antigo(GtkWidget *w,gpointer p){ GtkWidget *window_upload_antigo, *janela_ant, *button_continua_upload, *button_nao_continua, *label_nome_imagem, *label_parte_upload; diff --git a/useful/stg312/stg4.c b/useful/stg312/stg4.c index 83620231..f7fcee37 100644 --- a/useful/stg312/stg4.c +++ b/useful/stg312/stg4.c @@ -7,6 +7,7 @@ #include <errno.h> #include <sys/wait.h> #include "utils.h" +#include "upload-utils.h" #include <gdk/gdkkeysyms.h> #include <gdk/gdk.h> #include <glib.h> @@ -132,8 +133,8 @@ void stg4_clique_2a_tela(GtkWidget *w,gpointer p){ //gboolean g_spawn_async_with_pipes (const gchar *working_directory, gchar **argv, gchar **envp, GSpawnFlags flags, // GSpawnChildSetupFunc child_setup, gpointer user_data, GPid *child_pid, GError **error); - strcpy(argv[0], CLONE_STG4_SCRIPT_DUMMY); - //strcpy(argv[0], CLONE_STG4_SCRIPT); + //strcpy(argv[0], CLONE_STG4_SCRIPT_DUMMY); + strcpy(argv[0], CLONE_STG4_SCRIPT); strcpy(argv[1], tmscripts); @@ -217,8 +218,8 @@ void stg4_clique_2a_tela(GtkWidget *w,gpointer p){ g_signal_connect (G_OBJECT (window_stg4_final), "key_press_event", G_CALLBACK (on_key_press), data); //Conecta os sinais pra quando apertar uma tecla g_signal_connect(button_help_4at, "clicked", G_CALLBACK(help_screen), NULL); printf("Linha %d\n", __LINE__); - //g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload), data); - g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload_teste), data); + g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload), data); + //g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload_teste), data); //g_signal_connect(button_stg4_upload, "clicked", G_CALLBACK(faz_upload_dummy), data); printf("Linha %d\n", __LINE__); g_signal_connect(button_stg4_final_sair, "clicked", G_CALLBACK(mata_janela_e_chama_tela_principal), data); diff --git a/useful/stg312/upload-utils.c b/useful/stg312/upload-utils.c new file mode 100644 index 00000000..d80fb824 --- /dev/null +++ b/useful/stg312/upload-utils.c @@ -0,0 +1,453 @@ + +#include <gtk/gtk.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <sys/wait.h> +#include <gdk/gdkkeysyms.h> +#include <gdk/gdk.h> +#include <glib.h> +#include "utils.h" +#include <curl/curl.h> +#include <curl/easy.h> +#include <jansson.h> +#include <time.h> +#include <gcrypt.h> +#include <sys/types.h> +#include <signal.h> + +int checa_upload_antigo(){ + + FILE *upload_in_progress; + char *old_upload; + old_upload = malloc(255*sizeof(char)); + + upload_in_progress = fopen(".progress.out", "a+"); + printf("Linha %d\n", __LINE__); + rewind(upload_in_progress); + fscanf(upload_in_progress, "%s", old_upload); + printf("Linha %d\n", __LINE__); + + puts(old_upload); + if(!(strcmp(old_upload, "Upload"))){ + return 1; + } + return 0; +} + +int calcula_tempo_upload(){ + + FILE *velocidade_upload; + velocidade_upload = fopen(".speed.out", "r"); + + char *velocidade; + velocidade = malloc(255*sizeof(char)); + int velocidade_f; + + fscanf(velocidade_upload, "%s", velocidade); + puts(velocidade); + fscanf(velocidade_upload, "%s", velocidade); + puts(velocidade); + fscanf(velocidade_upload, "%s", velocidade); + puts(velocidade); + fscanf(velocidade_upload, "%s", velocidade); + puts(velocidade); + fscanf(velocidade_upload, "%s", velocidade); + puts(velocidade); + fscanf(velocidade_upload, "%s", velocidade); + puts(velocidade); + fscanf(velocidade_upload, "%s", velocidade); + puts(velocidade); + fscanf(velocidade_upload, "%s", velocidade); + puts(velocidade); + puts("vai calcular"); + velocidade_f = atoi(velocidade); + puts("calculou"); + puts("chegou aqui"); + return((1953)/velocidade_f*3); // *3 para levar em conta problemas de rede. +} + +//Função que gera o arquivo de dados do usuario, tanto os que foram recebidos do banco quanto informaçõs de sistema. Esse arquivo +// sera submetido junto à imagem quando o upload for feito. +void gera_arquivo_dados_usuario(){ + + user_info dados_do_user; + pega_dados_do_usuario(&dados_do_user); + FILE *user_data_file; + user_data_file = fopen("user_data.info", "wr"); + + fputs("Nome do criador da imagem: ", user_data_file); + fputs(dados_do_user.name, user_data_file); + fputs("\nLogin do criador da imagem: ", user_data_file); + fputs(dados_do_user.login, user_data_file); + fputs("\nEmail do criador da imagem: ", user_data_file); + fputs(dados_do_user.email, user_data_file); + fputs("\nCidade do criador da imagem: ", user_data_file); + fputs(dados_do_user.city, user_data_file); + + time_t timer; + time(&timer); + fputs("\nData da criação da imagem: ", user_data_file); + fputs(ctime(&timer), user_data_file); + + fclose(user_data_file); + system("uname -a >> user_data.info"); + system("lsb_release -a >> user_data.info"); + + + + +} + +//Função que checa o arquivo .login.out para verificar o suceso do login. +int checa_sucesso_do_login(){ + + FILE *login; + char *user_data_str; + login = fopen(".login.out", "r");; + user_data_str = malloc(2550*sizeof(char)); + fgets(user_data_str,2550*sizeof(char), login ); + + printf("%zu tamanho da string\n", strlen(user_data_str)); + puts(user_data_str); + + json_t *root; + json_error_t error; + root = json_loads(user_data_str,0, &error); + printf("Linha %d\n", __LINE__); + + if(!root){ + puts("erro ao carregar dados!"); + //exit(0); + } + printf("Linha %d\n", __LINE__); + + if(!json_is_object(root)) + { + fprintf(stderr, "error: root is not an array\n"); + json_decref(root); + } + printf("Linha %d\n", __LINE__); + + json_t *sha; + printf("Linha %d\n", __LINE__); + + const char *message_text; + printf("Linha %d\n", __LINE__); + + sha = json_object_get(root, "status"); + printf("Linha %d\n", __LINE__); + + if(json_is_string(sha)) + { + printf("Linha %d\n", __LINE__); + message_text = json_string_value(sha); + printf("Linha %d\n", __LINE__); + puts(message_text); + printf("Linha %d\n", __LINE__); + }else{ + printf("Linha %d\n", __LINE__); + puts("error, not string"); + return 0; + printf("Linha %d\n", __LINE__); + } + + if(!(strcmp("ok", message_text))){ + printf("Linha %d\n", __LINE__); + puts(message_text); + return 1; + } + + printf("Linha %d\n", __LINE__); + return 0; + + +} + +//Função que utiliza o arquivo gerado pela chamada Curl com os dados do usuario e coloca eles na estrutura user_info *dados +void pega_dados_do_usuario(user_info *dados){ + + FILE *user_data; + char *user_data_str; + user_data_str = malloc(2550*sizeof(char)); + user_data = fopen(".data.out", "r"); + fgets(user_data_str,2550*sizeof(char), user_data ); + puts("User data: "); + puts(user_data_str); + puts("User data end "); + + json_t *root; + json_error_t error; + root = json_loads(user_data_str,0, &error); + if(!root){ + puts("erro ao carregar dados!"); + //exit(0); + } + + if(!json_is_object(root)) + { + fprintf(stderr, "error: root is not an array\n"); + json_decref(root); + } + + json_t *sha; + const char *message_text; + sha = json_object_get(root, "name"); + if(json_is_string(sha)) + { + message_text = json_string_value(sha); + puts(message_text); + strcpy(dados->name, message_text); + }else{ + dados->name[0] = '\0'; + puts("error, not string"); + } + + sha = json_object_get(root, "login"); + if(json_is_string(sha)) + { + message_text = json_string_value(sha); + puts(message_text); + strcpy(dados->login, message_text); + + }else{ + dados->login[0] = '\0'; + puts("error, not string"); + } + + sha = json_object_get(root, "email"); + if(json_is_string(sha)) + { + message_text = json_string_value(sha); + puts(message_text); + strcpy(dados->email, message_text); + + }else{ + dados->email[0] = '\0'; + puts("error, not string"); + } + + sha = json_object_get(root, "city"); + if(json_is_string(sha)) + { + message_text = json_string_value(sha); + puts(message_text); + strcpy(dados->city, message_text); + + }else{ + dados->city[0] = '\0'; + puts("error, not string"); + } +} + +int checa_sucesso_get_info(){ + + FILE *user_data; + char *user_data_str; + user_data_str = malloc(2550*sizeof(char)); + user_data = fopen(".data.out", "r"); + fgets(user_data_str,2550*sizeof(char), user_data ); + puts("User data: "); + puts(user_data_str); + puts("User data end "); + + json_t *root; + json_error_t error; + root = json_loads(user_data_str,0, &error); + if(!root){ + puts("erro ao carregar dados!"); + //exit(0); + } + + if(!json_is_object(root)) + { + fprintf(stderr, "error: root is not an array\n"); + json_decref(root); + } + + json_t *sha; + const char *message_text; + sha = json_object_get(root, "status"); + if(json_is_string(sha)) + { + message_text = json_string_value(sha); + puts(message_text); + if(!(strcmp(message_text, "ok"))){ + return 1; + } + return 0; + }else{ + puts("Erro Crítico. Não encontrou a mensagem de erro. Se esse erro persistir, informe o suporte técnico."); + return 0; + } + + +} +//Função que faz o Login do usuario no sistema. Utiliza a biblioteca Libcurlc para realizar as requisições http. +// Guarda as saidas em arquivos para uso posterios. Guarda o cookie para uso posterios tbm +int faz_login_dummy(GtkWidget *w, gpointer p){ + dados *data_ant = p; + tela_principal(NULL, data_ant); + return 1; +} + +int faz_login(GtkWidget *w, gpointer p){ + + dados *data_ant = p; + CURL *curl; + char *data = malloc(255*sizeof(char)); + strcpy(data, "login="); + char * resp; + FILE *dados_do_user, *login_out; + resp = malloc(255*sizeof(char)); + puts("teste"); + puts(gtk_entry_get_text(GTK_ENTRY(data_ant->dado3))); + strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado3))); + strcat(data, "&passwd="); + strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4))); + strcat(data, "&request=login"); + puts(data); + + dados_do_user = fopen(".data.out", "wr"); + login_out = fopen(".login.out", "wr"); + + + curl = curl_easy_init(); + if(curl) { + + curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0"); + curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1 ); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, login_out); + curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie"); + curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie"); + + curl_easy_setopt(curl, CURLOPT_VERBOSE, 0); + curl_easy_setopt(curl, CURLOPT_HEADER, 0); + + //curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.0.6/slx-admin/api.php?do=webservice"); + curl_easy_setopt(curl, CURLOPT_URL, API_URL); + curl_easy_setopt(curl, CURLOPT_POST, 1); + curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data); + puts("Fazendo login."); + curl_easy_perform(curl); + + puts("teste 2"); + fclose(login_out); + printf("Linha antes checagem %d\n", __LINE__); + if(checa_sucesso_do_login()){ + + printf("Linha %d\n", __LINE__); + char *data2="request=getinfo"; + curl_easy_setopt(curl, CURLOPT_WRITEDATA, dados_do_user); + curl_easy_setopt(curl, CURLOPT_POST, 1); + curl_easy_setopt(curl, CURLOPT_VERBOSE, 0); + curl_easy_setopt(curl, CURLOPT_HEADER, 0); + curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data2); + printf("Linha %d\n", __LINE__); + puts("pegando informação."); + curl_easy_perform(curl); + fclose(dados_do_user); + if(!(checa_sucesso_get_info())){ //nao conseguiu pegar informações + + puts("Erro ao carregar informações do usuário. Por favor tente novamente. Se o erro persistir avisse o suporte técnico."); + + } + //curl_easy_setopt(curl, CURLOPT_URL, "192.168.0.5/apply/upload"); + //res = curl_easy_perform(curl); + + if(curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &resp) == CURLE_OK) + puts(resp); + else + puts("Nao pegou dados"); + curl_easy_cleanup(curl); + puts("teste"); + if(checa_upload_antigo()){ + tela_upload_antigo(NULL, data_ant); + }else{ + if(data_ant->control == 0){ + tela_principal(NULL, data_ant); + } + } + return 1; + } + printf("Linha %d\n", __LINE__); + } + printf("Linha %d\n", __LINE__); + gtk_label_set_text(GTK_LABEL(data_ant->dado5), "Login nao encontrado!"); + printf("Linha %d\n", __LINE__); + return 0; +} + +//Função que faz o upload da imagem + dados para a api do site. Atualmente faz upload só de UM arquivo +void faz_upload_dummy(GtkWidget *w, gpointer p){ + stg4_tela_confirmacao_upload(NULL, p); +}//Função de teste dummy + +//função de teste que faz upload da imagem teste.r1 +void faz_upload_teste(GtkWidget *w, gpointer p){ + + GtkWidget *loading; + GtkBuilder *builder; + int i; + struct dados *data = malloc(sizeof(*data)); + GPid pid; + GChildWatchFunc handler; + char **argv; + argv = malloc(10*sizeof(char*)); + for (i=0; i < 10; i++){ + argv[i] = malloc(255*sizeof(char)); + } + + builder = gtk_builder_new(); + gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL); + loading = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen")); + + gtk_widget_show_all(loading); + strcpy(argv[0], "./upload"); + strcpy(argv[1], "/home/ent13/Desktop/pasta-teste"); + strcpy(argv[2], "teste"); + strcpy(argv[3], ".r1"); + argv[4] = NULL; + g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL); + handler = sai_do_script; + data->dado6 = loading; + data->pid = pid; + g_child_watch_add(pid, handler, data); + stg4_tela_confirmacao_upload(NULL, p); + +} + +void faz_upload(GtkWidget *w, gpointer p){ + + GtkWidget *loading; + dados *data_ant = p; + GtkBuilder *builder; + struct dados *data = malloc(sizeof(*data)); + int i; + GPid pid; + GChildWatchFunc handler; + char **argv; + argv = malloc(10*sizeof(char*)); + for (i=0; i < 10; i++){ + argv[i] = malloc(255*sizeof(char)); + } + + builder = gtk_builder_new(); + gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL); + loading = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen")); + + gtk_widget_show_all(loading); + strcpy(argv[0], "./upload"); + strcpy(argv[1], gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado4))); + strcpy(argv[2], gtk_entry_get_text(GTK_ENTRY(data_ant->dado3))); + strcpy(argv[3], ".r1"); + argv[4] = NULL; + g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL); + handler = sai_do_script; + data->dado6 = loading; + data->pid = pid; + g_child_watch_add(pid, handler, data); + stg4_tela_confirmacao_upload(NULL, p); + +} diff --git a/useful/stg312/upload-utils.h b/useful/stg312/upload-utils.h new file mode 100644 index 00000000..f021d481 --- /dev/null +++ b/useful/stg312/upload-utils.h @@ -0,0 +1,20 @@ + +#include <gtk/gtk.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <sys/wait.h> + + +int checa_upload_antigo(); +int calcula_tempo_upload(); +void gera_arquivo_dados_usuario(); +int checa_sucesso_do_login(); +void pega_dados_do_usuario(user_info *dados); +int checa_sucesso_get_info(); +int faz_login_dummy(GtkWidget *w, gpointer p); +int faz_login(GtkWidget *w, gpointer p); +void faz_upload_dummy(GtkWidget *w, gpointer p); +void faz_upload_teste(GtkWidget *w, gpointer p); +void faz_upload(GtkWidget *w, gpointer p); diff --git a/useful/stg312/upload.c b/useful/stg312/upload.c index de58e0c8..3860c8ef 100644 --- a/useful/stg312/upload.c +++ b/useful/stg312/upload.c @@ -15,6 +15,7 @@ #include <gcrypt.h> #include <sys/types.h> #include <signal.h> +#include "upload-utils.h" int checa_sucesso_upload(){ diff --git a/useful/stg312/utils.c b/useful/stg312/utils.c index 5bd26252..5a536f30 100644 --- a/useful/stg312/utils.c +++ b/useful/stg312/utils.c @@ -18,6 +18,7 @@ #include <sys/types.h> #include <signal.h> +/* int checa_upload_antigo(){ FILE *upload_in_progress; @@ -491,7 +492,7 @@ void faz_upload(GtkWidget *w, gpointer p){ stg4_tela_confirmacao_upload(NULL, p); } - +*/ //FUnção que acha o caminho para o tm-scripts, utilizada no arquivo clone_stage4.sh void acha_tm_scripts(char *path){ diff --git a/useful/stg312/utils.h b/useful/stg312/utils.h index 9a5ab894..0d2cb2a9 100644 --- a/useful/stg312/utils.h +++ b/useful/stg312/utils.h @@ -8,6 +8,7 @@ #include <sys/wait.h> #include "openslx_gui.h" #include "stg4.h" +#include "upload-utils.h" static const char UPLOAD_REQUEST[] = "request=newupload&nparts=10&name="; //nparts HAS to be the same as NUMBER_OF_PARTS static const char API_URL[] = "http://192.168.0.6/slx-admin/api.php?do=webservice"; @@ -15,11 +16,9 @@ static const int NUMBER_OF_PARTS = 10; // static const char CLONE_STG4_SCRIPT[] = "./clone_stage4.sh"; static const char CLONE_STG4_SCRIPT_DUMMY[] = "./clone_stage4-dummy.sh"; static const char ARQUIVO_TESTE[] = "/home/ent13/Desktop/pasta-teste/teste.r1"; - +/* int calcula_tempo_upload(); -void stg4_clique_2a_tela_caller(GtkWidget *w, gpointer p); - void pega_dados_do_usuario(user_info *dados); void gera_arquivo_dados_usuario(); @@ -33,6 +32,9 @@ void faz_upload_dummy(GtkWidget *w, gpointer p); void faz_upload_teste(GtkWidget *w, gpointer p); void faz_upload(GtkWidget *w, gpointer p); +*/ + +void stg4_clique_2a_tela_caller(GtkWidget *w, gpointer p); gboolean on_key_press (GtkWidget *widget, GdkEventKey *event, gpointer user_data); diff --git a/useful/stg4cloner/clone_stage4.sh b/useful/stg4cloner/clone_stage4.sh deleted file mode 100755 index 7c993d68..00000000 --- a/useful/stg4cloner/clone_stage4.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -#echo O caminho é -#pwd -mkdir -p $2 -caminho=$(pwd) -echo $1 -cd $1 -#echo $4 caminho que será executado -if ./clone_stage4 $3 "$4" ; then - cd $caminho - #echo Caminho novo - #pwd - echo s > .result.out - #echo Escreveu - #cat .result.out - echo "Sucesso ao clonar." -else - clear - #echo $caminho - cd $caminho - #echo Caminho novo - #pwd - echo n > .result.out - #echo Escreveu - #cat .result.out - echo "Nao clonou." -fi diff --git a/useful/stg4cloner/makefile b/useful/stg4cloner/makefile deleted file mode 100644 index 19f42e4d..00000000 --- a/useful/stg4cloner/makefile +++ /dev/null @@ -1,16 +0,0 @@ -NAME=stage4_cloner -CFLAGS=-g -Wall -fdiagnostics-show-option -Wno-int-to-pointer-cast -Wno-pointer-to-int-cast -o $(NAME) -GTKFLAGS=-export-dynamic `pkg-config --cflags --libs gtk+-3.0` -SRCS=stage4_cloner.c -CC=gcc - -# top-level rule to create the program. -all: main - -# compiling the source file. -main: $(SRCS) - $(CC) $(CFLAGS) $(SRCS) $(GTKFLAGS) - -# cleaning everything that can be automatically recreated with "make". -clean: - /bin/rm -f $(NAME) diff --git a/useful/stg4cloner/pic.png b/useful/stg4cloner/pic.png deleted file mode 100644 index af75554abdf672f5f84115e1e36aed57cbe4df96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmeAS@N?(olHy`uVBq!ia0y~yU=U?sV36csU|?YQz0b;!fq{V~-O<;Pfnj4m_n$;o z1_lPk;vjb?hIQv;UNSH+C?tCX`7$t6sWC7#v@kIIVqjosc)`F>YQVtoDuIE)Y6b&? zc)^@qfi?^b3`|Mh?k)`f+xyS#XJBC9EbxddW?*3O0Ash4*>(&JjM1Jhjv*T7lYjK{ z8aS-DuYdmiy-mOWoWAd|X#aY@57(y&O}_MPe!*9BpD%xzq~+K+9&C*KAgA<eS)`Q8 zfm0{XaV%Lf`+kFq{dP`f%SCp)m#ZF$%#@I5xn=i1{m1S=L5&qwPamHDUmv%AdtzEb zz?~n{AJ!QJ%s+ES{{R2~zyJS#uV>4~c5K0Kp3f?cUa@(9{})zVySM)T{?N^a1|H{< zI}%vCx~AWc%0H7{^XLEnrA!Xh$`T?6^&V}zo|I6!<HP^^GI0w26C0Ud1+iUxGkO2N z{XQ&F#}Ax4z#;l%ZT;u}_a9pYa_}#^_UYRH|H}{kJdjhiVkZyJy6N-odL=b(5LL`$ zV48VjO++S#@C&vL)r|+LE?@LD6HvRbH(@`c<A>k>-#Z`BnQ&j>;ei7JKc4-ct<bUZ zKtV&BWOLs6H*&E8%ra>UK1^jSnqjfia;Ct;Ze_g#AH^8@wlgfLI4pQvf`MVN=IeWz zvyOEzFfgc=xJHzuB$lLFB^RY8mZUNm85o-C8XD*tS%w%ISQ#5x85-*v7+Dz@+_{zA zkD?(rKP5A*61Rr6?U#)i7#LhYHWZhoTO}nHr|Om#Wiq5?=A>Hb>+5Ia=cekX=9L&4 z>t_}hm!|3(8<-jEmlP#t=4Ixk>u03q6zC>r7A5DTrsx%yrRy_HQ2`}JPgg&ebxsLQ E08f|{ga7~l diff --git a/useful/stg4cloner/squash.sh b/useful/stg4cloner/squash.sh deleted file mode 100755 index 72965df3..00000000 --- a/useful/stg4cloner/squash.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -caminho=$(pwd) -if [ $1 == "1" ]; then - PKG_OK=$(dpkg-query -W --showformat='${Status}\n' squashfs-tools|grep "install ok installed") - echo Checking for squashfs-tools: $PKG_OK - if [ "" == "$PKG_OK" ]; then - echo "No squashfs-tools. Setting up squashfs-tools. Install it?(y/n)" - sudo apt-get --force-yes --yes install squashfs-tools - fi -else - #echo cd $5 - if mksquashfs "$2" "$3" -b 1M ; then - mv "$3" "$5" - if [ $4 == "1" ]; then - echo Confirme se você quer realmente excluir a pasta $2 . Essa ação é irreversível! Digite s para sim, ou n para não. - read conf - if [ $conf == "s" ]; then - rm -rf "$2" - fi - fi - cd "$caminho" - #echo Caminho novo - #pwd - echo s > .result.out - #echo Escreveu - #cat .result.out - echo "Sucesso ao compactar" - else - cd "$caminho" - #echo Caminho novo - #pwd - echo n > .result.out - #echo Escreveu - #cat .result.out - echo "Falha ao compactar." - fi -fi diff --git a/useful/stg4cloner/stage4_cloner b/useful/stg4cloner/stage4_cloner deleted file mode 100755 index aff548ae809799cce98c035f544ae2647725eeb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36719 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 Jg!qzt1^}xR$|3*& diff --git a/useful/stg4cloner/stage4_cloner.c b/useful/stg4cloner/stage4_cloner.c deleted file mode 100644 index bdc92c89..00000000 --- a/useful/stg4cloner/stage4_cloner.c +++ /dev/null @@ -1,508 +0,0 @@ - - -#include <gtk/gtk.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/wait.h> - -// Estrutura para passar os dados de uma tela para outra. -typedef struct dados{ - struct GtkWidget *dado1; - struct GtkWidget *dado2; - struct GtkWidget *dado3; - struct GtkWidget *dado4; - struct GtkWidget *dado5; - struct GtkWidget *dado6; - }dados; - -// Função para sair do programa. -void sair(GtkWidget *w, gpointer p){ - - gtk_main_quit(); - -} - -// Insere o padding na grid, left e right é a célula que o padding será colocado. width é a largura do padding e height é a altura do padding -GtkWidget *insert_padding(GtkWidget *grid, int left, int right, int width, int height){ - - GtkWidget *padding; - - padding = gtk_label_new(NULL); - gtk_widget_set_size_request(GTK_WIDGET(padding), width, height); - gtk_grid_attach(GTK_GRID(grid), padding, left, right,1,1); - gtk_widget_show(padding); - return padding; -} - -// Função que checa se os scripts foram rodados com sucesso. Ela é utilizada tanto na tela 2 quanto na tela 3. -void checa_sucesso(){ - - - FILE *resultado; // Arquivo utilizado para ler o resultado do script. - char controle; - - GtkWidget *dialogo; - GtkDialogFlags flags = GTK_DIALOG_MODAL; - GtkMessageType type = GTK_MESSAGE_ERROR; - GtkButtonsType button = GTK_BUTTONS_OK; - - //controle = (char*) malloc(5*sizeof(char)); - - - resultado = fopen(".result.out", "r"); // .result.out é o arquivo que armazena se o script foi executado corretamente ou não - - if(resultado != NULL){ - fread(&controle, sizeof(char), 1, resultado); - //printf("Controle = %c\n", controle); - if(controle == 'n'){ //Caso o script não tenha sido executado com sucesso o programa informa o usuário por meio de uma janela de dialogo do GTK - dialogo = gtk_message_dialog_new(NULL, flags, type, button, "Algum dos passos do processo não foi completado com sucesso.\nCheque o terminal para descobrir onde aconteceu o erro.\nO programa irá sair agora."); - gtk_dialog_run(GTK_DIALOG(dialogo)); - gtk_widget_destroy(dialogo); - system("rm .result.out"); // Remove o arquivo após a verificação para não dar conflito com o segundo script e execuções futuras do programa - gtk_main_quit(); - exit(1); - }else{ - system("rm .result.out"); // Remove o arquivo para não dar conflito com o segundo script e execuções futuras do programa, mesmo se o script foi rodado com sucesso. - } - }else{ //Se o arquivo não existir algo de errado aconteceu na execução do programa, como por exemplo o usuário não informou nenhum campo na segunda tela. - puts("Arquivo não encontrado, erro crítico. Saíndo do programa."); - gtk_main_quit(); - exit(1); - } -} - -// Acha o caminho para o tm-scripts -char *acha_tm_scripts(){ - - char *cam_tm_scripts; - char *first_p; - char path[1024]; - - getcwd(path, sizeof(path)); - - cam_tm_scripts = strstr(path, "tm-scripts"); - first_p = strchr(cam_tm_scripts, 'p'); - first_p += 3; - *first_p = '\0'; - - return path; -} - - - -// Tela de ajuda ao usuário -void help_screen(GtkWidget *w, gpointer p){ - GtkWidget *dialogo, *janela_ant; - GtkDialogFlags flags = GTK_DIALOG_MODAL; - GtkMessageType type = GTK_MESSAGE_INFO; - GtkButtonsType button = GTK_BUTTONS_OK; - - dados *data_ant = p; - janela_ant = (GtkWidget*) data_ant->dado1; - - dialogo = gtk_message_dialog_new(GTK_WINDOW(janela_ant), flags, type, button, "O que fazer:\n1ª tela: O programa vai checar se o pacote necessário está instalado. Clique em continuar\n2ª tela: Informe os dados pedidos. O programa vai utilizar eles para clonar o stage 4.\n3ª tela: O programa irá compactar o clone gerado. Marque a opção para remover somente se tiver certeza que quer remover (O sistema pedirá uma confirmação além dessa), se quiser recuperar terá que gerar outra imagem igual.\n4ª tela: Tela final! Clique em finalizar para terminar o programa."); - gtk_dialog_run(GTK_DIALOG(dialogo)); - gtk_widget_destroy(dialogo); - - -} - -// A função que exibe a quarta tela do programa, a tela final -void clique_3a_tela(GtkWidget *w,gpointer p){ - - pid_t pid; - GtkWidget *janela, *label_info, *janela_ant, *finalizar, *tabela_de_componentes, *quadro; - - dados *data_ant = p; - janela_ant = (GtkWidget*) data_ant->dado1; - int status; - - janela = gtk_window_new(GTK_WINDOW_TOPLEVEL); - g_signal_connect(janela, "destroy", G_CALLBACK(sair), NULL); - - pid = fork(); - - - if(pid == 0){ // Executa o script de compactação do stage4. Ver squash.sh para mais detalhes - - char *version, *local, *pasta_do_stg4; - version = malloc(255*sizeof(char)); - local = malloc(255*sizeof(char)); - pasta_do_stg4 = malloc(255*sizeof(char)); - - strcpy(pasta_do_stg4, "/root/tm-scripts/stage4"); - - strcpy(version, gtk_entry_get_text(GTK_ENTRY(data_ant->dado3))); - strcat(version, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4))); - - //strcpy(local, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado2))); - strcpy(local, pasta_do_stg4); - strcat(local, "/pasta-"); - strcat(local, version); - - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data_ant->dado5))){ - execlp("./squash.sh", "./squash.sh", "0", local, version, "1",pasta_do_stg4, NULL);// se o usuário decidiu remover os arquivos não compactados - }else{ - execlp("./squash.sh", "./squash.sh", "0", local, version, "0",pasta_do_stg4, NULL);// Se o usuário decidiu não remover os arquivos compactados - } - perror("O comando não foi executado corretamente. Erro: Saindo do programa. "); // Caso ocorra algum erro com o execlp. - - gtk_main_quit(); - exit(1); - }else{ - waitpid(pid, &status, 0); // Espera o script terminar de rodar - - checa_sucesso(); //Checa se o script foi executado corretamente - - gtk_window_set_title(GTK_WINDOW(janela), "Passo 4 de 4"); - gtk_window_set_position(GTK_WINDOW(janela), GTK_WIN_POS_CENTER); - gtk_window_set_resizable(GTK_WINDOW(janela), FALSE); - gtk_widget_set_size_request(GTK_WIDGET(janela), 540, 120); - - struct dados *data = malloc(sizeof(*data)); - data->dado1 = janela; - - finalizar = gtk_button_new_with_label("Finalizar"); - gtk_widget_set_size_request(GTK_WIDGET(finalizar), 90, 50); - g_signal_connect(finalizar, "clicked", G_CALLBACK(sair), data); - - - - label_info = gtk_label_new("Não se esqueça de colocar a imagem no servidor dnbd3,\ngerar o crc com ./dnbd3-server --crc /path/imagem\ne resetar o servidor com killall -USR1 dndb3-server"); - gtk_label_set_line_wrap(GTK_LABEL(label_info), TRUE); - - quadro = gtk_frame_new("Pronto!"); - gtk_container_add(GTK_CONTAINER(quadro), label_info); - - /* Inicio código antigo - tabela_de_componentes = gtk_table_new(100,100,FALSE); - gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes); - - //gtk_table_attach (GtkTable *table,GtkWidget *child,guint left_attach,guint right_attach,guint top_attach,guint bottom_attach,GtkAttachOptions xoptions,GtkAttachOptions yoptions,guint xpadding,guint ypadding); - gtk_table_attach(GTK_TABLE(tabela_de_componentes), quadro, 0,1,0,2, GTK_FILL,GTK_FILL, 5, 10); - gtk_table_attach(GTK_TABLE(tabela_de_componentes), finalizar, 1,2,1,2, 0,0, 40, 0); - fim codigo antigo */ - - tabela_de_componentes = gtk_grid_new(); - gtk_grid_set_row_homogeneous(GTK_GRID(tabela_de_componentes), FALSE); - gtk_grid_set_column_homogeneous(GTK_GRID(tabela_de_componentes), FALSE); - gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes); - gtk_widget_set_hexpand(GTK_WIDGET(tabela_de_componentes), FALSE); - gtk_widget_set_vexpand(GTK_WIDGET(tabela_de_componentes), FALSE); - - insert_padding(tabela_de_componentes, 0,0,10,10); - gtk_grid_attach(GTK_GRID(tabela_de_componentes),quadro, 1,1,3,1); - //gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), check_button, insert_padding(tabela_de_componentes, 4, 1, 70, 1), GTK_POS_RIGHT,1,1); - gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), finalizar, insert_padding(tabela_de_componentes, 1, 2, 1, 10), GTK_POS_BOTTOM,10,1); - - gtk_widget_hide(janela_ant); - gtk_widget_show(tabela_de_componentes); - gtk_widget_show(finalizar); - gtk_widget_show(label_info); - gtk_widget_show(quadro); - gtk_widget_show(janela); - } -} - -// Função que exibe a terceira tela, pedindo para o usuário compactar o stage4 e perguntando se ele quer remover a imagem não compactada -void clique_2a_tela(GtkWidget *w,gpointer p){ - - pid_t pid; - GtkWidget *janela, *label_info, *janela_ant, *compactar,*tabela_de_componentes,*check_button, *quadro; - - dados *data_ant = p; - janela_ant = (GtkWidget*) data_ant->dado1; - int status; - - janela = gtk_window_new(GTK_WINDOW_TOPLEVEL); - g_signal_connect(janela, "destroy", G_CALLBACK(sair), NULL); - - pid = fork(); - - if(pid == 0){ // Executa a clonagem do stage4. Ver script clone_stage4.sh para mais detalhes - char *version, *home, *tmscripts, *pasta_do_stg4; - version = malloc(255*sizeof(char)); - pasta_do_stg4 = malloc(255*sizeof(char)); - home = malloc(255*sizeof(char)); - tmscripts = malloc(255*sizeof(char)); - - strcpy(pasta_do_stg4, "/root/tm-scripts/stage4"); - - tmscripts = acha_tm_scripts(); - strcat(tmscripts, "/scripts"); - puts(tmscripts); - // scanf("%s", version); - - strcpy(version, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4))); - strcat(version, gtk_entry_get_text(GTK_ENTRY(data_ant->dado5))); - - //strcpy(home, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado3))); - strcpy(home, pasta_do_stg4); - strcat(home, "/pasta-"); - strcat(home, version); - - - execlp("./clone_stage4.sh", "./clone_stage4.sh",tmscripts,pasta_do_stg4,"local",home, NULL);//, environ); - - perror("O comando não foi executado corretamente. Erro: Saindo do programa. "); // Caso ocorra algum erro com o execlp. - - gtk_main_quit(); - exit(1); - }else{ - waitpid(pid, &status, 0); // Espera o script completar a execução - - checa_sucesso(); // Checa se o script foi executado corretamente - - gtk_window_set_title(GTK_WINDOW(janela), "Passo 3 de 4"); - gtk_window_set_position(GTK_WINDOW(janela), GTK_WIN_POS_CENTER); - gtk_window_set_resizable(GTK_WINDOW(janela), FALSE); - gtk_widget_set_size_request(GTK_WIDGET(janela), 470, 200); - - - check_button = gtk_check_button_new_with_label("Remover imagem\n descompactada?"); - gtk_widget_set_halign(GTK_WIDGET(check_button), GTK_ALIGN_START); - gtk_widget_set_valign(GTK_WIDGET(check_button), GTK_ALIGN_START); - - struct dados *data = malloc(sizeof(*data)); - data->dado1 = janela; - data->dado2 = data_ant->dado3; - data->dado3 = data_ant->dado4; - data->dado4 = data_ant->dado5; - data->dado5 = check_button; - - - compactar = gtk_button_new_with_label("Compactar!"); - gtk_widget_set_size_request(GTK_WIDGET(compactar), 300, 50); - g_signal_connect(compactar, "clicked", G_CALLBACK(clique_3a_tela), data); - gtk_widget_set_halign(GTK_WIDGET(compactar), GTK_ALIGN_START); - gtk_widget_set_valign(GTK_WIDGET(compactar), GTK_ALIGN_START); - - label_info = gtk_label_new("Clonagem bem sucedida!\nAgora falta compactar a imagem clonada!\nPara isso clique no botão abaixo.\nCaso queira remover a imagem não compactada\n marque a caixa ao lado do botão."); - gtk_label_set_line_wrap(GTK_LABEL(label_info), TRUE); - - quadro = gtk_frame_new("Sucesso!"); - gtk_container_add(GTK_CONTAINER(quadro), label_info); - gtk_widget_set_halign(GTK_WIDGET(quadro), GTK_ALIGN_START); - gtk_widget_set_valign(GTK_WIDGET(quadro), GTK_ALIGN_START); - - /*Inicio da versao outdated - tabela_de_componentes = gtk_table_new(100,100,FALSE); - gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes); - - //gtk_table_attach (GtkTable *table,GtkWidget *child,guint left_attach,guint right_attach,guint top_attach,guint bottom_attach,GtkAttachOptions xoptions,GtkAttachOptions yoptions,guint xpadding,guint ypadding); - gtk_table_attach(GTK_TABLE(tabela_de_componentes), quadro, 0,1,0,3, 0,0, 20, 20); - gtk_table_attach(GTK_TABLE(tabela_de_componentes), check_button, 1,2,4,5, 0,0, 0, 50); - gtk_table_attach(GTK_TABLE(tabela_de_componentes), compactar, 0,1,4,5, 0,0, 0, 50); - fim da versao outdated */ - - tabela_de_componentes = gtk_grid_new(); - gtk_grid_set_row_homogeneous(GTK_GRID(tabela_de_componentes), FALSE); - gtk_grid_set_column_homogeneous(GTK_GRID(tabela_de_componentes), FALSE); - gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes); - gtk_widget_set_hexpand(GTK_WIDGET(tabela_de_componentes), FALSE); - gtk_widget_set_vexpand(GTK_WIDGET(tabela_de_componentes), FALSE); - - insert_padding(tabela_de_componentes, 0,0,10,20); - gtk_grid_attach(GTK_GRID(tabela_de_componentes),quadro, 1,1,3,1); - gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), compactar, insert_padding(tabela_de_componentes, 1, 2, 1, 30), GTK_POS_BOTTOM,1,1); - gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), check_button, compactar, GTK_POS_RIGHT,1,1); - - gtk_widget_hide(janela_ant); - gtk_widget_show(tabela_de_componentes); - gtk_widget_show(compactar); - gtk_widget_show(check_button); - gtk_widget_show(label_info); - gtk_widget_show(quadro); - gtk_widget_show(janela); - } -} - -// Função que exibe a segunda tela, pedindo os dados necessários ao usuário -void clique_1a_tela(GtkWidget *w,gpointer p){ - pid_t pid; - GtkWidget *janela, *janela_ant, *frame_pasta_compac; - GtkWidget *entry_imagem, *frame_imagem, *entry_versao, *frame_versao, *tabela_de_componentes, *clone; - - dados *data_ant = p; - janela_ant = (GtkWidget*) data_ant->dado1; - int status; - - janela = gtk_window_new(GTK_WINDOW_TOPLEVEL); - g_signal_connect(janela, "destroy", G_CALLBACK(sair), NULL); - - pid = fork(); - - if(pid == 0){ // Checa se a biblioteca squashfs-tools está instalada, senão instala - - execlp("./squash.sh", "./squash.sh", "1", NULL); // Executa o script - - perror("O comando não foi executado corretamente. Erro: Saindo do programa. "); // Caso ocorra algum erro com o execlp. - - gtk_main_quit(); - exit(1); - }else{ - waitpid(pid, &status, 0); // Espera a execução do script, esse não tem como gerar uma falha catastrófica, então a verificação não é necessária - - gtk_window_set_title(GTK_WINDOW(janela), "Passo 2 de 4"); - gtk_window_set_position(GTK_WINDOW(janela), GTK_WIN_POS_CENTER); - gtk_window_set_resizable(GTK_WINDOW(janela), FALSE); - gtk_widget_set_size_request(GTK_WIDGET(janela), 500, 150); - - entry_imagem = gtk_entry_new(); - entry_versao = gtk_entry_new(); - gtk_entry_set_text(GTK_ENTRY(entry_versao),".r1"); - - - //frame_pasta_compac = gtk_frame_new("Pasta aonde os arquivos serão colocados:"); - //gtk_container_add(GTK_CONTAINER(frame_pasta_compac), fileChooser_Compac); - frame_imagem = gtk_frame_new("Imagem a ser clonada:"); - gtk_container_add(GTK_CONTAINER(frame_imagem), entry_imagem); - gtk_widget_set_halign(GTK_WIDGET(frame_imagem), GTK_ALIGN_START); - gtk_widget_set_valign(GTK_WIDGET(frame_imagem), GTK_ALIGN_START); - frame_versao = gtk_frame_new("Versão:"); - gtk_container_add(GTK_CONTAINER(frame_versao), entry_versao); - // gtk_widget_set_size_request(GTK_WIDGET(frame_versao), 100, 20); - gtk_widget_set_halign(GTK_WIDGET(frame_versao), GTK_ALIGN_START); - gtk_widget_set_valign(GTK_WIDGET(frame_versao), GTK_ALIGN_START); - - struct dados *data = malloc(sizeof(*data)); - data->dado1 = janela; - data->dado4 = entry_imagem; - data->dado5 = entry_versao; - - clone = gtk_button_new_with_label("Clonar!"); - gtk_widget_set_size_request(GTK_WIDGET(clone), 500, 50); - g_signal_connect(clone, "clicked", G_CALLBACK(clique_2a_tela), data); - gtk_widget_set_halign(GTK_WIDGET(clone), GTK_ALIGN_START); - gtk_widget_set_valign(GTK_WIDGET(clone), GTK_ALIGN_CENTER); - - //g_signal_connect(help, "clicked", G_CALLBACK(help_screen), data); - - /* Inicio da versao outdated - tabela_de_componentes = gtk_table_new(100,100,FALSE); - gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes); - - //gtk_table_attach (GtkTable *table,GtkWidget *child,guint left_attach,guint right_attach,guint top_attach,guint bottom_attach,GtkAttachOptions xoptions,GtkAttachOptions yoptions,guint xpadding,guint ypadding); - //gtk_table_attach(GTK_TABLE(tabela_de_componentes), frame_pasta_compac, 0,4,3,4, GTK_FILL,GTK_FILL, 5, 10); - gtk_table_attach(GTK_TABLE(tabela_de_componentes), frame_imagem, 0,3,5,6, GTK_FILL,GTK_FILL, 5, 10); - gtk_table_attach(GTK_TABLE(tabela_de_componentes), frame_versao, 3,4,5,6, 0,GTK_FILL, 0, 10); - gtk_table_attach(GTK_TABLE(tabela_de_componentes), clone, 0,4,7,8, 0,0, 50, 50); - //gtk_table_attach(GTK_TABLE(tabela_de_componentes), help, 5,6,1,2, GTK_SHRINK,GTK_SHRINK, 40, 10); - fim da versão outdated*/ - - tabela_de_componentes = gtk_grid_new(); - gtk_grid_set_row_homogeneous(GTK_GRID(tabela_de_componentes), FALSE); - gtk_grid_set_column_homogeneous(GTK_GRID(tabela_de_componentes), FALSE); - gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes); - gtk_widget_set_hexpand(GTK_WIDGET(tabela_de_componentes), FALSE); - gtk_widget_set_vexpand(GTK_WIDGET(tabela_de_componentes), FALSE); - - insert_padding(tabela_de_componentes, 0,0,10,20); - gtk_grid_attach(GTK_GRID(tabela_de_componentes),frame_imagem, 1,1,3,1); - gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), frame_versao, insert_padding(tabela_de_componentes, 4, 1, 70, 1), GTK_POS_RIGHT,1,1); - gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), clone, insert_padding(tabela_de_componentes, 1, 2, 1, 20), GTK_POS_BOTTOM,10,1); - - gtk_widget_hide(janela_ant); - gtk_widget_show(tabela_de_componentes); - gtk_widget_show(entry_imagem); - gtk_widget_show(entry_versao); - //gtk_widget_show(fileChooser_Compac); - gtk_widget_show(clone); - //gtk_widget_show(frame_pasta_compac); - gtk_widget_show(frame_imagem); - gtk_widget_show(frame_versao); - gtk_widget_show(janela); - } -} - -// Main e função que exibe a primeira tela, informando o usuário que ele iniciou o programa -int main(int argc, char *argv[]){ - - GtkWidget *janela, *texto_principal, *tabela_de_componentes, *quadro, *help, *iconH, *continuar; - - gtk_init(&argc, &argv); //Inicia o GTK - - janela = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(janela), "Stage 4 - Clonador automático"); - gtk_window_set_position(GTK_WINDOW(janela), GTK_WIN_POS_CENTER); - gtk_window_set_resizable(GTK_WINDOW(janela), FALSE); - gtk_widget_set_size_request(GTK_WIDGET(janela), 500, 200); - //gtk_signal_connect(GTK_OBJECT(janela), "destroy", GTK_SIGNAL_FUNC(sair),(gpointer) &janela); - g_signal_connect(janela, "destroy", G_CALLBACK(sair), NULL); - - - texto_principal = gtk_label_new("Bem vindo ao clonador automático do stage 4! \nPara continuar clique no botão abaixo\nou se tem dúvidas sobre essa aplicação\nclique no botão de ajuda ao lado!"); - gtk_label_set_line_wrap(GTK_LABEL(texto_principal), TRUE); - - iconH = gtk_image_new_from_file("pic.png"); - - help = gtk_button_new(); - gtk_button_set_image(GTK_BUTTON(help),iconH); - gtk_widget_set_halign(GTK_WIDGET(help), GTK_ALIGN_START); - gtk_widget_set_valign(GTK_WIDGET(help), GTK_ALIGN_CENTER); - - continuar = gtk_button_new_with_label("Continuar"); - gtk_widget_set_size_request(GTK_WIDGET(continuar), 400, 50); - gtk_widget_set_halign(GTK_WIDGET(continuar), GTK_ALIGN_START); - gtk_widget_set_valign(GTK_WIDGET(continuar), GTK_ALIGN_CENTER); - - quadro = gtk_frame_new("Welcome!"); - gtk_container_add(GTK_CONTAINER(quadro), texto_principal); - gtk_widget_set_halign(GTK_WIDGET(quadro), GTK_ALIGN_START); - gtk_widget_set_valign(GTK_WIDGET(quadro), GTK_ALIGN_START); - - //VERSAO ANTIGA COM TABLE - //tabela_de_componentes = gtk_table_new(100,100,FALSE); - //gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes); - - //gtk_table_attach(GTK_TABLE(tabela_de_componentes), help, 4,5,0,1, 0,0, 25, 5); - //gtk_table_attach(GTK_TABLE(tabela_de_componentes), continuar, 0,1,2,3, 0,0, 20,50); - //gtk_table_attach(GTK_TABLE(tabela_de_componentes), quadro, 0,1,0,1, GTK_FILL,GTK_FILL, 40, 20); - //FIM VERSAO ANTIGA - - tabela_de_componentes = gtk_grid_new(); - gtk_grid_set_row_homogeneous(GTK_GRID(tabela_de_componentes), FALSE); - gtk_grid_set_column_homogeneous(GTK_GRID(tabela_de_componentes), FALSE); - //gtk_grid_set_column_spacing (GTK_GRID(tabela_de_componentes), 10); - //gtk_grid_set_row_spacing (GTK_GRID(tabela_de_componentes), 10); - gtk_container_add(GTK_CONTAINER(janela), tabela_de_componentes); - gtk_widget_set_hexpand(GTK_WIDGET(tabela_de_componentes), FALSE); - gtk_widget_set_vexpand(GTK_WIDGET(tabela_de_componentes), FALSE); - - - //void gtk_grid_attach_next_to (GtkGrid *self,GtkWidget* child,GtkWidget* sibling,GtkPositionType side,gint width,gint height); - //void gtk_grid_attach (GtkGrid *grid, GtkWidget *child, gint left, gint top, gint width, gint height); - insert_padding(tabela_de_componentes, 0,0,10,20); - insert_padding(tabela_de_componentes, 1,0,10,20); - insert_padding(tabela_de_componentes, 0,1,10,20); - gtk_grid_attach(GTK_GRID(tabela_de_componentes), quadro, 1,1,1,1); - gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), help, insert_padding(tabela_de_componentes, 2, 1, 30, 1), GTK_POS_RIGHT,1,1); - //insert_padding(tabela_de_componentes, 1, 3, 30, 30); - gtk_grid_attach_next_to(GTK_GRID(tabela_de_componentes), continuar, insert_padding(tabela_de_componentes, 1, 2, 1, 30), GTK_POS_BOTTOM,1,1); - //gtk_grid_attach(GTK_GRID(tabela_de_componentes), continuar, 0,10,1,1); - //insert_padding(tabela_de_componentes, 0, 6, 5, 5); - //insert_padding(tabela_de_componentes, 0, 5, 70, 70); - - - - - struct dados *data = malloc(sizeof(*data)); - data->dado1 = janela; - - g_signal_connect(help, "clicked", G_CALLBACK(help_screen), data); - - g_signal_connect(continuar, "clicked", G_CALLBACK(clique_1a_tela), data); - - - - gtk_widget_show(texto_principal); - gtk_widget_show(help); - gtk_widget_show(continuar); - gtk_widget_show(quadro); - gtk_widget_show(tabela_de_componentes); - gtk_widget_show(janela); - - gtk_main(); - return 0; -} -- GitLab