]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
Optimization for VentoyGUI
authorlongpanda <admin@ventoy.net>
Wed, 22 Sep 2021 06:44:50 +0000 (14:44 +0800)
committerlongpanda <admin@ventoy.net>
Wed, 22 Sep 2021 06:44:50 +0000 (14:44 +0800)
INSTALL/ventoy_pack.sh
LinuxGUI/Ventoy2Disk/QT/main.cpp
LinuxGUI/Ventoy2Disk/main_gtk.c
LinuxGUI/Ventoy2Disk/ventoy_gui.c

index 7a4be25f9e7b20c42c4087f659fedf49856f9b7a..4fe7be7aa10f10b39249ff94fdcd7c70cb5cb274 100644 (file)
@@ -107,7 +107,7 @@ cp $OPT Ventoy2Disk.sh $tmpdir/
 cp $OPT VentoyWeb.sh $tmpdir/
 cp $OPT VentoyGUI* $tmpdir/
 
 cp $OPT VentoyWeb.sh $tmpdir/
 cp $OPT VentoyGUI* $tmpdir/
 
-#cp $OPT Ventoy.desktop $tmpdir/
+
 cp $OPT README $tmpdir/
 cp $OPT plugin $tmpdir/
 cp $OPT CreatePersistentImg.sh $tmpdir/
 cp $OPT README $tmpdir/
 cp $OPT plugin $tmpdir/
 cp $OPT CreatePersistentImg.sh $tmpdir/
@@ -115,7 +115,7 @@ cp $OPT ExtendPersistentImg.sh $tmpdir/
 dos2unix -q $tmpdir/Ventoy2Disk.sh
 dos2unix -q $tmpdir/VentoyWeb.sh
 
 dos2unix -q $tmpdir/Ventoy2Disk.sh
 dos2unix -q $tmpdir/VentoyWeb.sh
 
-#dos2unix -q $tmpdir/Ventoy.desktop
+
 dos2unix -q $tmpdir/CreatePersistentImg.sh
 dos2unix -q $tmpdir/ExtendPersistentImg.sh
 
 dos2unix -q $tmpdir/CreatePersistentImg.sh
 dos2unix -q $tmpdir/ExtendPersistentImg.sh
 
@@ -156,7 +156,7 @@ chmod +x $tmpdir/VentoyGUI*
 
 cp $OPT $LANG_DIR/languages.json $tmpdir/tool/
 
 
 cp $OPT $LANG_DIR/languages.json $tmpdir/tool/
 
-#chmod +x $tmpdir/Ventoy.desktop
+
 chmod +x $tmpdir/CreatePersistentImg.sh
 chmod +x $tmpdir/ExtendPersistentImg.sh
 
 chmod +x $tmpdir/CreatePersistentImg.sh
 chmod +x $tmpdir/ExtendPersistentImg.sh
 
