RSSyl: Accept feeds with no title. Closes bug #3480.
[claws.git] / src / plugins / rssyl / rssyl_update_feed.c
index 63b0c6f9ecd73628e3fa2d998c71fe45d08d288d..398a64216532b3afee130df4b2be94562b977338 100644 (file)
@@ -96,6 +96,9 @@ void rssyl_fetch_feed(RFetchCtx *ctx, gboolean verbose)
        } else if( ctx->response_code == FEED_ERR_FETCH ) {
                debug_print("RSSyl: libfeed reports some other error from libcurl\n");
                ctx->error = g_strdup(ctx->feed->fetcherr);
+       } else if( ctx->response_code == FEED_ERR_UNAUTH ) {
+               debug_print("RSSyl: URL authorization type is unknown\n");
+               ctx->error = g_strdup("Unknown value for URL authorization type");
        } else if( ctx->response_code >= 400 && ctx->response_code < 500 ) {
                switch( ctx->response_code ) {
                        case 401:
@@ -131,9 +134,7 @@ void rssyl_fetch_feed(RFetchCtx *ctx, gboolean verbose)
 
                ctx->success = FALSE;
        } else {
-               if( feed_get_title(ctx->feed) == NULL ) {
-                       /* libcurl was happy, but libfeed wasn't */
-                       debug_print("RSSyl: Error reading feed\n");
+               if( ctx->feed == NULL ) {
                        if( verbose ) {
                                gchar *msg = g_markup_printf_escaped(
                                                (const char *) _("No valid feed found at\n<b>%s</b>"),
@@ -146,6 +147,11 @@ void rssyl_fetch_feed(RFetchCtx *ctx, gboolean verbose)
                                        feed_get_url(ctx->feed));
 
                        ctx->success = FALSE;
+               } else if (feed_get_title(ctx->feed) == NULL) {
+                       /* We shouldn't do this, since a title is mandatory. */
+                       feed_set_title(ctx->feed, _("Untitled feed"));
+                       log_print(LOG_PROTOCOL, _("Possibly invalid feed without title at %s.\n"),
+                                               feed_get_url(ctx->feed));
                }
        }
 }
@@ -162,9 +168,16 @@ RFetchCtx *rssyl_prep_fetchctx_from_item(RFolderItem *ritem)
        ctx->success = TRUE;
        ctx->ready = FALSE;
 
-       feed_set_timeout(ctx->feed, prefs_common.io_timeout_secs);
+       feed_set_timeout(ctx->feed, prefs_common_get_prefs()->io_timeout_secs);
        feed_set_cookies_path(ctx->feed, rssyl_prefs_get()->cookies_path);
        feed_set_ssl_verify_peer(ctx->feed, ritem->ssl_verify_peer);
+       feed_set_auth(ctx->feed, ritem->auth);
+#ifdef G_OS_WIN32
+       if (!g_ascii_strncasecmp(ritem->url, "https", 5)) {
+               feed_set_cacert_file(ctx->feed, claws_ssl_get_cert_file());
+               debug_print("RSSyl: using cert file '%s'\n", feed_get_cacert_file(ctx->feed));
+       }
+#endif
 
        return ctx;
 }
@@ -181,9 +194,15 @@ RFetchCtx *rssyl_prep_fetchctx_from_url(gchar *url)
        ctx->success = TRUE;
        ctx->ready = FALSE;
 
-       feed_set_timeout(ctx->feed, prefs_common.io_timeout_secs);
+       feed_set_timeout(ctx->feed, prefs_common_get_prefs()->io_timeout_secs);
        feed_set_cookies_path(ctx->feed, rssyl_prefs_get()->cookies_path);
        feed_set_ssl_verify_peer(ctx->feed, rssyl_prefs_get()->ssl_verify_peer);
+#ifdef G_OS_WIN32
+       if (!g_ascii_strncasecmp(url, "https", 5)) {
+               feed_set_cacert_file(ctx->feed, claws_ssl_get_cert_file());
+               debug_print("RSSyl: using cert file '%s'\n", feed_get_cacert_file(ctx->feed));
+       }
+#endif
 
        return ctx;
 }
@@ -309,7 +328,7 @@ void rssyl_update_all_func(FolderItem *item, gpointer data)
 
 void rssyl_update_all_feeds(void)
 {
-       if (prefs_common.work_offline &&
+       if (prefs_common_get_prefs()->work_offline &&
                        !inc_offline_should_override(TRUE,
                                _("Claws Mail needs network access in order to update your feeds.")) ) {
                return;