static void mail_shell_view_folder_tree_selected_cb (EMailShellView *mail_shell_view, CamelStore *store, const gchar *folder_name, CamelFolderInfoFlags flags, EMFolderTree *folder_tree) { EMailShellContent *mail_shell_content; EShellView *shell_view; EMailReader *reader; EMailView *mail_view; GCancellable *cancellable; AsyncContext *context; EActivity *activity; shell_view = E_SHELL_VIEW (mail_shell_view); mail_shell_content = mail_shell_view->priv->mail_shell_content; mail_view = e_mail_shell_content_get_mail_view (mail_shell_content); reader = E_MAIL_READER (mail_view); /* Cancel any unfinished open folder operations. */ if (mail_shell_view->priv->opening_folder != NULL) { g_cancellable_cancel (mail_shell_view->priv->opening_folder); g_object_unref (mail_shell_view->priv->opening_folder); mail_shell_view->priv->opening_folder = NULL; } /* If we are to clear the message list, do so immediately. */ if ((flags & CAMEL_FOLDER_NOSELECT) || folder_name == NULL) { e_mail_reader_set_folder (reader, NULL); e_shell_view_update_actions_in_idle (shell_view); return; } g_warn_if_fail (CAMEL_IS_STORE (store)); /* Open the selected folder asynchronously. */ activity = e_mail_reader_new_activity (reader); cancellable = e_activity_get_cancellable (activity); mail_shell_view->priv->opening_folder = g_object_ref (cancellable); context = g_slice_new0 (AsyncContext); context->activity = activity; context->reader = g_object_ref (reader); context->shell_view = g_object_ref (shell_view); camel_store_get_folder ( store, folder_name, 0, G_PRIORITY_DEFAULT, cancellable, (GAsyncReadyCallback) mail_shell_view_got_folder_cb, context); }
static gboolean e_alert_sink_thread_job_done_cb (gpointer user_data) { EAlertSinkThreadJobData *job_data = user_data; EAlertSink *alert_sink; GCancellable *cancellable; g_return_val_if_fail (job_data != NULL, FALSE); g_return_val_if_fail (job_data->func != NULL, FALSE); alert_sink = e_activity_get_alert_sink (job_data->activity); cancellable = e_activity_get_cancellable (job_data->activity); camel_operation_pop_message (cancellable); if (e_activity_handle_cancellation (job_data->activity, job_data->error)) { /* do nothing */ } else if (job_data->error != NULL) { if (job_data->alert_arg_0) { e_alert_submit ( alert_sink, job_data->alert_ident, job_data->alert_arg_0, job_data->error->message, NULL); } else { e_alert_submit ( alert_sink, job_data->alert_ident, job_data->error->message, NULL); } } else { e_activity_set_state (job_data->activity, E_ACTIVITY_COMPLETED); } /* clean-up */ g_clear_object (&job_data->activity); g_clear_error (&job_data->error); g_free (job_data->alert_ident); g_free (job_data->alert_arg_0); if (job_data->free_user_data) job_data->free_user_data (job_data->user_data); g_free (job_data); return FALSE; }
static gpointer e_alert_sink_thread_job (gpointer user_data) { EAlertSinkThreadJobData *job_data = user_data; GCancellable *cancellable; g_return_val_if_fail (job_data != NULL, NULL); g_return_val_if_fail (job_data->func != NULL, NULL); g_return_val_if_fail (job_data->error == NULL, NULL); cancellable = e_activity_get_cancellable (job_data->activity); job_data->func (job_data, job_data->user_data, cancellable, &job_data->error); g_timeout_add (1, e_alert_sink_thread_job_done_cb, job_data); return NULL; }
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 {