aboutsummaryrefslogtreecommitdiffstats
path: root/my-evolution/e-summary-rdf.c
diff options
context:
space:
mode:
Diffstat (limited to 'my-evolution/e-summary-rdf.c')
-rw-r--r--my-evolution/e-summary-rdf.c67
1 files changed, 63 insertions, 4 deletions
diff --git a/my-evolution/e-summary-rdf.c b/my-evolution/e-summary-rdf.c
index dee5077bda..954e03fc4a 100644
--- a/my-evolution/e-summary-rdf.c
+++ b/my-evolution/e-summary-rdf.c
@@ -335,17 +335,22 @@ close_callback (GnomeVFSAsyncHandle *handle,
if (r->handle == NULL) {
g_free (r->buffer);
+ r->buffer = NULL;
g_string_free (r->string, TRUE);
+ r->string = NULL;
return;
}
r->handle = NULL;
g_free (r->buffer);
+ r->buffer = NULL;
xml = r->string->str;
g_string_free (r->string, FALSE);
+ r->string = NULL;
if (r->cache != NULL) {
xmlFreeDoc (r->cache);
+ r->cache = NULL;
}
doc = xmlParseMemory (xml, strlen (xml));
@@ -376,6 +381,9 @@ read_callback (GnomeVFSAsyncHandle *handle,
RDF *r)
{
if (result != GNOME_VFS_OK && result != GNOME_VFS_ERROR_EOF) {
+ if (r->html) {
+ g_free (r->html);
+ }
r->html = e_utf8_from_locale_string (_("<b>Error downloading RDF</b>"));
e_summary_draw (r->summary);
@@ -589,6 +597,31 @@ e_summary_rdf_init (ESummary *summary)
return;
}
+static void
+rdf_free (RDF *r)
+{
+ /* Stop the download */
+ if (r->handle) {
+ gnome_vfs_async_cancel (r->handle);
+ }
+ if (r->uri) {
+ g_free (r->uri);
+ }
+ if (r->html) {
+ g_free (r->html);
+ }
+ if (r->string) {
+ g_string_free (r->string, TRUE);
+ }
+ if (r->buffer) {
+ g_free (r->buffer);
+ }
+ if (r->cache) {
+ xmlFreeDoc (r->cache);
+ }
+ g_free (r);
+}
+
void
e_summary_rdf_reconfigure (ESummary *summary)
{
@@ -607,10 +640,7 @@ e_summary_rdf_reconfigure (ESummary *summary)
RDF *r;
r = old->data;
- g_free (r->uri);
- g_free (r->html);
- xmlFree (r->cache);
- g_free (r);
+ rdf_free (r);
}
g_list_free (rdf->rdfs);
rdf->rdfs = NULL;
@@ -622,3 +652,32 @@ e_summary_rdf_reconfigure (ESummary *summary)
rdf->timeout = gtk_timeout_add (summary->preferences->rdf_refresh_time * 1000, (GtkFunction) e_summary_rdf_update, summary);
e_summary_rdf_update (summary);
}
+
+void
+e_summary_rdf_free (ESummary *summary)
+{
+ ESummaryRDF *rdf;
+ GList *p;
+
+ g_return_if_fail (summary != NULL);
+ g_return_if_fail (IS_E_SUMMARY (summary));
+
+ rdf = summary->rdf;
+
+ if (rdf->timeout != 0) {
+ gtk_timeout_remove (rdf->timeout);
+ }
+ for (p = rdf->rdfs; p; p = p->next) {
+ RDF *r = p->data;
+
+ rdf_free (r);
+ }
+ g_list_free (rdf->rdfs);
+ g_free (rdf->html);
+
+ e_summary_remove_online_connection (summary, rdf->connection);
+ g_free (rdf->connection);
+
+ g_free (rdf);
+ summary->rdf = NULL;
+}