diff --git a/.gitignore b/.gitignore index cd5905fdc1a97a47a32df9c2fc9b6237401811b9..f355734436c886675083f9db848b915653bbc43a 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 ef0af295869aa9ee14d01942ebaeef96a40d8901..d20b3065e778664849d7942bc3ce00fc40a7a53e 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 980a992b05b4881f409f75c259cb463c0c589887..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 386966be89c25608f5bcddee039b0357197b6905..be912afe7c64006e5209e25a8b61ac56302ffe82 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 Binary files a/useful/stg312/openslx_gui and b/useful/stg312/openslx_gui differ diff --git a/useful/stg312/openslx_gui.c b/useful/stg312/openslx_gui.c index d495fe2f639281fda2b9b6887b19b9128a2e6d8f..a9dfc385f89da08bad5b858461ad6f1362333a54 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 8362023155115074a1459af3b07f85907dee2ef3..f7fcee3783c100df18c8389cfac4c783fd050afe 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 0000000000000000000000000000000000000000..d80fb82438def4bdce876e0ff2fecd8ac1366e59 --- /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 0000000000000000000000000000000000000000..f021d4813501fa1d1649fe0b206505d858504635 --- /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 de58e0c818d403d9487856e988d10cb37fd35626..3860c8ef1618245e691583ff0ed0c092128e7a8f 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 5bd26252b873b9adc8a4f09c284ed5c1dbf9c502..5a536f30f23b73e200414ee487078091f6468371 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 9a5ab8945ed3e3d51f08cc74ff96b6cb6d4106e3..0d2cb2a978352e0623e1ea9a0947fae39d13a002 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 7c993d689fdb1d267959ab70806a2b759a248c66..0000000000000000000000000000000000000000 --- 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 19f42e4decf2997ffea6f32c3dbe43e09e3bd24d..0000000000000000000000000000000000000000 --- 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 Binary files a/useful/stg4cloner/pic.png and /dev/null differ diff --git a/useful/stg4cloner/squash.sh b/useful/stg4cloner/squash.sh deleted file mode 100755 index 72965df345165137cd9e8a4eeddf6175b6641d7d..0000000000000000000000000000000000000000 --- 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 Binary files a/useful/stg4cloner/stage4_cloner and /dev/null differ diff --git a/useful/stg4cloner/stage4_cloner.c b/useful/stg4cloner/stage4_cloner.c deleted file mode 100644 index bdc92c896300ec0f94393683fea91deccd68fc3b..0000000000000000000000000000000000000000 --- 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; -}