/* * Construct a JSON array for an iCalendar component. */ static json_t *icalcomponent_as_json_array(icalcomponent *comp) { icalcomponent *c; icalproperty *p; icalcomponent_kind kind; const char* kind_string; json_t *jcomp, *jprops, *jsubs; if (!comp) return NULL; kind = icalcomponent_isa(comp); switch (kind) { case ICAL_NO_COMPONENT: return NULL; break; case ICAL_X_COMPONENT: kind_string = ""; //comp->x_name; break; default: kind_string = icalcomponent_kind_to_string(kind); } /* Create component array */ jcomp = json_array(); /* Add component name */ json_array_append_new(jcomp, json_string(lcase(icalmemory_tmp_copy(kind_string)))); /* Add properties */ jprops = json_array(); for (p = icalcomponent_get_first_property(comp, ICAL_ANY_PROPERTY); p; p = icalcomponent_get_next_property(comp, ICAL_ANY_PROPERTY)) { json_array_append_new(jprops, icalproperty_as_json_array(p)); } json_array_append_new(jcomp, jprops); /* Add sub-components */ jsubs = json_array(); for (c = icalcomponent_get_first_component(comp, ICAL_ANY_COMPONENT); c; c = icalcomponent_get_next_component(comp, ICAL_ANY_COMPONENT)) { json_array_append_new(jsubs, icalcomponent_as_json_array(c)); } json_array_append_new(jcomp, jsubs); return jcomp; }
/* * Construct a XML element for an iCalendar component. */ static xmlNodePtr icalcomponent_as_xml_element(icalcomponent *comp) { icalcomponent *c; icalproperty *p; icalcomponent_kind kind; const char* kind_string; xmlNodePtr xcomp, xprops = NULL, xsubs = NULL; if (!comp) return NULL; kind = icalcomponent_isa(comp); switch (kind) { case ICAL_NO_COMPONENT: return NULL; break; case ICAL_X_COMPONENT: kind_string = ""; //comp->x_name; break; default: kind_string = icalcomponent_kind_to_string(kind); } /* Create component */ xcomp = xmlNewNode(NULL, BAD_CAST lcase(icalmemory_tmp_copy(kind_string))); /* Add properties */ for (p = icalcomponent_get_first_property(comp, ICAL_ANY_PROPERTY); p; p = icalcomponent_get_next_property(comp, ICAL_ANY_PROPERTY)) { if (!xprops) xprops = xmlNewChild(xcomp, NULL, BAD_CAST "properties", NULL); xmlAddChild(xprops, icalproperty_as_xml_element(p)); } /* Add sub-components */ for (c = icalcomponent_get_first_component(comp, ICAL_ANY_COMPONENT); c; c = icalcomponent_get_next_component(comp, ICAL_ANY_COMPONENT)) { if (!xsubs) xsubs = xmlNewChild(xcomp, NULL, BAD_CAST "components", NULL); xmlAddChild(xsubs, icalcomponent_as_xml_element(c)); } return xcomp; }
NS_IMETHODIMP calIcalComponent::GetComponentType(nsACString &componentType) { componentType.Assign(icalcomponent_kind_to_string(icalcomponent_isa(mComponent))); return NS_OK; }