v4.3.4: fix updater for windows (Laufwerks übergreifen etc)

This commit is contained in:
Your Name 2021-01-12 19:01:23 +01:00
parent 3d87e301cc
commit f3a4878d2a
4 changed files with 69 additions and 8 deletions

View File

@ -50,10 +50,11 @@ static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
} }




#include <stdio.h>


#if defined(_WIN32) #if defined(_WIN32)
#define WIN32_LEAN_AND_MEAN //#define WIN32_LEAN_AND_MEAN
#define VC_EXTRALEAN //#define VC_EXTRALEAN
#include <Windows.h> #include <Windows.h>
#elif defined(__linux__) #elif defined(__linux__)
#include <sys/ioctl.h> #include <sys/ioctl.h>
@ -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) { void PageManager::get_terminal_size(int& width) {
#if defined(_WIN32) #if defined(_WIN32)
CONSOLE_SCREEN_BUFFER_INFO csbi; 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); width = (int)(csbi.dwSize.X);
#elif defined(__linux__) #elif defined(__linux__)
struct winsize w; struct winsize w;
@ -82,6 +88,9 @@ Reply PageManager::getServerRequest(std::string Url, bool useCookies, std::strin


int width; int width;
get_terminal_size(width); get_terminal_size(width);
if(width <= 0)
width = 999999;

//info ausgabe //info ausgabe
std::cout << ( "\33[2K\rLade: '" + std::string(Url).erase( (((width - 12) < (int)Url.length()) ? (width - 12) : Url.length() ) ) + "'..." + ((debugMode) ? "\n" : "" )) << std::flush; std::cout << ( "\33[2K\rLade: '" + std::string(Url).erase( (((width - 12) < (int)Url.length()) ? (width - 12) : Url.length() ) ) + "'..." + ((debugMode) ? "\n" : "" )) << std::flush;



View File

@ -27,7 +27,7 @@


#define UpdaterCloudUrlWithPath "https://cloud.obermui.de/s/tXz7SWdaPJ7TacZ/download?path=%2F&files=" #define UpdaterCloudUrlWithPath "https://cloud.obermui.de/s/tXz7SWdaPJ7TacZ/download?path=%2F&files="
#define SecondUpdaterCloudUrlWithPath "https://snew4.obermui.de/download?path=%2F&files=" #define SecondUpdaterCloudUrlWithPath "https://snew4.obermui.de/download?path=%2F&files="
#define VERSION "4.3.2" #define VERSION "4.3.4"







View File

@ -1177,7 +1177,7 @@ int ProgramManager::updateModus(Settings *settings)
//wenn dort schon eine datei existiert, lösche diese //wenn dort schon eine datei existiert, lösche diese
std::cout << "\n => INFO: Bereinige Downloadpfad, falls alte Dateien vorhanden sind..." << std::endl; std::cout << "\n => INFO: Bereinige Downloadpfad, falls alte Dateien vorhanden sind..." << std::endl;
if(fileExists(downloadedFilePath)) { 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()); perror((" => Error: Das löschen der Datei '" + downloadedFilePath + "' ist fehlgeschlagen").c_str());
return 13; return 13;
} else if (settings->debugMode) { } else if (settings->debugMode) {
@ -1228,7 +1228,7 @@ int ProgramManager::updateModus(Settings *settings)
//lösche falls vorhanden altes backup //lösche falls vorhanden altes backup
std::cout << "\n => INFO: Lösche alte Nofall Version falls vorhanden..." << std::endl; std::cout << "\n => INFO: Lösche alte Nofall Version falls vorhanden..." << std::endl;
if(fileExists(oldVersionPah)) { 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()); perror((" => Error: Das löschen der Datei '" + oldVersionPah + "' ist fehlgeschlagen.").c_str());
return 14; return 14;
} else if (settings->debugMode) { } else if (settings->debugMode) {
@ -1237,24 +1237,76 @@ int ProgramManager::updateModus(Settings *settings)
} }


//verschiebe neue jetzige version zu backup //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) { if(rename(exePath.c_str(), oldVersionPah.c_str() ) != 0) {
perror((" => Error das Verschieben von '" + exePath + "' -> '" + oldVersionPah + "' ist fehlgeschlagen").c_str()); perror((" => Error das Verschieben von '" + exePath + "' -> '" + oldVersionPah + "' ist fehlgeschlagen").c_str());
return 7; 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 //verschibe neue Version
std::cout << " => INFO: Ersetzte alte Version mit neuer Version des Programms..." << std::endl; std::cout << " => INFO: Ersetzte alte Version mit neuer Version des Programms..." << std::endl;


if(rename(downloadedFilePath.c_str(), exePath.c_str() ) != 0) { if(rename(downloadedFilePath.c_str(), exePath.c_str() ) != 0) {
perror((" => Error: Das Verschieben von '" + downloadedFilePath + "' nach '" + exePath + "' ist fehlgeschlagen").c_str()); perror((" => Error: Das Verschieben von '" + downloadedFilePath + "' nach '" + exePath + "' ist fehlgeschlagen").c_str());

return 7; return 7;
} else { } else {
std::cout << " => INFO: Erfolgreich verschoben und ersetzt:\n '" std::cout << " => INFO: Erfolgreich verschoben und ersetzt:\n '"
<< downloadedFilePath << "' -> '" << exePath << "'" << std::endl; << 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 << std::cout << ((settings->colorless) ? ("") : "\033[92m") << "\n => Update Erfolgreich ausgeführt: '" << settings->version <<
"' -> '" << neusteVersion << "'" << ((settings->colorless) ? ("") : "\033[0m") << std::endl; "' -> '" << neusteVersion << "'" << ((settings->colorless) ? ("") : "\033[0m") << std::endl;



View File

@ -1 +1 @@
../curl/ ../src/curl/