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
+}