Add a forgotten RSSyl: prefix to log_print message from previous commit.
[claws.git] / src / plugins / rssyl / rssyl_update_feed.c
index 7f032fac072a657ec3f65cfef5a0f319c6a5e737..eef5753fdbea06188020d282124f8ad910706de0 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:
@@ -118,26 +121,38 @@ void rssyl_fetch_feed(RFetchCtx *ctx, gboolean verbose)
        if( ctx->error != NULL ) {
                /* libcurl wasn't happy */
                debug_print("RSSyl: Error: %s\n", ctx->error);
-               if( verbose )
-                       alertpanel_error(g_markup_printf_escaped(C_("First parameter is URL, second is error text",
+               if( verbose ) {
+                       gchar *msg = g_markup_printf_escaped(
+                                       (const char *) C_("First parameter is URL, second is error text",
                                                "Error fetching feed at\n<b>%s</b>:\n\n%s"),
-                                       feed_get_url(ctx->feed), ctx->error));
+                                       feed_get_url(ctx->feed), ctx->error);
+                       alertpanel_error("%s", msg);
+                       g_free(msg);
+               }
 
                log_error(LOG_PROTOCOL, RSSYL_LOG_ERROR_FETCH, ctx->feed->url, ctx->error);
 
                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( verbose )
-                               alertpanel_error(g_markup_printf_escaped(_("No valid feed found at\n<b>%s</b>"),
-                                                       feed_get_url(ctx->feed)));
+               if( ctx->feed == NULL ) {
+                       if( verbose ) {
+                               gchar *msg = g_markup_printf_escaped(
+                                               (const char *) _("No valid feed found at\n<b>%s</b>"),
+                                               feed_get_url(ctx->feed));
+                               alertpanel_error("%s", msg);
+                               g_free(msg);
+                       }
 
                        log_error(LOG_PROTOCOL, RSSYL_LOG_ERROR_NOFEED,
                                        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,
+                                       _("RSSyl: Possibly invalid feed without title at %s.\n"),
+                                       feed_get_url(ctx->feed));
                }
        }
 }
@@ -154,9 +169,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;
 }
@@ -173,9 +195,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;
 }
@@ -217,9 +245,14 @@ gboolean rssyl_update_feed(RFolderItem *ritem, gboolean verbose)
   if( ctx->success && !(ctx->success = rssyl_parse_feed(ritem, ctx->feed)) ) {
                /* both libcurl and libfeed were happy, but we weren't */
                debug_print("RSSyl: Error processing feed\n");
-               if( verbose )
-                       alertpanel_error(g_markup_printf_escaped(_("Couldn't process feed at\n<b>%s</b>\n\nPlease contact developers, this should not happen."),
-                                       feed_get_url(ctx->feed)));
+               if( verbose ) {
+                       gchar *msg = g_markup_printf_escaped(
+                                       (const char *) _("Couldn't process feed at\n<b>%s</b>\n\n"
+                                               "Please contact developers, this should not happen."),
+                                       feed_get_url(ctx->feed));
+                       alertpanel_error("%s", msg);
+                       g_free(msg);
+               }
 
                log_error(LOG_PROTOCOL, RSSYL_LOG_ERROR_PROC, ctx->feed->url);
        }
@@ -296,7 +329,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;