diff --git a/src/parameterManager.cpp b/src/parameterManager.cpp index cf7b2f8..24b8816 100644 --- a/src/parameterManager.cpp +++ b/src/parameterManager.cpp @@ -42,6 +42,8 @@ int setPaths(Settings &settings) settings.lastUpdateDateFilePath = CacheDir + "LastUpdateDate"; settings.logFilePath = CacheDir + "LogFile"; + settings.lastProgrammUpdateDateFilePath = CacheDir + "LastProgrammUpdateDate"; + settings.accountFilePath = SettingsDir + "Accounts"; settings.serienListPath = SettingsDir + "SerienListe"; settings.defaultsFilePath = SettingsDir + "Defaults"; @@ -49,11 +51,15 @@ int setPaths(Settings &settings) settings.cacheDir = CacheDir; settings.configDir = SettingsDir; + return 0; } int manageParameter(Settings &settings, int argc, char **argv) { + if(argv[0]) + settings.argv0 = argv[0]; + //Path settings if(setPaths(settings) != 0) { if(settings.debugMode) @@ -210,6 +216,14 @@ int loadDefaulOptions(Settings &settings) ofs << "# Wenn deaktiviert, manuelle auswahl der Seiten nötig!" << std::endl; ofs << "#UseFirstPage=true" << std::endl << std::endl; + ofs << "# -> Mit 0 Können Sie die Warnung für veraltete Suchlisten deaktivieren:" << std::endl; + ofs << "#search_UpdateWarnungNachTagen=10" << std::endl << std::endl; + + ofs << "# -> Mit 0 Können Sie die Warnung für nötige Updateüberprüfungen deaktivieren:" << std::endl; + ofs << "#search_ProgrammUpdateWarnungNachTagen=10" << std::endl << std::endl; + + + ofs << "#" << std::endl << "# -> Einstellungen für default Modus:" << std::endl << "#" << std::endl << std::endl; ofs << "# -> Standart Wert für Parameter: -g, --genaue-hoster:" << std::endl; @@ -232,8 +246,6 @@ int loadDefaulOptions(Settings &settings) ofs << "# -> Standart Wert für Parameter: -e, --exactly-writing:" << std::endl; ofs << "#search-AchteAufGroßUndKleinschreibung=false" << std::endl << std::endl; - ofs << "# -> Mit 0 Können Sie die Warnung deaktivieren:" << std::endl; - ofs << "#search_UpdateWarnungNachTagen=10" << std::endl << std::endl; ofs << "# -> Aktiviert werden bei der Suche sämtliche Namen der Serie angezeigt." << std::endl; ofs << "# Bei Animes kann das zu Mehrzeiligen ausgaben pro Serie führen!" << std::endl; @@ -391,6 +403,16 @@ int loadDefaulOptions(Settings &settings) if(settings.debugMode) std::cout << " > Defaults: search-showAllNames: " << settings.search_show_othernames << std::endl; + } else if (what == "search_ProgrammUpdateWarnungNachTagen") { + if(!isNumber(data)) { + std::cout << " Error_Defaults: search_ProgrammUpdateWarnungNachTagen: Wert ist keine Zahl." << std::endl; + return 228; + } else { + settings.programmUpdateWarningDays = atoi(data.c_str()); + } + if(settings.debugMode) + std::cout << " > Defaults: search_ProgrammUpdateWarnungNachTagen: " << settings.programmUpdateWarningDays << std::endl; + } else { std::cout << " => Warnung: Unbekannte Default-Option: '" << what << "'." << std::endl; } diff --git a/src/parameterManager.h b/src/parameterManager.h index c550324..db18278 100644 --- a/src/parameterManager.h +++ b/src/parameterManager.h @@ -26,8 +26,8 @@ #define UpdaterCloudUrlWithPath "https://cloud.obermui.de/s/tXz7SWdaPJ7TacZ/download?path=%2F&files=" #define SecondUpdaterCloudUrlWithPath "https://snew4.obermui.de/download?path=%2F&files=" -#define VERSION "5.0.5" -#define DEFAULT_FILE_VERSION "2.1" +#define VERSION "5.1.0" +#define DEFAULT_FILE_VERSION "2.2" //default, anime, normal, //suche: für jede katego. eine @@ -122,6 +122,9 @@ struct Settings { serienListPath = "", lastUpdateDateFilePath = "", + lastProgrammUpdateDateFilePath = "", + + configDir="", cacheDir="", logFilePath="", @@ -133,7 +136,8 @@ struct Settings { version = VERSION, defaultFileVersion= DEFAULT_FILE_VERSION, default_checkPath = "", - default_Searchmuster = "S%Staffel%E%Folge%"; + default_Searchmuster = "S%Staffel%E%Folge%", + argv0; std::vector outputFilePaths; @@ -147,13 +151,18 @@ struct Settings { askForEveryDir = true, skipEpisodenNameOutput = false, showLastUpdate = false; + int startEpisode = 1, stopEpisode = 0, startSeason = 1, stopSeason = 0, proxy_port = 9050, default_maxDirs = 20, - updateWarningDays = 10; + updateWarningDays = 10, + + programmUpdateWarningDays = 20; + + char pathSymbol = '/'; char wrongPathSymbol = '\\'; unsigned maxThreads = 0; diff --git a/src/programManager.cpp b/src/programManager.cpp index f09f45f..9eb6e4c 100644 --- a/src/programManager.cpp +++ b/src/programManager.cpp @@ -21,11 +21,17 @@ int ProgramManager::start(Settings *settings) pageManager.setDebugMode(settings->debugMode); pageManager.setProxy(settings->proxy_ip, settings->proxy_port); if(dirExists(settings->cookieFilePath)) { - std::cout << " => Error: Kann Cokkie-File nicht erstellen: Es existiert bereits ein Ordner mit diesem Namen: \n '" + std::cout << " => Error: Kann Cokkie-File nicht erstellen: \n '" << settings->cookieFilePath << "'." << std::endl; return 174; } + + //Überprüfe letzte Update suche + if(settings->modus != Modus::UPDATE_MODUS ) + if( checkLastProgrammUpdate(settings) ) + return 175; + switch (settings->modus) { case Modus::DEFAULT_MODUS: return defaultModus(settings); @@ -186,6 +192,9 @@ int ProgramManager::waitForThreads() e->setData(0, 0); e->thread = 0; } + + + return 0; } @@ -370,8 +379,88 @@ int ProgramManager::sucheNach_1_Serien(Settings *settings, PageManager &pageMana } } + +int ProgramManager::checkLastProgrammUpdate(Settings *settings) +{ + //Wenn die Funktion deaktiviert ist brich ab, wenn nicht nur diffdays verlangt wird + if(settings->programmUpdateWarningDays == 0) { + if(settings->debugMode) + std::cerr << ">>> Debug In " << __FUNCTION__ << ": In settings: Programm --- upDateWaring is deaktivated(seted to 0)." << std::endl; + return 0; + } + + std::ifstream ifs(settings->lastProgrammUpdateDateFilePath); + if(!ifs.is_open()) { + std::ofstream ofs2(settings->lastProgrammUpdateDateFilePath); + if(!ofs2.is_open()) { + perror(("Konnte die Datei '" + settings->lastProgrammUpdateDateFilePath + "' nicht öffnen").c_str()); + if(settings->debugMode) + std::cerr << ">>> Debug In " << __FUNCTION__ << ": Failed to create Last Programm Update Date File:'" << settings->lastProgrammUpdateDateFilePath << "'." << std::endl; + return 1; + } else { + if(settings->debugMode) + std::cerr << ">>> Debug In " << __FUNCTION__ << ": Ordfolgreich Last Programm UpdateTime Save File erstellt:'" << settings->lastProgrammUpdateDateFilePath << "'." << std::endl; + ofs2 << "0" << std::endl; + ofs2.close(); + ifs.open(settings->lastProgrammUpdateDateFilePath); + if(!ifs.is_open()) { + perror(("Konnte die Datei '" + settings->lastProgrammUpdateDateFilePath + "' nicht öffnen").c_str()); + if(settings->debugMode) + std::cerr << ">>> Debug In " << __FUNCTION__ << ": Failed to open Last Programm Update Date File:'" << settings->lastProgrammUpdateDateFilePath << "'." << std::endl; + return 4545; + } + } + } + std::string line; + ssize_t difDays = 0; + if(!std::getline(ifs, line).good()) { + perror("GetLine from Date failed"); + if(settings->debugMode) + std::cerr << ">>> Debug In " << __FUNCTION__ << ": Get the first Line of the Last Programm UpdateDate File failed." << std::endl; + return 2; + + } else if( ( ( difDays = static_cast(pageManager.getDate()) - atoll(line.c_str()) )) >= settings->programmUpdateWarningDays) { + //Gib nachricht nicht aus wenn nur diffday verlangt wird + if( true ) { + std::cout << ((settings->colorless) ? "" : "\033[93m") << " => Warnung: Eine Überprüfung auf Updates wurde zuletzt vor " << difDays << " Tagen durchgeführt!" + << std::endl << " Wollen sie nach updates suchen? (Y/n): " << ((settings->colorless) ? "" : "\033[0m") << std::flush; + std::cin.clear(); + std::string inp; + std::getline(std::cin, inp); + + if(inp == "" || inp == "Y" || inp == "y" || inp == "j" || inp == "J") { + std::string program = settings->argv0.substr(0, //ganzer pfad + settings->argv0.substr( + settings->argv0.find_last_of(settings->pathSymbol) == std::string::npos ? 0 : settings->argv0.find_last_of(settings->pathSymbol) + ) .find_first_of(" ") ); + //std::cout << "run: " << program << " --u" << std::endl; + if( system(( "\"" + program + "\" --update").c_str()) == 0 ) { + std::cout + << std::endl << " -> Wollen sie ihren Befehl mit der alten noch ausführen (oder Programm beenden und neu starten)(Y/n): " << std::flush; + + std::cin.clear(); + inp = ""; + std::getline(std::cin, inp); + + if(inp == "" || inp == "Y" || inp == "y" || inp == "j" || inp == "J") { + return 0; + } else + exit(0); + } + } + + } + } else if (settings->debugMode) + std::cout << "Letzte Update Suche vor " << difDays << " tagen!" << std::endl; + + if(settings->debugMode) + std::cerr << ">>> Debug In " << __FUNCTION__ << ": Exit with success." << std::endl; + return 0; +} + int ProgramManager::checkLastUpdate(Settings *settings, ssize_t *days = nullptr) { + //Wenn die Funktion deaktiviert ist brich ab, wenn nicht nur diffdays verlangt wird if(settings->updateWarningDays == 0 && !days) { if(settings->debugMode) @@ -1362,16 +1451,42 @@ int ProgramManager::updateModus(Settings *settings) //Vergleiche Versionen: switch (pageManager.compareVersions(settings->version, neusteVersion)) { - case 0: + case 0: { std::cout << "\n => Du benützt bereits die neuste Release-Version." << std::endl; + + //Speicher Datum des Updates... + std::ofstream ofs; + ofs.open(settings->lastProgrammUpdateDateFilePath, std::ios::trunc); + if(!ofs.is_open()) { + perror("Konnte UpdateDate-Datei nicht öffnen"); + return 113; + } else { + //Schreibe Liste in das TextFile + ofs << pageManager.getDate() << std::endl; + ofs.close(); + } + return 0; - case 1: + } case 1: //Diese Version ist klleienr als aktuelle Version => Updatete break; - case 2: + case 2: { std::cout << "\n => Du benützt bereits eine Aktuellere Version als die neuste Release-Version." << std::endl; + + //Speicher Datum des Updates... + std::ofstream ofs; + ofs.open(settings->lastProgrammUpdateDateFilePath, std::ios::trunc); + if(!ofs.is_open()) { + perror("Konnte UpdateDate-Datei nicht öffnen"); + return 113; + } else { + //Schreibe Liste in das TextFile + ofs << pageManager.getDate() << std::endl; + ofs.close(); + } + return 0; - default: + } default: //Error return 2; } @@ -1519,6 +1634,18 @@ int ProgramManager::updateModus(Settings *settings) std::cout << ((settings->colorless) ? ("") : "\033[92m") << "\n => Update Erfolgreich ausgeführt: '" << settings->version << "' -> '" << neusteVersion << "'" << ((settings->colorless) ? ("") : "\033[0m") << std::endl; + //Speicher Datum des Updates... + std::ofstream ofs; + ofs.open(settings->lastProgrammUpdateDateFilePath, std::ios::trunc); + if(!ofs.is_open()) { + perror("Konnte UpdateDate-Datei nicht öffnen"); + return 113; + } else { + //Schreibe Liste in das TextFile + ofs << pageManager.getDate() << std::endl; + ofs.close(); + } + return 0; } diff --git a/src/programManager.h b/src/programManager.h index 5034393..f859aec 100644 --- a/src/programManager.h +++ b/src/programManager.h @@ -62,6 +62,8 @@ private: int sucheNach_1_Serien(Settings *settings, PageManager &pageManager, checkNameRply &newNameAndPage); int checkLastUpdate(Settings * settings, ssize_t *days); + int checkLastProgrammUpdate(Settings *settings); + };