← pagan-scripts

Commit ad8b6cb

0
plików
+0
dodanych
-0
usuniętych
@@ -0,0 +1,124 @@
1 +#include <gtk/gtk.h>
2 +#include <stdlib.h>
3 +#include <stdio.h>
4 +#include <string.h>
5 +#include <locale.h>
6 +#include <glib/gi18n.h> // Wymagane dla _()
7 +
8 +// Definicja domeny dla gettext
9 +#define GETTEXT_PACKAGE "pagan-installer"
10 +#define LOCALEDIR "/usr/share/locale"
11 +
12 +typedef struct {
13 + GtkWidget *combo_disk;
14 + GtkWidget *entry_user;
15 + GtkWidget *entry_pass;
16 + GtkWidget *label_status;
17 + GtkWidget *btn_install;
18 +} InstallerApp;
19 +
20 +static void populate_disks(GtkComboBoxText *combo) {
21 + FILE *fp = popen("lsblk -d -n -o NAME,SIZE,MODEL | grep -v 'loop\\|sr'", "r");
22 + if (!fp) return;
23 +
24 + char line[256];
25 + while (fgets(line, sizeof(line), fp)) {
26 + line[strcspn(line, "\n")] = 0;
27 + gtk_combo_box_text_append_text(combo, line);
28 + }
29 + pclose(fp);
30 + gtk_combo_box_set_active(combo, 0);
31 +}
32 +
33 +static void on_install_clicked(GtkButton *btn, gpointer user_data) {
34 + InstallerApp *app = (InstallerApp *)user_data;
35 +
36 + gchar *disk_info = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(app->combo_disk));
37 + const gchar *username = gtk_entry_get_text(GTK_ENTRY(app->entry_user));
38 + const gchar *password = gtk_entry_get_text(GTK_ENTRY(app->entry_pass));
39 +
40 + if (!disk_info || strlen(username) == 0 || strlen(password) == 0) {
41 + // Tłumaczony komunikat błędu
42 + gtk_label_set_text(GTK_LABEL(app->label_status), _("Error: Fill in all fields!"));
43 + if (disk_info) g_free(disk_info);
44 + return;
45 + }
46 +
47 + char disk[32];
48 + sscanf(disk_info, "%31s", disk);
49 + g_free(disk_info);
50 +
51 + // Tłumaczony status
52 + gtk_label_set_text(GTK_LABEL(app->label_status), _("Installation in progress... Please wait."));
53 + gtk_widget_set_sensitive(app->btn_install, FALSE);
54 +
55 + char cmd[512];
56 + snprintf(cmd, sizeof(cmd), "/usr/bin/pagan-install /dev/%s '%s' '%s'", disk, username, password);
57 +
58 + int ret = system(cmd);
59 +
60 + if (ret == 0) {
61 + gtk_label_set_text(GTK_LABEL(app->label_status), _("Installation completed successfully!"));
62 + } else {
63 + gtk_label_set_text(GTK_LABEL(app->label_status), _("Error during installation!"));
64 + gtk_widget_set_sensitive(app->btn_install, TRUE);
65 + }
66 +}
67 +
68 +int main(int argc, char *argv[]) {
69 + // 1. Inicjalizacja wielojęzyczności (gettext)
70 + setlocale(LC_ALL, "");
71 + bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
72 + bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
73 + textdomain(GETTEXT_PACKAGE);
74 +
75 + // 2. Inicjalizacja GTK
76 + gtk_init(&argc, &argv);
77 +
78 + InstallerApp app;
79 +
80 + GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
81 + // Tłumaczony tytuł okna
82 + gtk_window_set_title(GTK_WINDOW(window), _("PaganOS Installer"));
83 + gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
84 + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
85 + g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
86 +
87 + GtkWidget *grid = gtk_grid_new();
88 + gtk_grid_set_row_spacing(GTK_GRID(grid), 12);
89 + gtk_grid_set_column_spacing(GTK_GRID(grid), 12);
90 + gtk_container_set_border_width(GTK_CONTAINER(grid), 20);
91 + gtk_container_add(GTK_CONTAINER(window), grid);
92 +
93 + GtkWidget *lbl_disk = gtk_label_new(_("Select target disk:"));
94 + gtk_widget_set_halign(lbl_disk, GTK_ALIGN_START);
95 + app.combo_disk = gtk_combo_box_text_new();
96 + populate_disks(GTK_COMBO_BOX_TEXT(app.combo_disk));
97 +
98 + GtkWidget *lbl_user = gtk_label_new(_("Username:"));
99 + gtk_widget_set_halign(lbl_user, GTK_ALIGN_START);
100 + app.entry_user = gtk_entry_new();
101 +
102 + GtkWidget *lbl_pass = gtk_label_new(_("Password:"));
103 + gtk_widget_set_halign(lbl_pass, GTK_ALIGN_START);
104 + app.entry_pass = gtk_entry_new();
105 + gtk_entry_set_visibility(GTK_ENTRY(app.entry_pass), FALSE);
106 +
107 + app.label_status = gtk_label_new(_("Ready to install."));
108 + app.btn_install = gtk_button_new_with_label(_("Install system"));
109 + g_signal_connect(app.btn_install, "clicked", G_CALLBACK(on_install_clicked), &app);
110 +
111 + gtk_grid_attach(GTK_GRID(grid), lbl_disk, 0, 0, 1, 1);
112 + gtk_grid_attach(GTK_GRID(grid), app.combo_disk, 0, 1, 1, 1);
113 + gtk_grid_attach(GTK_GRID(grid), lbl_user, 0, 2, 1, 1);
114 + gtk_grid_attach(GTK_GRID(grid), app.entry_user, 0, 3, 1, 1);
115 + gtk_grid_attach(GTK_GRID(grid), lbl_pass, 0, 4, 1, 1);
116 + gtk_grid_attach(GTK_GRID(grid), app.entry_pass, 0, 5, 1, 1);
117 + gtk_grid_attach(GTK_GRID(grid), app.btn_install, 0, 6, 1, 1);
118 + gtk_grid_attach(GTK_GRID(grid), app.label_status, 0, 7, 1, 1);
119 +
120 + gtk_widget_show_all(window);
121 + gtk_main();
122 +
123 + return 0;
124 +}