static void ical_import (EImport *ei, EImportTarget *target, EImportImporter *im) { gchar *filename; gchar *contents; icalcomponent *icalcomp; EImportTargetURI *s = (EImportTargetURI *) target; filename = g_filename_from_uri (s->uri_src, NULL, NULL); if (!filename) { e_import_complete (ei, target); return; } if (!g_file_get_contents (filename, &contents, NULL, NULL)) { g_free (filename); e_import_complete (ei, target); return; } g_free (filename); icalcomp = e_cal_util_parse_ics_string (contents); g_free (contents); if (icalcomp) ivcal_import (ei, target, icalcomp); else e_import_complete (ei, target); }
static GtkWidget * ivcal_get_preview (EImport *ei, EImportTarget *target, EImportImporter *im) { GtkWidget *preview; EImportTargetURI *s = (EImportTargetURI *) target; gchar *filename; icalcomponent *icalcomp; gchar *contents; filename = g_filename_from_uri (s->uri_src, NULL, NULL); if (filename == NULL) { g_message (G_STRLOC ": Couldn't get filename from URI '%s'", s->uri_src); return NULL; } if (!g_file_get_contents (filename, &contents, NULL, NULL)) { g_free (filename); return NULL; } g_free (filename); icalcomp = e_cal_util_parse_ics_string (contents); g_free (contents); if (!icalcomp) return NULL; preview = ical_get_preview (icalcomp); icalcomponent_free (icalcomp); return preview; }
static gboolean ical_supported (EImport *ei, EImportTarget *target, EImportImporter *im) { gchar *filename; gchar *contents; gboolean ret = FALSE; EImportTargetURI *s; if (target->type != E_IMPORT_TARGET_URI) return FALSE; s = (EImportTargetURI *) target; if (s->uri_src == NULL) return TRUE; if (strncmp (s->uri_src, "file:///", 8) != 0) return FALSE; filename = g_filename_from_uri (s->uri_src, NULL, NULL); if (!filename) return FALSE; if (g_file_get_contents (filename, &contents, NULL, NULL)) { icalcomponent *icalcomp = NULL; if (g_ascii_strncasecmp (contents, "BEGIN:", 6) == 0) icalcomp = e_cal_util_parse_ics_string (contents); g_free (contents); if (icalcomp) { if (is_icalcomp_usable (icalcomp)) ret = TRUE; else ret = FALSE; icalcomponent_free (icalcomp); } } g_free (filename); return ret; }
static icalcomponent * get_icalcomponent_from_file(char *filename) { char *contents; icalcomponent *icalcomp; g_return_val_if_fail (filename != NULL, NULL); if (!g_file_get_contents (filename, &contents, NULL, NULL)) { g_free (filename); return NULL; } g_free (filename); icalcomp = e_cal_util_parse_ics_string (contents); g_free (contents); if (icalcomp) { return icalcomp; } return NULL; }
static gboolean vcal_supported (EImport *ei, EImportTarget *target, EImportImporter *im) { gchar *filename; gchar *contents; gboolean ret = FALSE; EImportTargetURI *s; if (target->type != E_IMPORT_TARGET_URI) return FALSE; s = (EImportTargetURI *) target; if (s->uri_src == NULL) return TRUE; if (strncmp (s->uri_src, "file:///", 8) != 0) return FALSE; filename = g_filename_from_uri (s->uri_src, NULL, NULL); if (!filename) return FALSE; /* Z: Wow, this is *efficient* */ if (g_file_get_contents (filename, &contents, NULL, NULL)) { VObject *vcal; icalcomponent *icalcomp; icalcomp = e_cal_util_parse_ics_string (contents); if (icalcomp && is_icalcomp_usable (icalcomp)) { /* If we can create proper iCalendar from the file, then * rather use ics importer, because it knows to read more * information than older version, the vCalendar. */ ret = FALSE; g_free (contents); } else { if (icalcomp) icalcomponent_free (icalcomp); /* parse the file */ vcal = Parse_MIME (contents, strlen (contents)); g_free (contents); if (vcal) { icalcomp = icalvcal_convert (vcal); if (icalcomp) { icalcomponent_free (icalcomp); ret = TRUE; } cleanVObject (vcal); } } } g_free (filename); return ret; }