From cfc9ef1cade470f6d2a7ba67c625eb8c11ff2743 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Tue, 16 Jul 2024 20:27:53 +0200 Subject: Add fallback urls for rss (right now, fallback nyaa.si to nyaa.land) --- src/rss.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'src/rss.c') diff --git a/src/rss.c b/src/rss.c index c8bdd2d..780deee 100644 --- a/src/rss.c +++ b/src/rss.c @@ -220,7 +220,7 @@ static void url_escape(const char *str, char *output) { } } -static int get_rss_url_from_episode_info(const char *episode_name, EpisodeInfo *episode_info, char *rss_url) { +static int get_rss_url_from_episode_info(const char *episode_name, EpisodeInfo *episode_info, char *rss_url, fallback *fall) { char *selected_submitter = NULL; char response[512]; char group_name_escaped[1536]; @@ -247,7 +247,7 @@ static int get_rss_url_from_episode_info(const char *episode_name, EpisodeInfo * return -1; } - if(is_header_response_ok(url) == 0) { + if(is_header_response_ok(url, fall) == 0) { selected_submitter = response_str; break; } else { @@ -296,13 +296,17 @@ static int get_rss_url_from_episode_info(const char *episode_name, EpisodeInfo * return 0; } -int add_rss(const char *name, char *url, char *rss_config_dir, const char *start_after) { +int add_rss(const char *name, char *url, char *rss_config_dir, const char *start_after, fallback *fall) { int result = 0; char rss_url[4096]; Buffer buffer; buffer_init(&buffer); - result = download_to_buffer(url, &buffer); + + Buffer download_items_buffer; + buffer_init(&download_items_buffer); + + result = download_to_buffer(url, &buffer, fall); if(result != 0) { EpisodeInfo episode_info; if(episode_info_create_from_episode_name(&episode_info, url) != 0) { @@ -310,7 +314,7 @@ int add_rss(const char *name, char *url, char *rss_config_dir, const char *start goto cleanup; } - if(get_rss_url_from_episode_info(url, &episode_info, rss_url) != 0) + if(get_rss_url_from_episode_info(url, &episode_info, rss_url, fall) != 0) goto cleanup; /* User didn't want to track rss */ @@ -325,16 +329,13 @@ int add_rss(const char *name, char *url, char *rss_config_dir, const char *start url = rss_url; buffer_clear(&buffer); - result = download_to_buffer(url, &buffer); + result = download_to_buffer(url, &buffer, fall); if(result != 0) { fprintf(stderr, "Failed to download rss: %s\n", url); goto cleanup; } } - Buffer download_items_buffer; - buffer_init(&download_items_buffer); - char *rss_title = NULL; result = parse_rss(buffer.data, &rss_title, rss_parse_add_callback, &download_items_buffer); if(result != 0) { @@ -427,7 +428,7 @@ int add_rss(const char *name, char *url, char *rss_config_dir, const char *start } size_t num_download_items = download_items_start ? (((DownloadItemsData*)buffer_end(&download_items_buffer)) - download_items_start) : 0; - result = write_plugin_json_to_file(rss_tracked_dir, "data", url, updated, download_items_start, num_download_items, NULL); + result = write_plugin_json_to_file(rss_tracked_dir, "data", url, updated, download_items_start, num_download_items, NULL, fall); if(result != 0) { fprintf(stderr, "Failed to create %s/data\n", rss_tracked_dir); remove_recursive(rss_tracked_dir); @@ -484,7 +485,7 @@ static int int_min(int a, int b) { return a < b ? a : b; } -static int add_torrents_in_reverse(TransmissionSession *transmission_session, Buffer *download_items_buffer, TrackedRss *tracked_rss, char *rss_tracked_dir) { +static int add_torrents_in_reverse(TransmissionSession *transmission_session, Buffer *download_items_buffer, TrackedRss *tracked_rss, char *rss_tracked_dir, fallback *fall) { int result = 0; char *torrent_names[MAX_UPDATE_ITEMS]; DownloadItemsData *added_download_items[MAX_UPDATE_ITEMS]; @@ -514,9 +515,8 @@ static int add_torrents_in_reverse(TransmissionSession *transmission_session, Bu TrackedItem tracked_item; tracked_item.title = tracked_rss->title; - tracked_item.link = tracked_rss->link; tracked_item.json_data = tracked_rss->json_data; - result = tracked_item_update_latest(&tracked_item, rss_tracked_dir, added_download_items, torrent_names, timestamps, torrent_name_index); + result = tracked_item_update_latest(&tracked_item, rss_tracked_dir, added_download_items, torrent_names, timestamps, torrent_name_index, fall); for(int i = 0; i < torrent_name_index; ++i) { free(torrent_names[i]); @@ -526,7 +526,7 @@ static int add_torrents_in_reverse(TransmissionSession *transmission_session, Bu return result; } -int sync_rss(TrackedRss *tracked_rss, TransmissionSession *transmission_session, char *rss_config_dir) { +int sync_rss(TrackedRss *tracked_rss, TransmissionSession *transmission_session, char *rss_config_dir, fallback *fall) { /* TODO: This can be cached */ int rss_config_dir_len = strlen(rss_config_dir); @@ -538,7 +538,7 @@ int sync_rss(TrackedRss *tracked_rss, TransmissionSession *transmission_session, Buffer rss_data_buffer; buffer_init(&rss_data_buffer); - result = download_to_buffer(tracked_rss->link, &rss_data_buffer); + result = download_to_buffer(tracked_rss->link, &rss_data_buffer, fall); if(result != 0) { fprintf(stderr, "Failed to download rss: %s\n", tracked_rss->link); goto cleanup; @@ -557,7 +557,7 @@ int sync_rss(TrackedRss *tracked_rss, TransmissionSession *transmission_session, char *rss_tracked_dir = rss_config_dir; strcat(rss_tracked_dir, "/tracked/"); - result = add_torrents_in_reverse(transmission_session, &download_items_buffer, tracked_rss, rss_tracked_dir); + result = add_torrents_in_reverse(transmission_session, &download_items_buffer, tracked_rss, rss_tracked_dir, fall); if(result != 0) { fprintf(stderr, "Failed while adding torrents for url: %s\n", tracked_rss->link); goto cleanup; -- cgit v1.2.3