Series: Fixed Passing Series Name to Season

This commit is contained in:
Moss 2023-02-07 21:31:40 -08:00
parent d3fb182e87
commit 2ade05b175
No known key found for this signature in database
GPG Key ID: F539D4A506C954F9
2 changed files with 25 additions and 21 deletions

View File

@ -28,7 +28,7 @@ namespace dropout_dl {
return "ERROR"; return "ERROR";
} }
std::vector<season> series::get_seasons(const std::string &html_data, const std::vector<cookie>& cookies) { std::vector<season> series::get_seasons(const std::vector<cookie>& cookies) {
std::vector<season> out; std::vector<season> out;
std::string search_class("js-switch-season"); std::string search_class("js-switch-season");
@ -43,35 +43,35 @@ namespace dropout_dl {
bool seasons_dropdown = false; bool seasons_dropdown = false;
std::string season_url; std::string season_url;
std::string season_name; std::string season_name;
for (int i = 0; i < html_data.size(); i++) { for (int i = 0; i < this->page_data.size(); i++) {
if (substr_is(html_data, i, open_select)) { if (substr_is(this->page_data, i, open_select)) {
for (int j = i; j < html_data.size(); j++) { for (int j = i; j < this->page_data.size(); j++) {
if (substr_is(html_data, j, search_class)) { if (substr_is(this->page_data, j, search_class)) {
i = j; i = j;
seasons_dropdown = true; seasons_dropdown = true;
break; break;
} }
else if (substr_is(html_data, j, close_tag)) { else if (substr_is(this->page_data, j, close_tag)) {
break; break;
} }
} }
} }
if (seasons_dropdown) { if (seasons_dropdown) {
if (substr_is(html_data, i, value)) { if (substr_is(this->page_data, i, value)) {
i += value.size() + 1; i += value.size() + 1;
for (int j = 0; j + i < html_data.size(); j++) { for (int j = 0; j + i < this->page_data.size(); j++) {
if (html_data[i + j] == '"') { if (this->page_data[i + j] == '"') {
season_url = html_data.substr(i, j); season_url = this->page_data.substr(i, j);
i += j; i += j;
break; break;
} }
} }
} }
else if (!season_url.empty() && substr_is(html_data, i, close_tag)) { else if (!season_url.empty() && substr_is(this->page_data, i, close_tag)) {
i += close_tag.size() + 1; i += close_tag.size() + 1;
for (int j = 0; i + j < html_data.size(); j++) { for (int j = 0; i + j < this->page_data.size(); j++) {
if (html_data[i + j] == '\n') { if (this->page_data[i + j] == '\n') {
season_name = html_data.substr(i, j); season_name = this->page_data.substr(i, j);
// Remove leading and trailing whitespace // Remove leading and trailing whitespace
bool leading_whitespace = true; bool leading_whitespace = true;
@ -91,7 +91,7 @@ namespace dropout_dl {
} }
season_name = season_name.substr(name_start, season_name.size() - name_start - name_end); season_name = season_name.substr(name_start, season_name.size() - name_start - name_end);
out.emplace_back(season_url, season_name, cookies); out.emplace_back(season_url, season_name, cookies, this->name, this->download_captions);
std::cout << out.back().name << ": " << out.back().url << '\n'; std::cout << out.back().name << ": " << out.back().url << '\n';
@ -105,7 +105,7 @@ namespace dropout_dl {
} }
} }
if (substr_is(html_data, i, close_select)) { if (substr_is(this->page_data, i, close_select)) {
break; break;
} }
} }

View File

@ -24,6 +24,10 @@ namespace dropout_dl {
std::string series_directory; std::string series_directory;
/// A vector containing all the season that this series include /// A vector containing all the season that this series include
std::vector<season> seasons; std::vector<season> seasons;
/// A vector containing the cookies needed to download episodes
std::vector<dropout_dl::cookie> cookies;
/// Whether or not to download captions
bool download_captions;
/** /**
* *
@ -36,15 +40,13 @@ namespace dropout_dl {
/** /**
* *
* @param html_data - The series page data
* @param cookies - The cookies from a browser * @param cookies - The cookies from a browser
* @return A list of all seasons in the series
* *
* Scrapes the series page for the names and link of all the season. Creates season objects for each of these. * Scrapes the series page for the names and link of all the season. Creates season objects for each of these.
* These season object contain all the episodes of the season as episode objects. * These season object contain all the episodes of the season as episode objects.
* The cookies this function takes are passed to the episode objects. * The cookies this function takes are passed to the episode objects.
*/ */
static std::vector<season> get_seasons(const std::string& html_data, const std::vector<cookie>& cookies); std::vector<season> get_seasons(const std::vector<cookie>& cookies);
/** /**
* *
@ -72,10 +74,12 @@ namespace dropout_dl {
* *
* Creates a series object and populates the needed variables * Creates a series object and populates the needed variables
*/ */
explicit series(const std::string& url, const std::vector<dropout_dl::cookie>& cookies) { series(const std::string& url, const std::vector<dropout_dl::cookie>& cookies, bool download_captions = false) {
this->url = url; this->url = url;
this->download_captions = download_captions;
this->page_data = get_generic_page(url); this->page_data = get_generic_page(url);
this->name = get_series_name(page_data); this->name = get_series_name(page_data);
this->cookies = cookies;
if (name == "ERROR") { if (name == "ERROR") {
std::cerr << "SERIES PARSE ERROR: Could not parse series name\n"; std::cerr << "SERIES PARSE ERROR: Could not parse series name\n";
exit(10); exit(10);
@ -83,7 +87,7 @@ namespace dropout_dl {
this->series_directory = format_filename(name); this->series_directory = format_filename(name);
this->seasons = get_seasons(page_data, cookies); this->seasons = this->get_seasons(cookies);
} }
}; };