#include "programManager.h" ProgramManager::ProgramManager() { } int ProgramManager::start(Settings setting) { switch (setting.modus) { case Modus::DEFAULT_MODUS: return defaultModus(&setting); case Modus::DIRECT_LINK_MODUS: return directLinkModus(&setting); default: return -1; } } int ProgramManager::defaultModus(Settings *settings) { AccountManager accountManager(settings->accountFilePath, settings->accountNumberPath); pageManager.setProxy(settings->proxy_ip, settings->proxy_port); pageManager.setCookieFilePath(settings->cookieFilePath); pageManager.setDebugMode(settings->debugMode); if(settings->name == "") { std::cout << "Kein Name angegeben: Missing Parameter -n [Name]." << std::endl; return 27; } std::string nameInUrl =pageManager.checkName(settings->name); if(nameInUrl == "-1") return 25; else if (pageManager.login(accountManager.getNextAccount()) != 0) return 29; pageManager.writeToFile(settings->outputFilePath, "Name: " + settings->name); //Find out number of all seasons Reply tmp_reply = pageManager.getServerRequest(pageManager.UrlPraefix + nameInUrl); if(tmp_reply.html == "-1") return 32; int maxStaffel = pageManager.counterContains(tmp_reply.html, "/staffel-%i"); if(settings->debugMode) std::cout << "Die Serie " << settings->name << " hat " << maxStaffel << " Staffeln." << std::endl; //For every season for (int staffel = settings->startSeason; staffel <= maxStaffel; ++staffel) { //Find out number of all episodes tmp_reply = pageManager.getServerRequest(pageManager.UrlPraefix + nameInUrl + "/staffel-" + std::to_string(staffel)); if(tmp_reply.html == "-1") return 40; int maxFolge = pageManager.counterContains(tmp_reply.html, "/episode-%i"); if(settings->debugMode) std::cout << "Die Staffel " << staffel << " hat " << maxFolge << " Folgen." << std::endl; //for every episode for (int folge = settings->startEpisode; folge <= maxFolge; ++folge) { tmp_reply =pageManager.getServerRequest(pageManager.UrlPraefix + nameInUrl + "/staffel-" + std::to_string(staffel) + "/episode-" + std::to_string(folge)); if(tmp_reply.html == "-1") return 47; std::string allLinks = pageManager.getLinks(tmp_reply.html); std::string Link = pageManager.chooseHosterLink(allLinks, settings->genaueHoster, settings->languages); if(settings->debugMode) std::cout << allLinks << std::endl << " -> Link: '" << ( (Link == "") ? "" : "https://s.to") << Link << "'" << std::endl; if(convertLink(Link, &accountManager, settings, staffel, folge, allLinks) != 0) return 51; if(folge == settings->stopEpisode && settings->stopSeason < 1) // stoppe wenn stopfolge gleich der folge ist und stopstaffel nicht gesetzt wurde. return 0; else if ( folge == settings->stopEpisode && staffel == settings->stopSeason) // stoppe wenn stopfolge = folge && stopstaffel == staffel return 0; } //Setzte Startepisode zurück für nächste Staffel settings->startEpisode = 1; if(staffel == settings->stopSeason) { if(settings->debugMode) std::cout << "Stoppe, weil Staffel: " << staffel << " == StopStaffel " << settings->stopSeason << std::endl; break; } } return 0; } int ProgramManager::directLinkModus(Settings *settings) { AccountManager accountManager(settings->accountFilePath, settings->accountNumberPath); pageManager.setCookieFilePath(settings->cookieFilePath); pageManager.setProxy(settings->proxy_ip, settings->proxy_port); pageManager.setDebugMode(settings->debugMode); if(settings->name == "") { std::cout << "Kein(e) Link(s) angegeben: Missing Parameter -u [Url]." << std::endl; return 76; } std::istringstream iStrStream( pageManager.replace( settings->name, ",", "\n" ) + "\n" ); std::string line; if(pageManager.login(accountManager.getNextAccount()) != 0) return 71; while (getline(iStrStream, line).good()) { if(line.find("https://s.to/redirect/") == std::string::npos) { std::cout << "Invalid Redirect Link: '" << line << "'" << std::endl; continue; } else if(convertLink(pageManager.replace(line, "https://s.to", ""), &accountManager, settings) != 0) return 78; } return 0; } int ProgramManager::convertLink(std::string redirectLink, AccountManager * accountManager, Settings * settings, int Staffel, int Folge, std::string allLinks) { std::string folgenID = std::string((Staffel == -1 || Folge == -1 ) ? "" : "S" + std::string( (Staffel < 10) ? "0" : "" ) + std::to_string(Staffel) + "E" + std::string( (Folge < 10) ? "0" : "" ) + std::to_string( Folge ) + ": "); std::string green = ((settings->colorless) ? "" : "\033[32m"), red = ((settings->colorless) ? "" : "\033[31m"), orange =((settings->colorless) ? "" : "\033[33m"), blue = ((settings->colorless) ? "" : "\033[34m"); if(redirectLink == "" && settings->modus == Modus::DEFAULT_MODUS) { if(allLinks == "") { std::cout << " => " << red << "KEINEN Hoster für die Folge " << folgenID << " gefunden." << "\033[0m" << std::endl; if(pageManager.writeToFile(settings->outputFilePath, std::string("KEINEN Hoster für die Folge ") + folgenID + std::string(" gefunden.")) != 0) return 130; } else { std::cout << " => " << orange << "Keinen PASSENDEN Hoster für die Folge " << folgenID << " gefunden." << "\033[0m" << std::endl << "Alle Links:" << std::endl << allLinks << std::endl; if(pageManager.writeToFile(settings->outputFilePath, std::string("Keinen PASSENDEN Hoster für die Folge ") + folgenID + std::string(" gefunden.")) != 0) return 138; } return 0; } for (int i = 1; i <= 3; ++i) { std::string newUrl = pageManager.getUrlAfterRedirect("https://s.to" + redirectLink); if (newUrl == "-1") { return 102; } else if(newUrl.find("/s.to/redirect/") != std::string::npos ) { if(settings->debugMode) std::cout << "Redirect Link nach umwandlung --> Neuer Account" << std::endl; if(pageManager.login(accountManager->getNextAccount()) != 0) return -1; continue; } else { std::cout << " => " << folgenID << green << newUrl << "\033[0m" << std::endl; if(settings->outputFilePath != "") if(pageManager.writeToFile(settings->outputFilePath,folgenID + newUrl) != 0) return 108; return 0; } } std::cout << " => " << folgenID << red << "https://s.to" << redirectLink << "\033[0m" << std::endl; if(settings->outputFilePath != "") if(pageManager.writeToFile(settings->outputFilePath, folgenID + redirectLink) != 0) return 114; return 0; }