From e4651531b201ee51f7c44bdc7d07f919cc5147d1 Mon Sep 17 00:00:00 2001 From: Markus Date: Wed, 21 Aug 2019 16:59:22 +0200 Subject: [PATCH] v 2.4.0: fix error mit startstop epidodenseason &&&& -C kann nun auch textdateien --- parameterManager.cpp | 10 +++++---- parameterManager.h | 4 ++-- programManager.cpp | 52 +++++++++++++++++++++++++------------------- 3 files changed, 38 insertions(+), 28 deletions(-) diff --git a/parameterManager.cpp b/parameterManager.cpp index cde77dd..99b0bf3 100644 --- a/parameterManager.cpp +++ b/parameterManager.cpp @@ -434,9 +434,9 @@ int unterOption_default(Settings *settings, int argc, char ** argv) case 'C': if(!optarg) break; - settings->default_checkDirPath = optarg; + settings->default_checkPath = optarg; if(settings->debugMode) - std::cout << "To check Dir: " << settings->default_checkDirPath << std::endl; + std::cout << "To check Dir/File: " << settings->default_checkPath << std::endl; break; case 'c': settings->colorless = true; @@ -506,8 +506,10 @@ void unterOption_default_help() << std::endl << " > Check-Dir Optionen:" << std::endl << "\t-C [Pfad], --check-dir [Pfad]" << std::endl - << "\t -> Überprüfe ob in diesem, oder in einen der Unterordnern die Folge vorkommt." << std::endl - << "\t -> Wenn ja, dann überspringe diese." << std::endl + << "\t +Ordner -> Überprüfe ob in diesem, oder in einen der Unterordnern (beachte -D und -m) die" << std::endl + << "\t -> Folge vorkommt. Wenn ja, dann überspringe diese." << std::endl + << "\t +Datei -> Überprüfe ob in der angegebenen Textdatei eine Zeile mit dem Muster vorkommt" << std::endl + << "\t -> (beachte -D und -m). Wenn ja, dann überspringe diese." << std::endl << "\t-m, --check-muster" << std::endl << "\t -> Muster mit dem Überprüft wird, ob diese Folge in einem Ordner ist. Default: S%Staffel%E%Folge%" << std::endl << "\t -> %Staffel% ist eine Variable für die Staffel mit 0 + Staffel, wenn Staffel < 10. " << std::endl diff --git a/parameterManager.h b/parameterManager.h index 3931520..bd425a2 100644 --- a/parameterManager.h +++ b/parameterManager.h @@ -37,10 +37,10 @@ struct Settings { proxy_ip = "127.0.0.1", languages = "GerDub,GerSub,Eng", genaueHoster = "Vivo,GoUnlimited", - version = "2.3.2", + version = "2.4.0", defaultFileVersion="1.3", outputFilePath = "", - default_checkDirPath = "", + default_checkPath = "", default_Searchmuster = "S%Staffel%E%Folge%"; Modus modus = Modus::DEFAULT_MODUS; diff --git a/programManager.cpp b/programManager.cpp index c162ee4..907a27d 100644 --- a/programManager.cpp +++ b/programManager.cpp @@ -136,14 +136,14 @@ int ProgramManager::defaultModus(Settings *settings) //Wenn kein Name mit -n Angegeben wurde: if(settings->name == "") { - if(settings->default_checkDirPath != "") { - if(settings->default_checkDirPath[settings->default_checkDirPath.length()-1] == settings->pathSymbol) - settings->default_checkDirPath.pop_back(); - size_t pos = settings->default_checkDirPath.find_last_of(std::string(1, settings->pathSymbol)); + if(settings->default_checkPath != "") { + if(settings->default_checkPath[settings->default_checkPath.length()-1] == settings->pathSymbol) + settings->default_checkPath.pop_back(); + size_t pos = settings->default_checkPath.find_last_of(std::string(1, settings->pathSymbol)); if( pos != std::string::npos) { - settings->name = settings->default_checkDirPath.substr(pos + 1); + settings->name = settings->default_checkPath.substr(pos + 1); if(settings->debugMode) - std::cout << " > Use Path for Name: " << settings->default_checkDirPath << " -> " << settings->name << std::endl; + std::cout << " > Use Path from -C for Name: " << settings->default_checkPath << " -> " << settings->name << std::endl; } } if(settings->name == "") { std::cout << " => Error: Kein Name angegeben." << std::endl; @@ -154,7 +154,7 @@ int ProgramManager::defaultModus(Settings *settings) } //Überprüfe ob ein Muster existiert: - if(settings->default_checkDirPath != "" && settings->default_Searchmuster == "") { + if(settings->default_checkPath != "" && settings->default_Searchmuster == "") { std::cout << " => Error: [-m]: Kein Muster angegeben." << std::endl; return 31; } @@ -162,18 +162,15 @@ int ProgramManager::defaultModus(Settings *settings) //Liste alle Dateien in dem Ornder von -C auf und speichere diese std::string dirFiles; - if(settings->default_checkDirPath != "") - if(listDir(dirFiles, settings->default_checkDirPath, settings->default_maxDirs ) != 0) + if(settings->default_checkPath != "") + if(listDir(dirFiles, settings->default_checkPath, settings->default_maxDirs ) != 0) return 28; - - //Entferne von der liste das \n am ende - if(dirFiles.length() > 0) + if(dirFiles.length() > 0) //Entferne von der liste das \n am ende dirFiles.pop_back(); - - //Wenn Debug Mode, gib die Liste aus - if(settings->debugMode && settings->default_checkDirPath != "") + if(settings->debugMode && settings->default_checkPath != "") //Wenn Debug Mode, gib die Liste aus std::cout << " > [-C] Files:\n" << dirFiles << std::endl; + //Führe Function aus, die überprüft ob die serie existiert std::string nameInUrl =pageManager.checkName(settings->name); if(nameInUrl == "-1") { @@ -224,7 +221,7 @@ int ProgramManager::defaultModus(Settings *settings) //For every season for (int staffel = settings->startSeason; staffel <= maxStaffel; ++staffel) { //Test for stopping Program caused -E, -S - if(staffel > settings->stopSeason && settings->stopSeason >= 1) { + if(staffel > settings->stopSeason && settings->stopSeason > 0) { if(settings->debugMode) std::cout << " > Stoppe, weil Staffel: " << staffel << " > StopStaffel " << settings->stopSeason << std::endl; std::cout << " > Fertig, da Staffel " << staffel << " größer ist als StopStaffel " << settings->stopSeason << std::endl; @@ -242,15 +239,15 @@ int ProgramManager::defaultModus(Settings *settings) //for every episode for (int folge = settings->startEpisode; folge <= maxFolge; ++folge) { - // stoppe wenn stopfolge größer der folge ist und stopstaffel nicht gesetzt wurde. - if(folge > settings->stopEpisode && settings->stopSeason < 1) { + // stoppe wenn stopfolge größer der folge ist und stopstaffel nicht gesetzt wurde. und stopepisode gröser 0, also aktiv ist + if(folge > settings->stopEpisode && settings->stopSeason < 1 && settings->stopEpisode > 0) { if(settings->maxThreads != 0) if(waitForThreads() != 0) return 261; std::cout << " > Fertig, da Folge " << folge << " größer ist als Stopfolge " << settings->stopEpisode << "."<< std::endl; return 0; - } else if ( folge > settings->stopEpisode && staffel >= settings->stopSeason) { // stoppe wenn stopfolge > folge && stopstaffel >= staffel + } else if ( folge > settings->stopEpisode && staffel >= settings->stopSeason && settings->stopEpisode > 0) { // stoppe wenn stopfolge > folge && stopstaffel >= staffel und stopepisode gröser 0, also aktiv ist if(settings->maxThreads != 0) if(waitForThreads() != 0) return 267; @@ -260,7 +257,7 @@ int ProgramManager::defaultModus(Settings *settings) } //Überprüfe ob, wenn -C vorhanden, die Folge in dem Ordner bereits vorkommt. - if(settings->default_checkDirPath != "") { + if(settings->default_checkPath != "") { if(dirFiles.find(pageManager.replace( pageManager.replace( settings->default_Searchmuster, "%Staffel%", ((staffel < 10) ? "0" : "") + std::to_string(staffel) ), "%Folge%", ((folge < 10) ? "0" : "") + std::to_string(folge) ) ) != std::string::npos) { if(settings->debugMode) @@ -617,10 +614,21 @@ int ProgramManager::searchModus_update(Settings *settings) int ProgramManager::listDir(std::string &list,std::string path, int maxDepth) { - if(maxDepth <= 0) + //Wenn Pfad zu einem TextFile geht + if(fileExists(path)) { + std::ifstream ifs(path); + if(!ifs.is_open()) { + perror(" => Error: Konnte Textdatei nicht öffnen."); + return -1; + } + list = std::string((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + return 0; + + } // Sonst normal Ordner listen + else if(maxDepth <= 0) return 0; else if(!dirExists(path)) { - std::cout << " => Error: Verzeichnis '" << path << "' existiert nicht oder ist kein Ordner." << std::endl; + std::cout << " => Error: Verzeichnis '" << path << "' existiert nicht oder ist kein Ordner oder Textdatei." << std::endl; return -1; } else