/** Notify listeners (CUA GUI) of error, pass message from @b GError object. * * @param backend Calendar backend object. * @param message Error message. * @param err Error pointer. */ void e_cal_backend_notify_gerror_error(ECalBackend *backend, char *message, GError *err) { if (err == NULL) { return; } char *error_message = g_strdup_printf("%s (%s)", message, err->message); e_cal_backend_notify_error(backend, error_message); g_free(error_message); }
static void begin_retrieval_cb (GTask *task, gpointer source_object, gpointer task_tada, GCancellable *cancellable) { ECalBackendHttp *backend = source_object; const gchar *uri; gchar *certificate_pem = NULL; GTlsCertificateFlags certificate_errors = 0; GError *error = NULL; if (!e_backend_get_online (E_BACKEND (backend)) || backend->priv->is_loading) return; d (g_message ("Starting retrieval...\n")); backend->priv->is_loading = TRUE; uri = cal_backend_http_ensure_uri (backend); cal_backend_http_load (backend, uri, &certificate_pem, &certificate_errors, cancellable, &error); if (g_error_matches (error, SOUP_HTTP_ERROR, SOUP_STATUS_UNAUTHORIZED) || g_error_matches (error, SOUP_HTTP_ERROR, SOUP_STATUS_SSL_FAILED)) { GError *local_error = NULL; ESourceCredentialsReason reason = E_SOURCE_CREDENTIALS_REASON_REQUIRED; if (g_error_matches (error, SOUP_HTTP_ERROR, SOUP_STATUS_SSL_FAILED)) { reason = E_SOURCE_CREDENTIALS_REASON_SSL_FAILED; } e_backend_credentials_required_sync (E_BACKEND (backend), reason, certificate_pem, certificate_errors, error, cancellable, &local_error); g_clear_error (&error); error = local_error; } else if (g_error_matches (error, SOUP_HTTP_ERROR, SOUP_STATUS_FORBIDDEN)) { GError *local_error = NULL; e_backend_credentials_required_sync (E_BACKEND (backend), E_SOURCE_CREDENTIALS_REASON_REJECTED, certificate_pem, certificate_errors, error, cancellable, &local_error); g_clear_error (&error); error = local_error; } g_free (certificate_pem); backend->priv->is_loading = FALSE; /* Ignore cancellations. */ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { g_error_free (error); } else if (error != NULL) { e_cal_backend_notify_error ( E_CAL_BACKEND (backend), error->message); empty_cache (backend); g_error_free (error); } d (g_message ("Retrieval really done.\n")); }