From 5ae309f86fbd9b33eb98dfc868f603c79a3fcc5c Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 31 Mar 2022 18:52:36 +0200 Subject: [PATCH] vKa...again with new lib, but deactivate ssl check? idk if better, but laos no page found check --- src/S_New4.pro | 4 ++-- src/accountManager.cpp | 2 -- src/main.cpp | 2 ++ src/pageManager.cpp | 40 ++++++++++++++++++++++++++++++++-------- src/pageManager.h | 8 ++++++-- src/parameterManager.cpp | 7 ++++++- src/parameterManager.h | 4 ++-- src/programManager.cpp | 22 +++++++++++++++++++--- 8 files changed, 69 insertions(+), 20 deletions(-) diff --git a/src/S_New4.pro b/src/S_New4.pro index 522892c..b53bd3b 100644 --- a/src/S_New4.pro +++ b/src/S_New4.pro @@ -5,8 +5,8 @@ CONFIG += -static -libstdc++ -static-libgcc #-static unix: LIBS += -lcurl #Windows -#win32: LIBS += -L$${_PRO_FILE_PWD_}\..\lib\ -lcurl # 7.82.0 -win32: LIBS += -L$${_PRO_FILE_PWD_}\..\alt\ -lcurl # 7.64.1 +win32: LIBS += -L$${_PRO_FILE_PWD_}\..\lib\ -lcurl # 7.82.0 +#win32: LIBS += -L$${_PRO_FILE_PWD_}\..\alt\ -lcurl # 7.64.1 CONFIG += c++17 console diff --git a/src/accountManager.cpp b/src/accountManager.cpp index 27c991e..41ff687 100644 --- a/src/accountManager.cpp +++ b/src/accountManager.cpp @@ -72,14 +72,12 @@ int AccountManager::writeDefault(std::string path) STO, ANICLOUD, STOIP, - SERIENSTREAMSX, SERIENCAM, SERIENSTREAMTO }; if( pageInUse.url == pagesALL[STO].url || pageInUse.url == pagesALL[STOIP].url - || pageInUse.url == pagesALL[SERIENSTREAMSX].url || pageInUse.url == pagesALL[SERIENCAM].url || pageInUse.url == pagesALL[SERIENSTREAMTO].url) { diff --git a/src/main.cpp b/src/main.cpp index 64ebd57..990cd6b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,7 @@ #include "programManager.h" + + int main(int argc, char *argv[]) { ProgramManager mainProgram; diff --git a/src/pageManager.cpp b/src/pageManager.cpp index 5ed49e3..572b1fb 100644 --- a/src/pageManager.cpp +++ b/src/pageManager.cpp @@ -112,6 +112,14 @@ Reply PageManager::getServerRequest(std::string protocol, std::string Url, bool //curl_easy_setopt(curl, CURLOPT_FAILONERROR, true); // html errors to errorcode res //curl_easy_setopt(curl, CURLOPT_NOPROGRESS, false); // Progressausgabe aktivieren + +#ifdef noSLLCheck + // TODO: SET IT BACK + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); +#endif + + curl_easy_setopt(curl, CURLOPT_URL, Url.c_str()); //Url für Curl curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); //follows redirection curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); // Funktion zum Speichern des outputs in einem string @@ -204,6 +212,13 @@ int PageManager::downLoadToFile(std::string filePath, std::string url) return 2; } +#ifdef noSLLCheck + // TODO: SET IT BACK + curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 0); +#endif + + /* set URL to get here */ curl_easy_setopt(curl_handle, CURLOPT_URL, url.c_str()); @@ -301,7 +316,7 @@ Reply PageManager::getUrlAfterRedirect( std::string p,std::string Url, std::stri return getServerRequest(p , Url, true, "", false, true, cookieFilePath); } -checkNameRply PageManager::checkName(std::vector pages, std::string Name, bool useFirstPage) +checkNameRply PageManager::checkName(std::vector &pages, std::string Name, bool useFirstPage) { if(pages.size() < 1) { std::cout << " => Error Keine Internet Seiten vorhanden." << std::endl; @@ -317,9 +332,9 @@ checkNameRply PageManager::checkName(std::vector pages, std::string Name, PAGE Page; //für jede Seite - for ( const auto &p : pages ) { + for ( unsigned i = 0; i < pages.size(); i++ ) { - std::string html = getServerRequest(p.protocol, p.url + p.UrlDir + name).html; + std::string html = getServerRequest(pages.at(i).protocol, pages.at(i).url + pages.at(i).UrlDir + name).html; if(html.find("Die gewünschte Serie wurde nicht gefunden oder ist im Moment deaktiviert.") != std::string::npos) { continue; @@ -328,14 +343,17 @@ checkNameRply PageManager::checkName(std::vector pages, std::string Name, continue; } else if (html == "-1" || html == "") { - std::cout << "\33[2K\r" <<" => WARNUNG: Das laden der Seite : '" << p.url << "' ist fehlgeschlagen" << std::endl; + std::cout << "\33[2K\r" <<" => WARNUNG: Das laden der Seite : '" << pages.at(i).url << "' ist fehlgeschlagen" << std::endl; + + pages.erase(pages.begin() + i); + i--; continue; } else { count ++; - pagesonExist += p.url + " "; - Page = p; + pagesonExist += pages.at(i).url + " "; + Page = pages.at(i); if(useFirstPage) { if(debugMode) @@ -352,8 +370,14 @@ checkNameRply PageManager::checkName(std::vector pages, std::string Name, } else if ( count > 1) { std::cout << "\33[2K\r => Die Serie existiert auf mehreren Seiten " << name << ": '" << pagesonExist << "'" << std::endl; std::cout << "\33[2K\r Benutze die Option -f --use-first, um automatisch die 1. Seite zu verwenden!" << std::endl; - return checkNameRply("", PAGE(), checkNameRply::NOTHING_FOUND); //MULTIPLE OPTIONS FOUND!!!! same option -> führe suche funktion aus - } else { + return checkNameRply("", PAGE(), checkNameRply::MULTIPLE_OPTIONS); //MULTIPLE OPTIONS FOUND!!!! same option -> führe suche funktion aus + + } else if( count == 0 && pages.size() == 0) { + //keine suche wenn es keine funktionierende seite gibt + return checkNameRply("", PAGE(), checkNameRply::NO_WORKING_PAGE); + + } // führe suche aus... + else { std::cout << "\33[2K\r => Die gewünschte Serie wurde nicht gefunden oder ist im Moment deaktiviert: '" << Name << "'" << std::endl; return checkNameRply("", PAGE(), checkNameRply::NOTHING_FOUND); } diff --git a/src/pageManager.h b/src/pageManager.h index 33b123e..3aae7f9 100644 --- a/src/pageManager.h +++ b/src/pageManager.h @@ -8,6 +8,10 @@ #ifdef _WIN32 #include "./../include/curl/curl.h" #include + +//----------------------????????????????? +#define noSLLCheck + #else #include "curl/curl.h" #endif @@ -29,7 +33,7 @@ struct Reply { struct checkNameRply { std::string name; PAGE pageInUse; - enum STATUS { SUCCESS, FAILED, NOTHING_FOUND } status; + enum STATUS { SUCCESS, FAILED, NOTHING_FOUND, MULTIPLE_OPTIONS, NO_WORKING_PAGE } status; checkNameRply(const std::string &name, const PAGE &p, const checkNameRply::STATUS &s ) : name(name), pageInUse(p), status(s) {} @@ -52,7 +56,7 @@ public: int login(PAGE page, Account account, std::string cookieFilePath); Reply getUrlAfterRedirect(std::string p, std::string Url, std::string cookieFilePath); - checkNameRply checkName(std::vector pages, std::string Name, bool useFirstPage); + checkNameRply checkName(std::vector &pages, std::string Name, bool useFirstPage); std::string getLinks(std::string HTML); std::string chooseHosterLink(std::string HosterList, std::string Hoster_with_Highst_Priority_at_First, std::string languages_with_highst_priority_at_first, bool withWarnMsg); std::string getLinkAfterHosterBasedOperation(std::string url); diff --git a/src/parameterManager.cpp b/src/parameterManager.cpp index 2a68d3c..729fab6 100644 --- a/src/parameterManager.cpp +++ b/src/parameterManager.cpp @@ -217,7 +217,7 @@ int loadDefaulOptions(Settings &settings) ofs << "# (anicloud.ion/serienstream.sx) - Der Priorität nach angeben!" << std::endl; ofs << "# Kombinierbar mit -f - Verwende erste Seite" << std::endl; ofs << "# Unterstützte Seiten:" << std::endl; - ofs << "# s.to, 190.115.18.20, anicloud.io, serienstream.to, serienstream.sx, serien.cam" << std::endl; + ofs << "# s.to, 190.115.18.20, anicloud.io, serienstream.to, serien.cam, all" << std::endl; ofs << "Internetseiten=anicloud.io,serienstream.sx" << std::endl << std::endl; ofs << "# -> Standart Wert für Parameter: -f, --use-first:" << std::endl; @@ -1837,6 +1837,11 @@ int setUpInternetPages(Settings &settings, std::string optarg) while(std::getline(ss, value, ',')) { if(value == "") continue; + else if(value == "all") { + for( const auto & internetSeite : settings.pagesALL ) + settings.pagesInUse.push_back(internetSeite); + break; + } bool found = false; for( const auto & internetSeite : settings.pagesALL ) { if( value == internetSeite.url ) { diff --git a/src/parameterManager.h b/src/parameterManager.h index 99dc4e8..78fc85d 100644 --- a/src/parameterManager.h +++ b/src/parameterManager.h @@ -73,10 +73,10 @@ struct Settings { _stoIP = PAGE( "", "190.115.18.20", "Normale_Serien", "/serien-alphabet", "/serie/stream/"), serienstreamto = PAGE("https://", "serienstream.to", "Normale_Serien", "/serien-alphabet", "/serie/stream/"), seriencam = PAGE("https://", "serien.cam", "Normale_Serien", "/serien-alphabet", "/serie/stream/"), - _serienstreamsx = PAGE( "https://", "serienstream.sx", "Normale_Serien", "/serien-alphabet", "/serie/stream/"), + // _serienstreamsx = PAGE( "https://", "serienstream.sx", "Normale_Serien", "/serien-alphabet", "/serie/stream/"), _anicio = PAGE( "https://" , "anicloud.io", "Animes", "/animes-alphabet", "/anime/stream/"); - const PAGE pagesALL[6] = { _sto, _anicio, _stoIP, _serienstreamsx, seriencam, serienstreamto }; + const PAGE pagesALL[5] = { _sto, _anicio, _stoIP, /*_serienstreamsx,*/ seriencam, serienstreamto }; std::vector pagesInUse; // Priority sorted bool useFirstPage = false; diff --git a/src/programManager.cpp b/src/programManager.cpp index cb56974..88ab1d6 100644 --- a/src/programManager.cpp +++ b/src/programManager.cpp @@ -364,13 +364,19 @@ int ProgramManager::sucheNach_1_Serien(Settings *settings, PageManager &pageMana auto ret = pageManager.checkName( pages /*settings->pages dann glaub ich immer fehler, wenn serie auf 2 seiten excistiert*/, finds, settings->useFirstPage); - if(ret.status == ret.FAILED) + if(ret.status == ret.FAILED || ret.status == ret.MULTIPLE_OPTIONS) return 23; else if( ret.status == ret.NOTHING_FOUND ) { std::cout << " => Error: Konnte die von der Suche vorgeschlagene Serie nicht finden." << std::endl; if(settings->debugMode) std::cerr << ">>> Debug In " << __FUNCTION__ << ": Extracted Name from searchModus is invalid." << std::endl; return 47; + } else if( ret.status == ret.NO_WORKING_PAGE ) { + std::cout << " => Error: Keine Funktionierende Internetseite!" << std::endl; + if(settings->debugMode) + std::cerr << ">>> Debug In " << __FUNCTION__ << ": Keine Funktionierende Internetseite!" << std::endl; + return 0; + } else { //speichere neuen Namen in übergebenen ref var newNameAndPage.name = ret.name; @@ -569,7 +575,7 @@ int ProgramManager::defaultModus(Settings *settings) if(retVal.status == retVal.FAILED) return 67; - else if(retVal.status == retVal.NOTHING_FOUND) { + else if(retVal.status == retVal.NOTHING_FOUND || retVal.status == retVal.MULTIPLE_OPTIONS) { //Wenn nicht, dann fühe noch eine Suche nach ähnlichen durch && Wenn nur 1ne dacnn frag ob es diese ist. int res = 0; if( ( res = sucheNach_1_Serien(settings, pageManager, retVal) ) != 0) { @@ -577,6 +583,11 @@ int ProgramManager::defaultModus(Settings *settings) std::cerr << ">>> Debug In " << __FUNCTION__ << ": sucheNach_1_Serien failed or found more options." << std::endl; return (res == -10101) ? 0 : 202; } + } else if( retVal.status == retVal.NO_WORKING_PAGE ) { + std::cout << " => Error: Keine Funktionierende Internetseite!" << std::endl; + if(settings->debugMode) + std::cerr << ">>> Debug In " << __FUNCTION__ << ": Keine Funktionierende Internetseite!" << std::endl; + return 0; } std::string nameInUrl = retVal.name; @@ -1041,7 +1052,7 @@ int ProgramManager::infoModus(Settings *settings) auto retV = pageManager.checkName(settings->pagesInUse, settings->name, settings->useFirstPage); if(retV.status == retV.FAILED) return 145; - else if(retV.status == retV.NOTHING_FOUND) { + else if(retV.status == retV.NOTHING_FOUND || retV.status == retV.MULTIPLE_OPTIONS ) { //Wenn nicht, dann fühe noch eine Suche nach ähnlichen durch. int res = 0; if( ( res = sucheNach_1_Serien(settings, pageManager, retV) ) != 0) { @@ -1049,6 +1060,11 @@ int ProgramManager::infoModus(Settings *settings) std::cerr << ">>> Debug In " << __FUNCTION__ << ": sucheNach_1_Serien function failed." << std::endl; return (res == -10101) ? 0 : 28; } + } else if( retV.status == retV.NO_WORKING_PAGE ) { + std::cout << " => Error: Keine Funktionierende Internetseite!" << std::endl; + if(settings->debugMode) + std::cerr << ">>> Debug In " << __FUNCTION__ << ": Keine Funktionierende Internetseite!" << std::endl; + return 0; } std::string nameInUrl = retV.name; PAGE page = retV.pageInUse;