]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - LinuxGUI/Ventoy2Disk/main_gtk.c
Fix a bug when install Ventoy if the USB already mounted at a path that contains...
[Ventoy.git] / LinuxGUI / Ventoy2Disk / main_gtk.c
index 5560991906d281d6db24cf97a430d93bb1d5b5b9..a2b96aa5d055fda0675c1ad33a81d842926a8d9b 100644 (file)
@@ -8,10 +8,17 @@
 #include <errno.h>
 #include <time.h>
 #include <unistd.h>\r
+#include <sys/types.h>\r
+#include <sys/stat.h>\r
+#include <linux/limits.h>\r
 #include <ventoy_define.h>
 #include <ventoy_util.h>\r
 #include "ventoy_gtk.h"\r
 \r
+static int g_kiosk_mode = 0;\r
+char g_log_file[PATH_MAX];\r
+char g_ini_file[PATH_MAX];\r
+\r
 static int set_image_from_pixbuf(GtkBuilder *pBuilder, const char *id, const void *pData, int len)\r
 {\r
     GtkImage *pImage = NULL;\r
@@ -51,13 +58,58 @@ int early_msgbox(GtkMessageType type, GtkButtonsType buttons, const char *str)
     return ret;\r
 }\r
 \r
+static int adjust_cur_dir(char *argv0)\r
+{\r
+    int ret = 2;\r
+    char c;\r
+    char *pos = NULL;\r
+    char *end = NULL;\r
+\r
+    if (argv0[0] == '.')\r
+    {\r
+        return 1;\r
+    }\r
+\r
+    for (pos = argv0; pos && *pos; pos++)\r
+    {\r
+        if (*pos == '/')\r
+        {\r
+            end = pos;\r
+        }\r
+    }\r
+\r
+    if (end)\r
+    {\r
+        c = *end;\r
+        *end = 0;\r
+\r
+        pos = strstr(argv0, "/tool/");\r
+        if (pos)\r
+        {\r
+            *pos = 0;\r
+        }\r
+        \r
+        ret = chdir(argv0);\r
+        \r
+        *end = c;\r
+        if (pos)\r
+        {\r
+            *pos = '/';\r
+        }\r
+    }\r
+\r
+    return ret;\r
+}\r
+\r
 int main(int argc, char *argv[])\r
 {\r
+    int i;\r
     int len;\r
     const void *pData = NULL;\r
     GtkWidget *pWidget = NULL;\r
     GtkBuilder *pBuilder = NULL;\r
     GError *error = NULL;\r
+    struct stat logstat;\r
 \r
     gtk_init(&argc, &argv);\r
     \r
@@ -68,17 +120,56 @@ int main(int argc, char *argv[])
         return EACCES;\r
     }\r
 \r
+    if (access("./boot/boot.img", F_OK) == -1)\r
+    {\r
+        adjust_cur_dir(argv[0]);        \r
+    }\r
+\r
     if (access("./boot/boot.img", F_OK) == -1)\r
     {\r
         early_msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Please run under the correct directory.");\r
         return 1;\r
     }\r
 \r
+    for (i = 0; i < argc; i++)\r
+    {\r
+        if (argv[i] && strcmp(argv[i], "--kiosk") == 0)\r
+        {\r
+            g_kiosk_mode = 1;\r
+            break;\r
+        }\r
+    }\r
+    \r
+    snprintf(g_log_file, sizeof(g_log_file), "log.txt");\r
+    snprintf(g_ini_file, sizeof(g_ini_file), "./Ventoy2Disk.ini");\r
+    for (i = 0; i < argc; i++)
+    {
+        if (argv[i] && argv[i + 1] && strcmp(argv[i], "-l") == 0)
+        {
+            snprintf(g_log_file, sizeof(g_log_file), "%s", argv[i + 1]);\r
+        }
+        else if (argv[i] && argv[i + 1] &&  strcmp(argv[i], "-i") == 0)
+        {
+            snprintf(g_ini_file, sizeof(g_ini_file), "%s", argv[i + 1]);\r
+        }
+    }\r
+\r
+    memset(&logstat, 0, sizeof(logstat));\r
+    if (0 == stat(g_log_file, &logstat))\r
+    {\r
+        if (logstat.st_size >= 4 * SIZE_1MB)\r
+        {\r
+            remove(g_log_file);\r
+        }\r
+    }\r
+\r
     ventoy_log_init();\r
 \r
     vlog("================================================\n");\r
     vlog("===== Ventoy2Disk %s powered by GTK%d.x =====\n", ventoy_get_local_version(), GTK_MAJOR_VERSION);\r
     vlog("================================================\n");\r
+    vlog("log file is <%s> lastsize:%lld\n", g_log_file, (long long)logstat.st_size);\r
+    vlog("ini file is <%s>\n", g_ini_file);\r
 \r
     ventoy_disk_init();\r
 
@@ -98,12 +189,20 @@ int main(int argc, char *argv[])
         return 1;\r
     }\r
 \r
-    pData = get_refresh_icon_raw_data(&len);\r
-    set_image_from_pixbuf(pBuilder, "image_refresh", pData, len);\r
-    \r
-    pData = get_secure_icon_raw_data(&len);\r
-    set_image_from_pixbuf(pBuilder, "image_secure_local", pData, len);\r
-    set_image_from_pixbuf(pBuilder, "image_secure_dev", pData, len);\r
+    if (g_kiosk_mode)\r
+    {\r
+        gtk_image_set_from_file((GtkImage *)gtk_builder_get_object(pBuilder, "image_refresh"), "/ventoy/refresh.png");        \r
+        gtk_image_set_from_file((GtkImage *)gtk_builder_get_object(pBuilder, "image_secure_local"), "/ventoy/secure.png");        \r
+        gtk_image_set_from_file((GtkImage *)gtk_builder_get_object(pBuilder, "image_secure_dev"), "/ventoy/secure.png");        \r
+    }\r
+    else\r
+    {\r
+        pData = get_refresh_icon_raw_data(&len);\r
+        set_image_from_pixbuf(pBuilder, "image_refresh", pData, len);        \r
+        pData = get_secure_icon_raw_data(&len);\r
+        set_image_from_pixbuf(pBuilder, "image_secure_local", pData, len);\r
+        set_image_from_pixbuf(pBuilder, "image_secure_dev", pData, len);\r
+    }\r
 \r
     pWidget = GTK_WIDGET(gtk_builder_get_object(pBuilder, "window"));\r
     gtk_widget_show_all(pWidget);\r
@@ -113,6 +212,7 @@ int main(int argc, char *argv[])
 \r
     on_init_window(pBuilder);\r
     g_signal_connect(G_OBJECT(pWidget), "delete_event", G_CALLBACK(on_exit_window), NULL);\r
+    g_signal_connect(G_OBJECT(pWidget), "destroy", G_CALLBACK(gtk_main_quit), NULL);\r
 \r
     gtk_main();\r
 \r