Exemple #1
0
/* parse the find parameters, and return the values as out params */
static MuError
get_find_params (GSList *args, gboolean *threads, MuMsgFieldId *sortfield,
		 gboolean *reverse, int *maxnum, GError **err)
{
	const char *maxnumstr, *sortfieldstr;

	/* maximum number of results */
	maxnumstr = get_string_from_args (args, "maxnum", TRUE, NULL);
	*maxnum = maxnumstr ? atoi (maxnumstr) : 0;

	/* whether to show threads or not */
	*threads = get_bool_from_args (args, "threads", TRUE, NULL);
	*reverse = get_bool_from_args (args, "reverse", TRUE, NULL);

	/* field to sort by */
	sortfieldstr = get_string_from_args (args, "sortfield", TRUE, NULL);
	if (sortfieldstr) {
		*sortfield = mu_msg_field_id_from_name (sortfieldstr, FALSE);
		/* note: shortcuts are not allowed here */
		if (*sortfield == MU_MSG_FIELD_ID_NONE) {
			mu_util_g_set_error (err, MU_ERROR_IN_PARAMETERS,
				     "not a valid sort field: '%s'", sortfield);
			return MU_G_ERROR_CODE(err);
		}
	} else
		*sortfield = MU_MSG_FIELD_ID_DATE;

	return MU_OK;
}
/* returns MU_MSG_FIELD_ID_NONE if there is an error */
static MuMsgFieldId
sort_field_from_string (const char* fieldstr, GError **err)
{
	MuMsgFieldId mfid;

	mfid = mu_msg_field_id_from_name (fieldstr, FALSE);

	/* not found? try a shortcut */
	if (mfid == MU_MSG_FIELD_ID_NONE &&
	    strlen(fieldstr) == 1)
		mfid = mu_msg_field_id_from_shortcut(fieldstr[0],
						     FALSE);
	if (mfid == MU_MSG_FIELD_ID_NONE)
		g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_IN_PARAMETERS,
			     "not a valid sort field: '%s'\n", fieldstr);
	return mfid;
}
/* parse the find parameters, and return the values as out params */
static MuError
get_find_params (GSList *args, MuMsgFieldId *sortfield,
		 int *maxnum, MuQueryFlags *qflags, GError **err)
{
	const char *maxnumstr, *sortfieldstr;

	/* defaults */
	*maxnum	   = 500;
	*qflags	   = MU_QUERY_FLAG_NONE;
	*sortfield = MU_MSG_FIELD_ID_NONE;

	/* field to sort by */
	sortfieldstr = get_string_from_args (args, "sortfield", TRUE, NULL);
	if (sortfieldstr) {
		*sortfield = mu_msg_field_id_from_name (sortfieldstr, FALSE);
		/* note: shortcuts are not allowed here */
		if (*sortfield == MU_MSG_FIELD_ID_NONE) {
			mu_util_g_set_error (err, MU_ERROR_IN_PARAMETERS,
				     "not a valid sort field: '%s'",
					     sortfield);
			return MU_G_ERROR_CODE(err);
		}
	} else
		*sortfield = MU_MSG_FIELD_ID_DATE;


	/* maximum number of results */
	maxnumstr = get_string_from_args (args, "maxnum", TRUE, NULL);
	*maxnum = maxnumstr ? atoi (maxnumstr) : 0;

	if (get_bool_from_args (args, "reverse", TRUE, NULL))
		*qflags |= MU_QUERY_FLAG_DESCENDING;
	if (get_bool_from_args (args, "skip-dups", TRUE, NULL))
		*qflags |= MU_QUERY_FLAG_SKIP_DUPS;
	if (get_bool_from_args (args, "include-related", TRUE, NULL))
		*qflags |= MU_QUERY_FLAG_INCLUDE_RELATED;
	if (get_bool_from_args (args, "include-related", TRUE, NULL))
		*qflags |= MU_QUERY_FLAG_INCLUDE_RELATED;
	if (get_bool_from_args (args, "threads", TRUE, NULL))
		*qflags |= MU_QUERY_FLAG_THREADS;

	return MU_OK;
}