forked from markus/S_New4
133 lines
4.0 KiB
C++
133 lines
4.0 KiB
C++
#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)
|
|
{
|
|
std::cout << "Default Modus" << std::endl;
|
|
|
|
AccountManager accountManager(settings->accountFilePath);
|
|
std::string nameInUrl =pageManager.checkName(settings->name);
|
|
if(nameInUrl == "-1")
|
|
return 25;
|
|
else if (pageManager.login(accountManager.getNextAccount()) != 0)
|
|
return 29;
|
|
|
|
//Find out number of all seasons
|
|
Reply tmp_reply = pageManager.getServerRequest(pageManager.UrlPraefix + nameInUrl);
|
|
int maxStaffel = pageManager.counterContains(tmp_reply.html, "/staffel-%i");
|
|
//For every season
|
|
for (int staffel = 1; staffel <= maxStaffel; ++staffel) {
|
|
|
|
//Find out number of all episodes
|
|
tmp_reply = pageManager.getServerRequest(pageManager.UrlPraefix + nameInUrl + "/staffel-" + std::to_string(staffel));
|
|
int maxFolge = pageManager.counterContains(tmp_reply.html, "/episode-%i");
|
|
//for every episode
|
|
for (int folge = 1; folge <= maxFolge; ++folge) {
|
|
|
|
tmp_reply =pageManager.getServerRequest(pageManager.UrlPraefix + nameInUrl + "/staffel-" + std::to_string(staffel) + "/episode-" + std::to_string(folge));
|
|
std::string allLinks = pageManager.getLinks(tmp_reply.html);
|
|
std::string Link = pageManager.chooseHosterLink(allLinks, "GoUnlimited", "GerDub,Eng,GerSub");
|
|
|
|
std::cout << " -> Link: " << Link << std::endl;
|
|
if(convertLink(Link, &accountManager, settings, staffel, folge, allLinks) != 0)
|
|
return 51;
|
|
|
|
} std::cout << "season: " << staffel << " hat " << maxFolge << " folgen" << std::endl;
|
|
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int ProgramManager::directLinkModus(Settings *settings)
|
|
{
|
|
std::cout << "Direct Link Modus" << std::endl;
|
|
|
|
AccountManager accountManager(settings->accountFilePath);
|
|
std::istringstream iStrStream( pageManager.replace( settings->name, ",", "\n" ) + "\n" );
|
|
std::string line;
|
|
|
|
while (getline(iStrStream, line).good()) {
|
|
if(line.find("://s.to/redirect/") == std::string::npos) {
|
|
std::cout << "Invalid Redirect Link: '" << line << "'" << std::endl;
|
|
continue;
|
|
}
|
|
if(convertLink(line, &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 ));
|
|
if(redirectLink == "") {
|
|
std::cout << " => " << ( (allLinks == "" ) ? "KEINEN" : "Keinen PASSENDEN" ) << " Hoster für die Folge " << folgenID << " gefunden." << std::endl;
|
|
return 0;
|
|
}
|
|
|
|
for (int i = 1; i <= 4; ++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(pageManager.login(accountManager->getNextAccount()) != 0)
|
|
return -1;
|
|
continue;
|
|
}
|
|
else {
|
|
std::cout << " => " << folgenID << ": " << ((settings->color) ? "\033[33m" : "") << newUrl << "\033[0m" << std::endl;
|
|
return 0;
|
|
}
|
|
}
|
|
std::cout << " => " << ": " << ((settings->color) ? "\033[32m" : "") << "https://s.to" << redirectLink << "\033[0m" << std::endl;
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|