-/*
- * Save an edited task
- *
- * supplied_vtodo the task to save
- * msgnum number of the mesage in our db
- */
-void save_individual_task(icalcomponent *supplied_vtodo, long msgnum, char* from, int unread,
- struct calview *calv)
-{
- char buf[SIZ];
- int delete_existing = 0;
- icalproperty *prop;
- icalcomponent *vtodo, *encaps;
- int created_new_vtodo = 0;
- int i;
- int sequence = 0;
- struct icaltimetype t;
-
- if (supplied_vtodo != NULL) {
- vtodo = supplied_vtodo;
- /**
- * If we're looking at a fully encapsulated VCALENDAR
- * rather than a VTODO component, attempt to use the first
- * relevant VTODO subcomponent. If there is none, the
- * NULL returned by icalcomponent_get_first_component() will
- * tell the next iteration of this function to create a
- * new one.
- */
- if (icalcomponent_isa(vtodo) == ICAL_VCALENDAR_COMPONENT) {
- save_individual_task(
- icalcomponent_get_first_component(
- vtodo, ICAL_VTODO_COMPONENT),
- msgnum, from, unread, calv
- );
- return;
- }
- }
- else {
- vtodo = icalcomponent_new(ICAL_VTODO_COMPONENT);
- created_new_vtodo = 1;
- }
-
- if (havebstr("save_button")) {
-
- /** Replace values in the component with ones from the form */
-
- while (prop = icalcomponent_get_first_property(vtodo,
- ICAL_SUMMARY_PROPERTY), prop != NULL) {
- icalcomponent_remove_property(vtodo, prop);
- icalproperty_free(prop);
- }
- if (havebstr("summary")) {
-
- icalcomponent_add_property(vtodo,
- icalproperty_new_summary(bstr("summary")));
- } else {
- icalcomponent_add_property(vtodo,
- icalproperty_new_summary(_("Untitled Task")));
- }
-
- while (prop = icalcomponent_get_first_property(vtodo,
- ICAL_DESCRIPTION_PROPERTY), prop != NULL) {
- icalcomponent_remove_property(vtodo, prop);
- icalproperty_free(prop);
- }
- if (havebstr("description")) {
- icalcomponent_add_property(vtodo,
- icalproperty_new_description(bstr("description")));
- }
-
- while (prop = icalcomponent_get_first_property(vtodo,
- ICAL_DTSTART_PROPERTY), prop != NULL) {
- icalcomponent_remove_property(vtodo, prop);
- icalproperty_free(prop);
- }
- if (IsEmptyStr(bstr("nodtstart"))) {
- if (yesbstr("dtstart_time")) {
- icaltime_from_webform(&t, "dtstart");
- }
- else {
- icaltime_from_webform_dateonly(&t, "dtstart");
- }
- icalcomponent_add_property(vtodo,
- icalproperty_new_dtstart(t)
- );
- }
- while(prop = icalcomponent_get_first_property(vtodo,
- ICAL_STATUS_PROPERTY), prop != NULL) {
- icalcomponent_remove_property(vtodo,prop);
- icalproperty_free(prop);
- }
- while(prop = icalcomponent_get_first_property(vtodo,
- ICAL_PERCENTCOMPLETE_PROPERTY), prop != NULL) {
- icalcomponent_remove_property(vtodo,prop);
- icalproperty_free(prop);
- }
-
- if (havebstr("status")) {
- icalproperty_status taskStatus = icalproperty_string_to_status(bstr("status"));
- icalcomponent_set_status(vtodo, taskStatus);
- icalcomponent_add_property(vtodo,
- icalproperty_new_percentcomplete(
- (strcasecmp(bstr("status"), "completed") ? 0 : 100)
- )
- );
- }
- else {
- icalcomponent_add_property(vtodo, icalproperty_new_percentcomplete(0));
- }
- while (prop = icalcomponent_get_first_property(vtodo,
- ICAL_CATEGORIES_PROPERTY), prop != NULL) {
- icalcomponent_remove_property(vtodo,prop);
- icalproperty_free(prop);
- }
- if (!IsEmptyStr(bstr("category"))) {
- prop = icalproperty_new_categories(bstr("category"));
- icalcomponent_add_property(vtodo,prop);
- }
- while (prop = icalcomponent_get_first_property(vtodo,
- ICAL_DUE_PROPERTY), prop != NULL) {
- icalcomponent_remove_property(vtodo, prop);
- icalproperty_free(prop);
- }
- if (IsEmptyStr(bstr("nodue"))) {
- if (yesbstr("due_time")) {
- icaltime_from_webform(&t, "due");
- }
- else {
- icaltime_from_webform_dateonly(&t, "due");
- }
- icalcomponent_add_property(vtodo,
- icalproperty_new_due(t)
- );
- }
- /** Give this task a UID if it doesn't have one. */
- lprintf(9, "Give this task a UID if it doesn't have one.\n");
- if (icalcomponent_get_first_property(vtodo,
- ICAL_UID_PROPERTY) == NULL) {
- generate_uuid(buf);
- icalcomponent_add_property(vtodo,
- icalproperty_new_uid(buf)
- );
- }
-
- /* Increment the sequence ID */
- lprintf(9, "Increment the sequence ID\n");
- while (prop = icalcomponent_get_first_property(vtodo,
- ICAL_SEQUENCE_PROPERTY), (prop != NULL) ) {
- i = icalproperty_get_sequence(prop);
- lprintf(9, "Sequence was %d\n", i);
- if (i > sequence) sequence = i;
- icalcomponent_remove_property(vtodo, prop);
- icalproperty_free(prop);
- }
- ++sequence;
- lprintf(9, "New sequence is %d. Adding...\n", sequence);
- icalcomponent_add_property(vtodo,
- icalproperty_new_sequence(sequence)
- );