@@ -169,6 +169,7 @@ cp $OPT Ventoy2Disk*.exe $tmpdir/
 cp $OPT $LANG_DIR/languages.json $tmpdir/ventoy/
 rm -rf $tmpdir/tool
 rm -f $tmpdir/*.sh
 cp $OPT $LANG_DIR/languages.json $tmpdir/ventoy/
 rm -rf $tmpdir/tool
 rm -f $tmpdir/*.sh
+rm -f $tmpdir/VentoyGUI.*
 rm -rf $tmpdir/WebUI
 rm -f $tmpdir/README
 
 rm -rf $tmpdir/WebUI
 rm -f $tmpdir/README
 
index 37f47d4bc0bc605743dfeb29ddec6cb78a526f5e..60e6281ef6e3f7396c1b928951dce9c6436af995 100644 (file)
@@ -4,6 +4,7 @@
 #include <QMessageBox>
 #include <QFileInfo>
 #include <QStyle>
 #include <QMessageBox>
 #include <QFileInfo>
 #include <QStyle>
+#include <QDir>
 #include <QDesktopWidget>
 #include <QPixmap>
 #include <unistd.h>
 #include <QDesktopWidget>
 #include <QPixmap>
 #include <unistd.h>
@@ -23,6 +24,7 @@ char g_ini_file[4096];
 int main(int argc, char *argv[])
 {
     int ret;
 int main(int argc, char *argv[])
 {
     int ret;
+    long long size;
     QApplication a(argc, argv);
     Ventoy2DiskWindow w;
 
     QApplication a(argc, argv);
     Ventoy2DiskWindow w;
 
@@ -34,6 +36,21 @@ int main(int argc, char *argv[])
     }
 #endif
 
     }
 #endif
 
+    if (!QFileInfo::exists("./boot/boot.img"))
+    {
+        QString curdir = a.applicationDirPath();
+        int index = curdir.indexOf("/tool/");
+
+        if (index >= 0)
+        {
+            QDir::setCurrent(curdir.left(index));
+        }
+        else
+        {
+            QDir::setCurrent(curdir);        
+        }        
+    }
+
     if (!QFileInfo::exists("./boot/boot.img"))
     {
         QMessageBox::critical(NULL, "Error", "Please run under the correct directory.");
     if (!QFileInfo::exists("./boot/boot.img"))
     {
         QMessageBox::critical(NULL, "Error", "Please run under the correct directory.");
@@ -56,9 +73,18 @@ int main(int argc, char *argv[])
         }
     }
 
         }
     }
 
+    QFileInfo Info(g_log_file);
+    size = (long long)Info.size();
+    if (size >= 4 * SIZE_1MB)
+    {
+        QFile::remove(g_log_file);
+    }
+
     vlog("===================================================\n");
     vlog("===== Ventoy2Disk %s powered by QT %s =====\n", ventoy_get_local_version(), qVersion());
     vlog("===================================================\n");
     vlog("===================================================\n");
     vlog("===== Ventoy2Disk %s powered by QT %s =====\n", ventoy_get_local_version(), qVersion());
     vlog("===================================================\n");
+    vlog("log file is <%s> lastsize:%lld\n", g_log_file, (long long)size);
+    vlog("ini file is <%s>\n", g_ini_file);
 
     ventoy_disk_init();
     ventoy_http_init();
 
     ventoy_disk_init();
     ventoy_http_init();
index 1957a430264677736d6c86134062419e342411ca..4f1d8a0989d1427b955bd54b7a02da650b0713d8 100644 (file)
@@ -9,6 +9,7 @@
 #include <time.h>
 #include <unistd.h>\r
 #include <sys/types.h>\r
 #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 <linux/limits.h>\r
 #include <ventoy_define.h>
 #include <ventoy_util.h>\r
@@ -56,6 +57,49 @@ int early_msgbox(GtkMessageType type, GtkButtonsType buttons, const char *str)
     return ret;\r
 }\r
 \r
     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 main(int argc, char *argv[])\r
 {\r
     int i;\r
@@ -64,6 +108,7 @@ int main(int argc, char *argv[])
     GtkWidget *pWidget = NULL;\r
     GtkBuilder *pBuilder = NULL;\r
     GError *error = 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
 \r
     gtk_init(&argc, &argv);\r
     \r
@@ -74,6 +119,11 @@ int main(int argc, char *argv[])
         return EACCES;\r
     }\r
 \r
         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
     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
@@ -94,11 +144,22 @@ int main(int argc, char *argv[])
         }
     }\r
 \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
     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
 
 \r
     ventoy_disk_init();\r
 
index 795f3fd29f0f80a65a2f139ff646cc5849b07d7e..2616f5e0a9d9c5c3d406b23f8dd18985b60553d0 100644 (file)
 #define LD_CACHE_FILE   "/etc/ld.so.cache"
 #define INT2STR_YN(a)   ((a) == 0 ? "NO" : "YES")
 
 #define LD_CACHE_FILE   "/etc/ld.so.cache"
 #define INT2STR_YN(a)   ((a) == 0 ? "NO" : "YES")
 
+static int g_xdg_log = 0;
+static int g_xdg_ini = 0;
 static char g_log_file[PATH_MAX];
 static char g_log_file[PATH_MAX];
+static char g_ini_file[PATH_MAX];
 static char *g_log_buf = NULL;
 extern char ** environ;
 
 static char *g_log_buf = NULL;
 extern char ** environ;
 
@@ -499,6 +502,7 @@ static int restart_main(int argc, char **argv, char *guiexe)
     if (envs)
     {
         vlog("recover success, argc=%d evecve <%s>\n", j, guiexe);
     if (envs)
     {
         vlog("recover success, argc=%d evecve <%s>\n", j, guiexe);
+        dump_args("EXECVE", newargv);
         execve(guiexe, newargv, envs); 
     }
     else
         execve(guiexe, newargv, envs); 
     }
     else
@@ -584,12 +588,36 @@ static int restart_by_pkexec(int argc, char **argv, const char *curpath, const c
 
     newargv[j++] = pkexec;
     newargv[j++] = path;
 
     newargv[j++] = pkexec;
     newargv[j++] = path;
-    for (i = 1; i < argc && j < MAX_PARAS - 2; i++)
+    for (i = 1; i < argc && j < MAX_PARAS; i++)
     {
     {
+        if (strcmp(argv[i], "--xdg") == 0)
+        {
+            continue;
+        }
         newargv[j++] = argv[i];
     }
         newargv[j++] = argv[i];
     }
-    newargv[j++] = create_environ_param(VTOY_ENV_STR, environ);
-    newargv[j++] = exepara;
+
+    if (j < MAX_PARAS)
+    {
+        newargv[j++] = create_environ_param(VTOY_ENV_STR, environ);        
+    }
+
+    if (j < MAX_PARAS)
+    {
+        newargv[j++] = exepara;        
+    }
+    
+    if (g_xdg_log && j + 1 < MAX_PARAS)
+    {
+        newargv[j++] = "-l";        
+        newargv[j++] = g_log_file;        
+    }
+    
+    if (g_xdg_ini && j + 1 < MAX_PARAS)
+    {
+        newargv[j++] = "-i";        
+        newargv[j++] = g_ini_file;        
+    }
 
     dump_args("PKEXEC", newargv);
     execv(pkexec, newargv);
 
     dump_args("PKEXEC", newargv);
     execv(pkexec, newargv);
@@ -962,8 +990,9 @@ static int distro_check_gui_env(char *type, int len, int *pver)
     return pstNode ? 1 : 0;
 }
 
     return pstNode ? 1 : 0;
 }
 
-static int detect_gui_exe_path(const char *curpath, char *pathbuf, int buflen)
+static int detect_gui_exe_path(int argc, char **argv, const char *curpath, char *pathbuf, int buflen)
 {
 {
+    int i;
     int ret;
     int ver;
     int libflag = 0;
     int ret;
     int ver;
     int libflag = 0;
@@ -971,8 +1000,46 @@ static int detect_gui_exe_path(const char *curpath, char *pathbuf, int buflen)
     char line[256];
     mode_t mode;
     struct stat filestat;
     char line[256];
     mode_t mode;
     struct stat filestat;
-    
-    if (access("./ventoy_gui_type", F_OK) != -1)
+
+    for (i = 1; i < argc; i++)
+    {
+        if (argv[i] && strcmp(argv[i], "--gtk2") == 0)
+        {
+            guitype = "gtk";
+            ver = 2;
+        }
+        else if (argv[i] && strcmp(argv[i], "--gtk3") == 0)
+        {
+            guitype = "gtk";
+            ver = 3;
+        }
+        else if (argv[i] && strcmp(argv[i], "--gtk4") == 0)
+        {
+            guitype = "gtk";
+            ver = 4;
+        }
+        else if (argv[i] && strcmp(argv[i], "--qt4") == 0)
+        {
+            guitype = "qt";
+            ver = 4;
+        }
+        else if (argv[i] && strcmp(argv[i], "--qt5") == 0)
+        {
+            guitype = "qt";
+            ver = 5;
+        }
+        else if (argv[i] && strcmp(argv[i], "--qt6") == 0)
+        {
+            guitype = "qt";
+            ver = 6;
+        }
+    }
+
+    if (guitype)
+    {
+        vlog("Get GUI type from param <%s%d>.\n", guitype, ver);
+    }
+    else if (access("./ventoy_gui_type", F_OK) != -1)
     {
         vlog("Get GUI type from ventoy_gui_type file.\n");
     
     {
         vlog("Get GUI type from ventoy_gui_type file.\n");
     
@@ -1113,6 +1180,7 @@ int real_main(int argc, char **argv)
     vlog("=============== VentoyGui %s ===============\n", VTOY_GUI_ARCH);
     vlog("=========================================================\n");
     vlog("=========================================================\n");
     vlog("=============== VentoyGui %s ===============\n", VTOY_GUI_ARCH);
     vlog("=========================================================\n");
     vlog("=========================================================\n");
+    vlog("log file is <%s>\n", g_log_file);
 
     euid = geteuid();
     getcwd(curpath, sizeof(curpath));
 
     euid = geteuid();
     getcwd(curpath, sizeof(curpath));
@@ -1145,7 +1213,7 @@ int real_main(int argc, char **argv)
             return 1;
         }
 
             return 1;
         }
 
-        if (detect_gui_exe_path(curpath, path, sizeof(path)))
+        if (detect_gui_exe_path(argc, argv, curpath, path, sizeof(path)))
         {
             return 1;
         }
         {
             return 1;
         }
@@ -1154,7 +1222,6 @@ int real_main(int argc, char **argv)
         {
             vlog("We have root privileges, just exec %s\n", path);
             argv[0] = path;
         {
             vlog("We have root privileges, just exec %s\n", path);
             argv[0] = path;
-            argv[1] = NULL;
             execv(argv[0], argv);
         }
         else
             execv(argv[0], argv);
         }
         else
@@ -1176,6 +1243,7 @@ int main(int argc, char **argv)
 {
     int i;
     int ret;
 {
     int i;
     int ret;
+    const char *env = NULL;
 
     snprintf(g_log_file, sizeof(g_log_file), "log.txt");
     for (i = 0; i < argc; i++)
 
     snprintf(g_log_file, sizeof(g_log_file), "log.txt");
     for (i = 0; i < argc; i++)
@@ -1185,6 +1253,22 @@ int main(int argc, char **argv)
             snprintf(g_log_file, sizeof(g_log_file), "%s", argv[i + 1]);
             break;
         }
             snprintf(g_log_file, sizeof(g_log_file), "%s", argv[i + 1]);
             break;
         }
+        else if (argv[i] && strcmp(argv[i], "--xdg") == 0)
+        {
+            env = getenv("XDG_CACHE_HOME");
+            if (env)
+            {
+                g_xdg_log = 1;
+                snprintf(g_log_file, sizeof(g_log_file), "%s/ventoy.log", env);
+            }
+            
+            env = getenv("XDG_CONFIG_HOME");
+            if (env)
+            {
+                g_xdg_ini = 1;
+                snprintf(g_ini_file, sizeof(g_ini_file), "%s/Ventoy2Disk.ini", env);
+            }
+        }
     }
 
     g_log_buf = malloc(MAX_LOG_BUF);
     }
 
     g_log_buf = malloc(MAX_LOG_BUF);