static void month_view_cursor_key_left (EWeekView *week_view) { if (week_view->selection_start_day == -1) return; if (week_view->selection_start_day == 0) { /* No easy way to calculate new selection_start_day, so * calculate a time_t value and set_selected_time_range. */ time_t current; if (e_calendar_view_get_selected_time_range ( E_CALENDAR_VIEW (week_view), ¤t, NULL)) { current = time_add_day (current, -1); e_week_view_scroll_a_step ( week_view, E_CAL_VIEW_MOVE_PAGE_UP); e_week_view_set_selected_time_range_visible ( week_view, current, current); } } else { week_view->selection_start_day--; week_view->selection_end_day = week_view->selection_start_day; } g_signal_emit_by_name (week_view, "selected-time-changed"); gtk_widget_queue_draw (week_view->main_canvas); }
/** * e_cal_backend_sexp_func_time_add_day: * @esexp: An #ESExp object. * @argc: Number of arguments. * @argv: The arguments. * @data: Closure data. * * (time-add-day TIME N) * TIME - time_t, base time * N - int, number of days to add * * Adds the specified number of days to a time value. * * FIXME: TIMEZONES - need to use a timezone or daylight saving changes will * make the result incorrect. * * Returns: The result of the function. */ ESExpResult * e_cal_backend_sexp_func_time_add_day (ESExp *esexp, gint argc, ESExpResult **argv, gpointer data) { ESExpResult *result; time_t t; gint n; if (argc != 2) { e_sexp_fatal_error (esexp, _("\"%s\" expects two arguments"), "time-add-day"); return NULL; } if (argv[0]->type != ESEXP_RES_TIME) { e_sexp_fatal_error (esexp, _("\"%s\" expects the first " "argument to be a time_t"), "time-add-day"); return NULL; } t = argv[0]->value.time; if (argv[1]->type != ESEXP_RES_INT) { e_sexp_fatal_error (esexp, _("\"%s\" expects the second " "argument to be an integer"), "time-add-day"); return NULL; } n = argv[1]->value.number; result = e_sexp_result_new (esexp, ESEXP_RES_TIME); result->value.time = time_add_day (t, n); return result; }
/** * time_add_week: * @time: A time_t value. * @weeks: Number of weeks to add. * * Adds the given number of weeks to a time value. * * Return value: a time_t value containing @time plus the weeks added. */ time_t time_add_week (time_t time, int weeks) { return time_add_day (time, weeks * 7); }
static void cal_search_get_object_list_cb (GObject *source, GAsyncResult *result, gpointer user_data) { ECalClient *client = E_CAL_CLIENT (source); ECalShellView *cal_shell_view = user_data; GSList *icalcomps = NULL; GError *error = NULL; g_return_if_fail (client != NULL); g_return_if_fail (result != NULL); g_return_if_fail (cal_shell_view != NULL); e_cal_client_get_object_list_finish ( client, result, &icalcomps, &error); if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { g_warn_if_fail (icalcomps == NULL); g_error_free (error); } else if (error != NULL || !icalcomps) { g_warn_if_fail (icalcomps == NULL); g_clear_error (&error); cal_shell_view->priv->search_pending_count--; if (!cal_shell_view->priv->search_pending_count) { cal_iterate_searching (cal_shell_view); } } else if (cal_shell_view->priv->searching_activity) { GSList *iter; GCancellable *cancellable; time_t start, end; cancellable = e_activity_get_cancellable (cal_shell_view->priv->searching_activity); start = time_add_day (cal_shell_view->priv->search_time, (-1) * cal_shell_view->priv->search_direction); end = cal_shell_view->priv->search_time; if (start > end) { time_t tmp = start; start = end; end = tmp; } for (iter = icalcomps; iter; iter = iter->next) { icalcomponent *icalcomp = iter->data; struct GenerateInstancesData *gid; gid = g_new0 (struct GenerateInstancesData, 1); gid->client = client; gid->cal_shell_view = cal_shell_view; gid->cancellable = g_object_ref (cancellable); e_cal_client_generate_instances_for_object ( client, icalcomp, start, end, cancellable, cal_searching_got_instance_cb, gid, cal_searching_instances_done_cb); } e_cal_client_free_icalcomp_slist (icalcomps); } else {
static void task_shell_view_execute_search (EShellView *shell_view) { ETaskShellContent *task_shell_content; EShellWindow *shell_window; EShellContent *shell_content; EShellSearchbar *searchbar; EActionComboBox *combo_box; GtkRadioAction *action; ECalComponentPreview *task_preview; EPreviewPane *preview_pane; ETaskTable *task_table; EWebView *web_view; ECalModel *model; ECalDataModel *data_model; icaltimezone *timezone; struct icaltimetype current_time; time_t start_range; time_t end_range; time_t now_time; gchar *start, *end; gchar *query; gchar *temp; gint value; shell_window = e_shell_view_get_shell_window (shell_view); shell_content = e_shell_view_get_shell_content (shell_view); task_shell_content = E_TASK_SHELL_CONTENT (shell_content); searchbar = e_task_shell_content_get_searchbar (task_shell_content); task_shell_content = E_TASK_SHELL_CONTENT (shell_content); task_table = e_task_shell_content_get_task_table (task_shell_content); model = e_task_table_get_model (task_table); data_model = e_cal_model_get_data_model (model); timezone = e_cal_model_get_timezone (model); current_time = icaltime_current_time_with_zone (timezone); now_time = time_day_begin (icaltime_as_timet (current_time)); action = GTK_RADIO_ACTION (ACTION (TASK_SEARCH_ANY_FIELD_CONTAINS)); value = gtk_radio_action_get_current_value (action); if (value == TASK_SEARCH_ADVANCED) { query = e_shell_view_get_search_query (shell_view); if (!query) query = g_strdup (""); } else { const gchar *format; const gchar *text; GString *string; text = e_shell_searchbar_get_search_text (searchbar); if (text == NULL || *text == '\0') { text = ""; value = TASK_SEARCH_SUMMARY_CONTAINS; } switch (value) { default: text = ""; /* fall through */ case TASK_SEARCH_SUMMARY_CONTAINS: format = "(contains? \"summary\" %s)"; break; case TASK_SEARCH_DESCRIPTION_CONTAINS: format = "(contains? \"description\" %s)"; break; case TASK_SEARCH_ANY_FIELD_CONTAINS: format = "(contains? \"any\" %s)"; break; } /* Build the query. */ string = g_string_new (""); e_sexp_encode_string (string, text); query = g_strdup_printf (format, string->str); g_string_free (string, TRUE); } /* Apply selected filter. */ combo_box = e_shell_searchbar_get_filter_combo_box (searchbar); value = e_action_combo_box_get_current_value (combo_box); switch (value) { case TASK_FILTER_ANY_CATEGORY: break; case TASK_FILTER_UNMATCHED: temp = g_strdup_printf ( "(and (has-categories? #f) %s)", query); g_free (query); query = temp; break; case TASK_FILTER_NEXT_7_DAYS_TASKS: start_range = now_time; end_range = time_day_end (time_add_day (start_range, 7)); start = isodate_from_time_t (start_range); end = isodate_from_time_t (end_range); temp = g_strdup_printf ( "(and %s (due-in-time-range? " "(make-time \"%s\") (make-time \"%s\")))", query, start, end); g_free (query); query = temp; break; case TASK_FILTER_ACTIVE_TASKS: start_range = now_time; end_range = time_day_end (time_add_day (start_range, 365)); start = isodate_from_time_t (start_range); end = isodate_from_time_t (end_range); temp = g_strdup_printf ( "(and %s (due-in-time-range? " "(make-time \"%s\") (make-time \"%s\")) " "(not (is-completed?)))", query, start, end); g_free (query); query = temp; break; case TASK_FILTER_OVERDUE_TASKS: start_range = 0; end_range = time_day_end (now_time); start = isodate_from_time_t (start_range); end = isodate_from_time_t (end_range); temp = g_strdup_printf ( "(and %s (due-in-time-range? " "(make-time \"%s\") (make-time \"%s\")) " "(not (is-completed?)))", query, start, end); g_free (query); query = temp; break; case TASK_FILTER_COMPLETED_TASKS: temp = g_strdup_printf ( "(and (is-completed?) %s)", query); g_free (query); query = temp; break; case TASK_FILTER_TASKS_WITH_ATTACHMENTS: temp = g_strdup_printf ( "(and (has-attachments?) %s)", query); g_free (query); query = temp; break; default: { GList *categories; const gchar *category_name; categories = e_util_dup_searchable_categories (); category_name = g_list_nth_data (categories, value); temp = g_strdup_printf ( "(and (has-categories? \"%s\") %s)", category_name, query); g_free (query); query = temp; g_list_free_full (categories, g_free); break; } } /* Honor the user's preference to hide completed tasks. */ temp = calendar_config_get_hide_completed_tasks_sexp (FALSE); if (temp != NULL) { gchar *temp2; temp2 = g_strdup_printf ("(and %s %s)", temp, query); g_free (query); g_free (temp); query = temp2; } /* Submit the query. */ e_cal_data_model_set_filter (data_model, query); g_free (query); preview_pane = e_task_shell_content_get_preview_pane (task_shell_content); web_view = e_preview_pane_get_web_view (preview_pane); task_preview = E_CAL_COMPONENT_PREVIEW (web_view); e_cal_component_preview_clear (task_preview); }