static void e_ews_convert_sexp_to_restriction (ESoapMessage *msg, const gchar *query, EEwsFolderType type) { ESExp *sexp; ESExpResult *r; gint i; sexp = e_sexp_new (); if (type == E_EWS_FOLDER_TYPE_CONTACTS) { for (i = 0; i < G_N_ELEMENTS (contact_symbols); i++) { if (contact_symbols[i].immediate) e_sexp_add_ifunction ( sexp, 0, contact_symbols[i].name, (ESExpIFunc *) contact_symbols[i].func, msg); else e_sexp_add_function ( sexp, 0, contact_symbols[i].name, contact_symbols[i].func, msg); } } else if (type == E_EWS_FOLDER_TYPE_CALENDAR || type == E_EWS_FOLDER_TYPE_TASKS || type == E_EWS_FOLDER_TYPE_MEMOS) { for (i = 0; i < G_N_ELEMENTS (calendar_symbols); i++) { if (calendar_symbols[i].immediate) e_sexp_add_ifunction ( sexp, 0, calendar_symbols[i].name, (ESExpIFunc *) calendar_symbols[i].func, msg); else e_sexp_add_function ( sexp, 0, calendar_symbols[i].name, calendar_symbols[i].func, msg); } } else if (type == E_EWS_FOLDER_TYPE_MAILBOX) { for (i = 0; i < G_N_ELEMENTS (message_symbols); i++) { if (message_symbols[i].immediate) e_sexp_add_ifunction ( sexp, 0, message_symbols[i].name, (ESExpIFunc *) message_symbols[i].func, msg); else e_sexp_add_function ( sexp, 0, message_symbols[i].name, message_symbols[i].func, msg); } } e_sexp_input_text (sexp, query, strlen (query)); e_sexp_parse (sexp); r = e_sexp_eval (sexp); if (!r) return; e_sexp_result_free (sexp, r); e_sexp_unref (sexp); }
/** * e_cal_backend_card_sexp_new: * @text: The expression to use. * * Creates a new #EXCalBackendSExp object. * * Returns: The newly created ECalBackendSExp object. */ ECalBackendSExp * e_cal_backend_sexp_new (const gchar *text) { ECalBackendSExp *sexp = g_object_new (E_TYPE_CAL_BACKEND_SEXP, NULL); gint esexp_error; gint i; sexp->priv->search_sexp = e_sexp_new (); sexp->priv->text = g_strdup (text); for (i = 0; i < G_N_ELEMENTS (symbols); i++) { if (symbols[i].type == 1) { e_sexp_add_ifunction (sexp->priv->search_sexp, 0, symbols[i].name, (ESExpIFunc *) symbols[i].func, sexp->priv->search_context); } else { e_sexp_add_function (sexp->priv->search_sexp, 0, symbols[i].name, symbols[i].func, sexp->priv->search_context); } } e_sexp_input_text (sexp->priv->search_sexp, text, strlen (text)); esexp_error = e_sexp_parse (sexp->priv->search_sexp); if (esexp_error == -1) { g_object_unref (sexp); sexp = NULL; } if (sexp) { SearchContext *ctx = sexp->priv->search_context; ctx->expr_range_set = e_sexp_evaluate_occur_times (sexp->priv->search_sexp, &ctx->expr_range_start, &ctx->expr_range_end); } return sexp; }