diff --git a/app/scanner2/mainwindow.cpp b/app/scanner2/mainwindow.cpp index fe81e378..bd4a4aec 100644 --- a/app/scanner2/mainwindow.cpp +++ b/app/scanner2/mainwindow.cpp @@ -2984,6 +2984,35 @@ void MainWindow::on_act_clearRoller_triggered() } } +static std::string GetOSName() +{ + std::string osName; + +#if defined(HG_CMP_MSC) + osName = "Windows"; +#else + osName = "Linux"; + FILE* fp = popen("cat /etc/issue | cut -d\' \' -f1", "r"); + if (NULL != fp) + { + char buff[1024] = { 0 }; + fread(buff, 1024, 1, fp); + + int len = (int)strlen(buff); + for (int i = 0; i < len; ++i) + { + if (buff[i] == '\n') + buff[i] = '\0'; + } + + osName = buff; + pclose(fp); + } +#endif + + return osName; +} + void MainWindow::on_act_help_triggered() { QString filename; @@ -3008,18 +3037,8 @@ void MainWindow::on_act_help_triggered() filename = QApplication::applicationDirPath() + "/HuaGoScan_App_Help_manual.pdf"; #endif #else - std::string osName; - FILE *file = popen("cat /etc/issue | cut -d\' \' -f1", "r"); - if (NULL != file) - { - char data[1024] = {0}; - if (NULL != fgets(data, 1024, file)) - osName = data; - pclose(file); - } - - printf("osName=%s\n", osName.c_str()); - if (osName.find("UnionTech") != std::string::npos) + std::string osName = GetOSName(); + if ("UnionTech" == osName) { #if defined(OEM_HANWANG) filename = QApplication::applicationDirPath() + "/../../entries/help/HanvonScan_App_Help_manual.pdf"; @@ -3072,166 +3091,115 @@ void MainWindow::on_act_help_triggered() QDesktopServices::openUrl(QUrl::fromLocalFile(filename)); } -static std::string GetOSName() +static bool isLeap(int year) { - std::string osName; - -#if defined(HG_CMP_MSC) - osName = "Windows"; -#else - osName = "Linux"; - FILE* fp = popen("cat /etc/issue | cut -d\' \' -f1", "r"); - if (NULL != fp) - { - char buff[1024] = { 0 }; - fread(buff, 1024, 1, fp); - - int len = (int)strlen(buff); - for (int i = 0; i < len; ++i) - { - if (buff[i] == '\n') - buff[i] = '\0'; - } - - osName = buff; - pclose(fp); - } -#endif - - return osName; + if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) + return true; + return false; } -static HGResult getCurrVersion(HGChar* version, HGUInt maxLen) +static int getDays(int year, int month) { - if (NULL == version || 0 == maxLen) + if (2 == month) { - return HGBASE_ERR_INVALIDARG; + if (isLeap(year)) + return 29; + else + return 28; } - std::string ver = "0.0.0.0"; - -#if defined(HG_CMP_MSC) - std::string regName; -#if defined(OEM_HANWANG) - regName = "SOFTWARE\\HanvonScan"; -#elif defined(OEM_LISICHENG) - regName = "SOFTWARE\\LanxumScan"; -#elif defined(OEM_CANGTIAN) - regName = "SOFTWARE\\CumtennScan"; -#elif defined(OEM_ZHONGJING) - regName = "SOFTWARE\\MicrotekScan"; -#elif defined(OEM_ZIGUANG) - regName = "SOFTWARE\\UniScan"; -#elif defined(OEM_DELI) - regName = "SOFTWARE\\DeliScan"; -#elif defined(OEM_NEUTRAL) - regName = "SOFTWARE\\NeuScan"; -#else - regName = "SOFTWARE\\HuaGoScan"; -#endif - - HKEY hKey = NULL; - RegOpenKeyExA(HKEY_LOCAL_MACHINE, regName.c_str(), 0, KEY_QUERY_VALUE, &hKey); - if (NULL != hKey) + if (4 == month || 6 == month || 9 == month || 11 == month) { - CHAR szData[MAX_PATH] = { 0 }; - DWORD cbData = MAX_PATH; - if (ERROR_SUCCESS == RegQueryValueExA(hKey, "AppVersion", NULL, NULL, (LPBYTE)szData, &cbData)) - { - ver = szData; - } - - RegCloseKey(hKey); - } -#else - std::string appName; - std::string osName = GetOSName(); - if ("UnionTech" == osName) - { -#if defined(OEM_HANWANG) - appName = "com.hanvonchina.hanvonscan"; -#elif defined(OEM_LISICHENG) - appName = "com.lanxumchina.lanxumscan"; -#elif defined(OEM_CANGTIAN) - appName = "com.cumtennchina.cumtennscan"; -#elif defined(OEM_ZHONGJING) - appName = "com.microtekchina.microtekscan"; -#elif defined(OEM_ZIGUANG) - appName = "com.unischina.uniscan"; -#elif defined(OEM_DELI) - appName = "com.delichina.deliscan"; -#elif defined(OEM_NEUTRAL) - appName = "com.neutralchina.neutralscan"; -#else - appName = "com.huagaochina.huagoscan"; -#endif - } - else - { -#if defined(OEM_HANWANG) - appName = "scanner-driver-hanvon"; -#elif defined(OEM_LISICHENG) - appName = "scanner-driver-lanxum"; -#elif defined(OEM_CANGTIAN) - appName = "scanner-driver-cumtenn"; -#elif defined(OEM_ZHONGJING) - appName = "scanner-driver-microtek"; -#elif defined(OEM_ZIGUANG) - appName = "scanner-driver-unis"; -#elif defined(OEM_DELI) - appName = "scanner-driver-deli"; -#elif defined(OEM_NEUTRAL) - appName = "scanner-driver-neutral"; -#else - appName = "scanner-driver-huagao"; -#endif + return 30; } - std::string cmd = "dpkg -l " + appName; - FILE* fp = popen(cmd.c_str(), "r"); - if (NULL != fp) + return 31; +} + +static int getPathVersion() +{ + HGTimeInfo timeInfo; + HGBase_GetLocalTime(&timeInfo); + + int ret = timeInfo.year % 100; + ret *= 1000; + + for (int i = 1; i < timeInfo.month; ++i) { - char buff[2048] = { 0 }; - fread(buff, 2048, 1, fp); - - char* p = strstr(buff, appName.c_str()); - if (NULL != p) - { - char* p2 = p + appName.size(); - while (!isdigit(*p2) && '.' != *p2) - ++p2; - - int len = (int)strlen(p2); - for (int i = 0; i < len; ++i) - { - if (!isdigit(p2[i]) && '.' != p2[i]) - { - p2[i] = '\0'; - break; - } - } - - ver = p2; - } - - pclose(fp); - } -#endif - - if (maxLen < ver.size() + 1) - { - return HGBASE_ERR_FAIL; + ret += getDays(timeInfo.year, i); } - strcpy(version, ver.c_str()); - return HGBASE_ERR_OK; + ret += timeInfo.day; + return ret; } void MainWindow::on_act_about_triggered() { + int mainVersion = VERSION_MAIN; + int subVersion = VERSION_SUB; + int buildVersion = 10; + int patchVersion = 0; + + +#if defined (OEM_LISICHENG) + buildVersion = 14; +#elif defined (OEM_HANWNAG) + buildVersion = 16; +#elif defined (OEM_CANGTIAN) + buildVersion = 18; +#elif defined (OEM_ZHONGJING) + buildVersion = 20; +#elif defined (OEM_ZIGUANG) + buildVersion = 22; +#elif defined (OEM_DELI) + buildVersion = 24; +#elif defined (OEM_NEUTRAL) + buildVersion = 26; +#endif + + buildVersion = buildVersion * 10; + + +#if defined(HG_CMP_MSC) + #if defined(_WIN64) + buildVersion += 1; + #else + buildVersion += 0; + #endif +#else + #if defined (x86_64) + buildVersion += 5; + #elif defined (aarch64) + buildVersion += 2; + #elif defined (mips64) + buildVersion += 3; + #elif defined (loongarch64) + buildVersion += 4; + #endif +#endif + + buildVersion *= 100; + +#if !defined(HG_CMP_MSC) + std::string osName = GetOSName(); + if ("UnionTech" == osName) + { + buildVersion += 20; + } + else if ("kylin" == osName) + { + buildVersion += 21; + } + else + { + buildVersion += 10; + } +#endif + + patchVersion = getPathVersion(); + HGChar version[32] = { 0 }; - //getCurrVersion(version, 32); - sprintf(version, "%d.%d.%d.%d", VERSION_MAIN, VERSION_SUB, VERSION_BUILD1, VERSION_PATCH); + sprintf(version, "%d.%d.%d.%d", mainVersion, subVersion, buildVersion, patchVersion); QString title = tr("about %1").arg(windowTitle()); QString content;