|
30 | 30 | #include "aes.h" |
31 | 31 | #include "sha1.h" |
32 | 32 |
|
| 33 | +#include <gtk/gtk.h> |
33 | 34 | #include <cdecrypt/cdecrypt.h> |
34 | 35 |
|
35 | 36 | #define MAX_ENTRIES 90000 |
@@ -157,6 +158,34 @@ struct FEntry |
157 | 158 | uint16_t ContentID; |
158 | 159 | }; |
159 | 160 |
|
| 161 | +static GtkWidget *progress_bar; |
| 162 | +static GtkWidget *window; |
| 163 | + |
| 164 | +static char currentFile[255] = "None"; |
| 165 | + |
| 166 | +static void progressDialog() { |
| 167 | + gtk_init(NULL, NULL); |
| 168 | + |
| 169 | + //Create window |
| 170 | + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
| 171 | + gtk_window_set_title(GTK_WINDOW(window), "Download Progress"); |
| 172 | + gtk_window_set_default_size(GTK_WINDOW(window), 300, 50); |
| 173 | + gtk_container_set_border_width(GTK_CONTAINER(window), 10); |
| 174 | + gtk_window_set_modal(GTK_WINDOW(window), TRUE); |
| 175 | + |
| 176 | + //Create progress bar |
| 177 | + progress_bar = gtk_progress_bar_new(); |
| 178 | + gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(progress_bar), TRUE); |
| 179 | + gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress_bar), "Downloading"); |
| 180 | + |
| 181 | + //Create container for the window |
| 182 | + GtkWidget *main_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); |
| 183 | + gtk_container_add(GTK_CONTAINER(window), main_box); |
| 184 | + gtk_box_pack_start(GTK_BOX(main_box), progress_bar, FALSE, FALSE, 0); |
| 185 | + |
| 186 | + gtk_widget_show_all(window); |
| 187 | +} |
| 188 | + |
160 | 189 | static bool file_dump(const char* path, void* buf, size_t len) |
161 | 190 | { |
162 | 191 | assert(buf != NULL); |
@@ -513,7 +542,13 @@ int cdecrypt(int argc, char** argv) |
513 | 542 |
|
514 | 543 | uint32_t level = 0; |
515 | 544 |
|
| 545 | + progressDialog(); |
516 | 546 | for (uint32_t i = 1; i < entries; i++) { |
| 547 | + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progress_bar), (double)i / (double)entries); |
| 548 | + gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress_bar), "Decrypting..."); |
| 549 | + // force redraw |
| 550 | + while (gtk_events_pending()) |
| 551 | + gtk_main_iteration(); |
517 | 552 | if (level > 0) { |
518 | 553 | while ((level >= 1) && (l_entry[level - 1] == i)) |
519 | 554 | level--; |
@@ -578,6 +613,7 @@ int cdecrypt(int argc, char** argv) |
578 | 613 | r = EXIT_SUCCESS; |
579 | 614 |
|
580 | 615 | out: |
| 616 | + gtk_widget_destroy(GTK_WIDGET(window)); |
581 | 617 | free(tmd); |
582 | 618 | free(tik); |
583 | 619 | free(cnt); |
|
0 commit comments