void gom_repository_find_async (GomRepository *repository, GType resource_type, GomFilter *filter, GAsyncReadyCallback callback, gpointer user_data) { GomRepositoryPrivate *priv; GSimpleAsyncResult *simple; g_return_if_fail(GOM_IS_REPOSITORY(repository)); g_return_if_fail(g_type_is_a(resource_type, GOM_TYPE_RESOURCE)); g_return_if_fail(resource_type != GOM_TYPE_RESOURCE); g_return_if_fail(!filter || GOM_IS_FILTER(filter)); g_return_if_fail(callback != NULL); priv = repository->priv; simple = g_simple_async_result_new(G_OBJECT(repository), callback, user_data, gom_repository_find_async); g_object_set_data(G_OBJECT(simple), "resource-type", GSIZE_TO_POINTER(resource_type)); g_object_set_data_full(G_OBJECT(simple), "filter", filter ? g_object_ref(filter) : NULL, filter ? g_object_unref : NULL); gom_adapter_queue_read(priv->adapter, gom_repository_find_cb, simple); }
/** * gom_repository_find_sync: * @repository: (in): A #GomRepository. * @resource_type: (in): The #GType of the resources to query. * @filter: (in) (allow-none): An optional filter for the query. * @error: (out): A location for a #GError, or %NULL. * * Synchronously queries the #GomRepository for objects matching the * requested query. This must only be run from a callback provided to * gom_adapter_queue_read(). * * Returns: (transfer full): A #GomResourceGroup or %NULL. */ GomResourceGroup * gom_repository_find_sync (GomRepository *repository, GType resource_type, GomFilter *filter, GError **error) { GomRepositoryPrivate *priv; GSimpleAsyncResult *simple; GomResourceGroup *ret; GAsyncQueue *queue; g_return_val_if_fail(GOM_IS_REPOSITORY(repository), NULL); g_return_val_if_fail(g_type_is_a(resource_type, GOM_TYPE_RESOURCE), NULL); g_return_val_if_fail(resource_type != GOM_TYPE_RESOURCE, NULL); g_return_val_if_fail(!filter || GOM_IS_FILTER(filter), NULL); priv = repository->priv; queue = g_async_queue_new(); simple = g_simple_async_result_new(G_OBJECT(repository), NULL, NULL, gom_repository_find_sync); g_object_set_data(G_OBJECT(simple), "resource-type", GSIZE_TO_POINTER(resource_type)); g_object_set_data_full(G_OBJECT(simple), "filter", filter ? g_object_ref(filter) : NULL, filter ? g_object_unref : NULL); g_object_set_data(G_OBJECT(simple), "queue", queue); gom_adapter_queue_read(priv->adapter, gom_repository_find_cb, simple); g_async_queue_pop(queue); g_async_queue_unref(queue); if (!(ret = g_simple_async_result_get_op_res_gpointer(simple))) { g_simple_async_result_propagate_error(simple, error); } else { ret = g_object_ref(ret); } g_object_unref(simple); return ret; }
void gom_resource_fetch_m2m_async (GomResource *resource, GType resource_type, const gchar *m2m_table, GomFilter *filter, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *simple; GomRepository *repository; GomAdapter *adapter; g_return_if_fail(GOM_IS_RESOURCE(resource)); g_return_if_fail(g_type_is_a(resource_type, GOM_TYPE_RESOURCE)); g_return_if_fail(m2m_table != NULL); g_return_if_fail(callback != NULL); repository = gom_resource_get_repository(resource); g_assert(GOM_IS_REPOSITORY(repository)); adapter = gom_repository_get_adapter(repository); g_assert(GOM_IS_ADAPTER(adapter)); simple = g_simple_async_result_new(G_OBJECT(resource), callback, user_data, gom_resource_fetch_m2m_async); g_object_set_data(G_OBJECT(simple), "resource-type", GINT_TO_POINTER(resource_type)); g_object_set_data_full(G_OBJECT(simple), "m2m-table", g_strdup(m2m_table), g_free); if (filter) { g_object_set_data_full(G_OBJECT(simple), "filter", g_object_ref(filter), g_object_unref); } gom_adapter_queue_read(adapter, gom_resource_fetch_m2m_cb, simple); }