From f3a4878d2ae354f0504b8a11dd313300dee55967 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 12 Jan 2021 19:01:23 +0100 Subject: [PATCH] =?UTF-8?q?v4.3.4:=20fix=20updater=20for=20windows=20(Lauf?= =?UTF-8?q?werks=20=C3=BCbergreifen=20etc)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pageManager.cpp | 15 ++++++++-- src/parameterManager.h | 2 +- src/programManager.cpp | 58 +++++++++++++++++++++++++++++++++++-- x86_64-WIN_LIBS/LIBCURL-DLL | 2 +- 4 files changed, 69 insertions(+), 8 deletions(-) diff --git a/src/pageManager.cpp b/src/pageManager.cpp index 752d865..dc0ed14 100644 --- a/src/pageManager.cpp +++ b/src/pageManager.cpp @@ -50,10 +50,11 @@ static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) } +#include #if defined(_WIN32) -#define WIN32_LEAN_AND_MEAN -#define VC_EXTRALEAN +//#define WIN32_LEAN_AND_MEAN +//#define VC_EXTRALEAN #include #elif defined(__linux__) #include @@ -62,7 +63,12 @@ static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) void PageManager::get_terminal_size(int& width) { #if defined(_WIN32) CONSOLE_SCREEN_BUFFER_INFO csbi; - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); + if( GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi) == 0 ) { + if ( debugMode ) + std::cout << " => WARNING: GetConsoleScreenBufferInfo failed => Use 9999 as max Msg-Length" << std::endl; + return; + } + width = (int)(csbi.dwSize.X); #elif defined(__linux__) struct winsize w; @@ -82,6 +88,9 @@ Reply PageManager::getServerRequest(std::string Url, bool useCookies, std::strin int width; get_terminal_size(width); + if(width <= 0) + width = 999999; + //info ausgabe std::cout << ( "\33[2K\rLade: '" + std::string(Url).erase( (((width - 12) < (int)Url.length()) ? (width - 12) : Url.length() ) ) + "'..." + ((debugMode) ? "\n" : "" )) << std::flush; diff --git a/src/parameterManager.h b/src/parameterManager.h index 03f76ef..90d004e 100644 --- a/src/parameterManager.h +++ b/src/parameterManager.h @@ -27,7 +27,7 @@ #define UpdaterCloudUrlWithPath "https://cloud.obermui.de/s/tXz7SWdaPJ7TacZ/download?path=%2F&files=" #define SecondUpdaterCloudUrlWithPath "https://snew4.obermui.de/download?path=%2F&files=" -#define VERSION "4.3.2" +#define VERSION "4.3.4" diff --git a/src/programManager.cpp b/src/programManager.cpp index c78b9b5..1fd147f 100644 --- a/src/programManager.cpp +++ b/src/programManager.cpp @@ -1177,7 +1177,7 @@ int ProgramManager::updateModus(Settings *settings) //wenn dort schon eine datei existiert, lösche diese std::cout << "\n => INFO: Bereinige Downloadpfad, falls alte Dateien vorhanden sind..." << std::endl; if(fileExists(downloadedFilePath)) { - if(remove(downloadedFilePath.c_str()) != 0) { + if(remove(downloadedFilePath.c_str()) != 0 || fileExists(downloadedFilePath) ) { perror((" => Error: Das löschen der Datei '" + downloadedFilePath + "' ist fehlgeschlagen").c_str()); return 13; } else if (settings->debugMode) { @@ -1228,7 +1228,7 @@ int ProgramManager::updateModus(Settings *settings) //lösche falls vorhanden altes backup std::cout << "\n => INFO: Lösche alte Nofall Version falls vorhanden..." << std::endl; if(fileExists(oldVersionPah)) { - if(remove( oldVersionPah.c_str() ) != 0) { + if(remove( oldVersionPah.c_str() ) != 0 || fileExists(oldVersionPah)) { perror((" => Error: Das löschen der Datei '" + oldVersionPah + "' ist fehlgeschlagen.").c_str()); return 14; } else if (settings->debugMode) { @@ -1237,24 +1237,76 @@ int ProgramManager::updateModus(Settings *settings) } //verschiebe neue jetzige version zu backup - std::cout << " => INFO: Verschiebe alte Version für Notfälle zu: '" << oldVersionPah << "'." << std::endl; + std::cout << ((settings->colorless) ? ("") : "\033[92m") << " => INFO: Verschiebe alte Version für Notfälle zu: '" << oldVersionPah << "'." << ((settings->colorless) ? ("") : "\033[0m") << std::endl; if(rename(exePath.c_str(), oldVersionPah.c_str() ) != 0) { perror((" => Error das Verschieben von '" + exePath + "' -> '" + oldVersionPah + "' ist fehlgeschlagen").c_str()); return 7; } + if( fileExists(exePath) && fileExists(oldVersionPah) ) { + std::cout << ((settings->colorless) ? ("\n") : "\n\033[33m") + << "!! => WARNUNG: --->Die Aktuelle Version konnte nicht verschoben, sondern nur kopiert werden! ( Z.: Operation Laufwerksübergreifend ? )\n" + << " ==> Aktuelle Version umbenennen. (Die Datei kann danach gelöscht werden!) " << ((settings->colorless) ? ("") : "\033[0m") << std::endl; + if(fileExists(exePath + "_ALT")) { + std::cout << ((settings->colorless) ? ("") : "\033[33m") << " => WARNUNG: Es existiert bereits eine Datei mit dem Namen " + << exePath + "_ALT" << ((settings->colorless) ? ("") : "\033[0m") << "\n" << "Diese Datei loeschen: (Nur Enter um fortzufahren): " << std::flush; + + std::string inp; + std::getline(std::cin, inp); + std::cout << std::endl; + + if( inp != "" ) { + std::cout << "Abbruch..." << std::endl; + return 0; + } + + if(remove( (exePath + "_ALT" ).c_str() ) != 0 || fileExists(exePath + "_ALT") ) { + perror((" => Error: Das löschen der Datei '" + exePath + "_ALT" + "' ist fehlgeschlagen.").c_str()); + return 1144; + } + + } + + if( rename(exePath.c_str(), (exePath + "_ALT").c_str() ) != 0 || fileExists(exePath) ) { + perror(" => ERROR: Umbennen auch fehlgeschlagen"); + return 2314; + } else { + std::cout << " -> Umbenennen erfolgreich => Fahre fort..." << std::endl; + } + } + + if(fileExists(exePath)) { + std::cout << " => WARNUNG: Aktuelle Version existiert nach dem Verschieben immer noch!" << std::endl; + if(remove( exePath.c_str() ) != 0 || fileExists(exePath) ) { + perror((" => Error: Das löschen der aktuellen Version '" + exePath + "' ist fehlgeschlagen.").c_str()); + return 114; + } + } + + //verschibe neue Version std::cout << " => INFO: Ersetzte alte Version mit neuer Version des Programms..." << std::endl; if(rename(downloadedFilePath.c_str(), exePath.c_str() ) != 0) { perror((" => Error: Das Verschieben von '" + downloadedFilePath + "' nach '" + exePath + "' ist fehlgeschlagen").c_str()); + return 7; } else { std::cout << " => INFO: Erfolgreich verschoben und ersetzt:\n '" << downloadedFilePath << "' -> '" << exePath << "'" << std::endl; } + if(fileExists(downloadedFilePath)) { + std::cout << " => WARNUNG: Download-Datei existiert nach dem Verschieben immer noch! Ist diese Operation vielleicht Laufwerksübergreifend? ( Falls ja, starten sie " + << settings->programName << " ggf. von ihrem C:\\-Laufwerk." << std::endl; + + if(remove( downloadedFilePath.c_str() ) != 0 || fileExists(downloadedFilePath) ) { + perror((" => Error: Das löschen der Downloaddatei '" + downloadedFilePath + "' ist fehlgeschlagen.").c_str()); + return 118; + } + } + std::cout << ((settings->colorless) ? ("") : "\033[92m") << "\n => Update Erfolgreich ausgeführt: '" << settings->version << "' -> '" << neusteVersion << "'" << ((settings->colorless) ? ("") : "\033[0m") << std::endl; diff --git a/x86_64-WIN_LIBS/LIBCURL-DLL b/x86_64-WIN_LIBS/LIBCURL-DLL index 9e87f45..e90b319 100644 --- a/x86_64-WIN_LIBS/LIBCURL-DLL +++ b/x86_64-WIN_LIBS/LIBCURL-DLL @@ -1 +1 @@ -../curl/ +../src/curl/