static CamelSExpResult * user_tag (struct _CamelSExp *f, gint argc, struct _CamelSExpResult **argv, FilterMessageSearch *fms) { CamelSExpResult *r; const gchar *tag; if (argc != 1 || argv[0]->type != CAMEL_SEXP_RES_STRING) camel_sexp_fatal_error (f, _("Invalid arguments to (user-tag)")); tag = camel_message_info_get_user_tag (fms->info, argv[0]->value.string); r = camel_sexp_result_new (f, CAMEL_SEXP_RES_STRING); r->value.string = g_strdup (tag ? tag : ""); return r; }
void ews_utils_update_followup_flags (ESoapMessage *msg, CamelMessageInfo *mi) { const gchar *followup, *completed, *dueby; time_t completed_tt = (time_t) 0 , dueby_tt = (time_t) 0; g_return_if_fail (msg != NULL); g_return_if_fail (mi != NULL); followup = camel_message_info_get_user_tag (mi, "follow-up"); completed = camel_message_info_get_user_tag (mi, "completed-on"); dueby = camel_message_info_get_user_tag (mi, "due-by"); if (followup && !*followup) followup = NULL; if (completed && *completed) completed_tt = camel_header_decode_date (completed, NULL); if (dueby && *dueby) dueby_tt = camel_header_decode_date (dueby, NULL); if (followup) { time_t now_tt = time (NULL); /* PidTagFlagStatus */ e_ews_message_add_set_item_field_extended_tag_int (msg, NULL, "Message", 0x1090, completed_tt != (time_t) 0 ? 0x01 /* followupComplete */: 0x02 /* followupFlagged */); /* PidLidFlagRequest */ e_ews_message_add_set_item_field_extended_distinguished_tag_string (msg, NULL, "Message", "Common", 0x8530, followup); /* PidTagToDoItemFlags */ e_ews_message_add_set_item_field_extended_tag_int (msg, NULL, "Message", 0x0e2b, 1); if (completed_tt == (time_t) 0 && dueby_tt == (time_t) 0) { /* PidLidTaskStatus */ e_ews_message_add_set_item_field_extended_distinguished_tag_int (msg, NULL, "Message", "Task", 0x8101, 0); /* PidLidPercentComplete */ e_ews_message_add_set_item_field_extended_distinguished_tag_double (msg, NULL, "Message", "Task", 0x8102, 0.0); /* PidLidTaskStartDate */ e_ews_message_add_set_item_field_extended_distinguished_tag_time (msg, NULL, "Message", "Task", 0x8104, now_tt); /* PidLidTaskDueDate */ e_ews_message_add_set_item_field_extended_distinguished_tag_time (msg, NULL, "Message", "Task", 0x8105, now_tt); /* PidLidTaskComplete */ e_ews_message_add_set_item_field_extended_distinguished_tag_boolean (msg, NULL, "Message", "Task", 0x811c, FALSE); } } else { /* PidTagFlagStatus */ e_ews_message_add_delete_item_field_extended_tag (msg, 0x1090, E_EWS_MESSAGE_DATA_TYPE_INT); /* PidTagFlagCompleteTime */ e_ews_message_add_delete_item_field_extended_tag (msg, 0x1091, E_EWS_MESSAGE_DATA_TYPE_TIME); /* PidTagToDoItemFlags */ e_ews_message_add_delete_item_field_extended_tag (msg, 0x0e2b, E_EWS_MESSAGE_DATA_TYPE_INT); /* PidTagFollowupIcon */ e_ews_message_add_delete_item_field_extended_tag (msg, 0x1095, E_EWS_MESSAGE_DATA_TYPE_INT); /* PidLidFlagRequest */ e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Common", 0x8530, E_EWS_MESSAGE_DATA_TYPE_STRING); /* PidLidFlagString */ e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Common", 0x85c0, E_EWS_MESSAGE_DATA_TYPE_INT); /* PidLidTaskStatus */ e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x8101, E_EWS_MESSAGE_DATA_TYPE_INT); /* PidLidPercentComplete */ e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x8102, E_EWS_MESSAGE_DATA_TYPE_DOUBLE); /* PidLidTaskStartDate */ e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x8104, E_EWS_MESSAGE_DATA_TYPE_TIME); /* PidLidTaskDueDate */ e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x8105, E_EWS_MESSAGE_DATA_TYPE_TIME); /* PidLidTaskDateCompleted */ e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x810f, E_EWS_MESSAGE_DATA_TYPE_TIME); /* PidLidTaskComplete */ e_ews_message_add_delete_item_field_extended_distinguished_tag (msg, "Task", 0x811c, E_EWS_MESSAGE_DATA_TYPE_BOOLEAN); } if (followup && completed_tt != (time_t) 0) { /* minute precision */ completed_tt = completed_tt - (completed_tt % 60); /* PidTagFlagCompleteTime */ e_ews_message_add_set_item_field_extended_tag_time (msg, NULL, "Message", 0x1091, completed_tt); /* PidTagFollowupIcon */ e_ews_message_add_delete_item_field_extended_tag (msg, 0x1095, E_EWS_MESSAGE_DATA_TYPE_INT); /* PidLidTaskDateCompleted */ e_ews_message_add_set_item_field_extended_distinguished_tag_time (msg, NULL, "Message", "Task", 0x810f, completed_tt); /* PidLidTaskStatus */ e_ews_message_add_set_item_field_extended_distinguished_tag_int (msg, NULL, "Message", "Task", 0x8101, 2); /* PidLidPercentComplete */ e_ews_message_add_set_item_field_extended_distinguished_tag_double (msg, NULL, "Message", "Task", 0x8102, 1.0); /* PidLidTaskComplete */ e_ews_message_add_set_item_field_extended_distinguished_tag_boolean (msg, NULL, "Message", "Task", 0x811c, TRUE); } if (followup && dueby_tt != (time_t) 0 && completed_tt == (time_t) 0) { time_t now_tt = time (NULL); if (now_tt > dueby_tt) now_tt = dueby_tt - 1; /* PidLidTaskStatus */ e_ews_message_add_set_item_field_extended_distinguished_tag_int (msg, NULL, "Message", "Task", 0x8101, 0); /* PidLidPercentComplete */ e_ews_message_add_set_item_field_extended_distinguished_tag_double (msg, NULL, "Message", "Task", 0x8102, 0.0); /* PidLidTaskStartDate */ e_ews_message_add_set_item_field_extended_distinguished_tag_time (msg, NULL, "Message", "Task", 0x8104, now_tt); /* PidLidTaskDueDate */ e_ews_message_add_set_item_field_extended_distinguished_tag_time (msg, NULL, "Message", "Task", 0x8105, dueby_tt); /* PidLidTaskComplete */ e_ews_message_add_set_item_field_extended_distinguished_tag_boolean (msg, NULL, "Message", "Task", 0x811c, FALSE); } }
static gboolean camel_ews_utils_update_follow_up_flags (EEwsItem *item, CamelMessageInfo *info) { gboolean changed = FALSE, found; time_t completed_tt, dueby_tt; const gchar *followup_name; gint flag_status; /* PidTagFlagStatus */ found = FALSE; flag_status = e_ews_item_get_extended_property_as_int (item, NULL, 0x1090, &found); if (!found) flag_status = 0; /* PidTagFlagCompleteTime */ found = FALSE; completed_tt = e_ews_item_get_extended_property_as_time (item, NULL, 0x1091, &found); if (!found) completed_tt = (time_t) 0; /* PidLidFlagRequest */ found = FALSE; followup_name = e_ews_item_get_extended_property_as_string (item, "Common", 0x8530, &found); if (!found) followup_name = NULL; /* PidLidTaskDueDate */ found = FALSE; dueby_tt = e_ews_item_get_extended_property_as_time (item, "Task", 0x8105, &found); if (!found) dueby_tt = (time_t) 0; if (flag_status == 1) { /* complete */ if (!camel_message_info_get_user_tag (info, "follow-up")) changed = camel_message_info_set_user_tag (info, "follow-up", followup_name ? followup_name : "follow-up") || changed; if (completed_tt != (time_t) 0) { gchar *text = camel_header_format_date (completed_tt, 0); changed = camel_message_info_set_user_tag (info, "completed-on", text) || changed; g_free (text); } else { changed = camel_message_info_set_user_tag (info, "completed-on", NULL) || changed; } } else if (flag_status == 2) { /* follow-up */ changed = camel_message_info_set_user_tag (info, "follow-up", followup_name ? followup_name : "follow-up") || changed; changed = camel_message_info_set_user_tag (info, "completed-on", NULL) || changed; if (dueby_tt != (time_t) 0) { gchar *text = camel_header_format_date (dueby_tt, 0); changed = camel_message_info_set_user_tag (info, "due-by", text) || changed; g_free (text); } else { changed = camel_message_info_set_user_tag (info, "due-by", NULL) || changed; } } else { changed = camel_message_info_set_user_tag (info, "follow-up", NULL) || changed; changed = camel_message_info_set_user_tag (info, "completed-on", NULL) || changed; changed = camel_message_info_set_user_tag (info, "due-by", NULL) || changed; } return changed; }