static void gom_repository_find_one_cb (GObject *object, GAsyncResult *result, gpointer user_data) { GSimpleAsyncResult *simple = user_data; GomResourceGroup *group; GomRepository *repository = (GomRepository *)object; GError *error = NULL; g_return_if_fail(GOM_IS_REPOSITORY(repository)); g_return_if_fail(G_IS_SIMPLE_ASYNC_RESULT(simple)); if (!(group = gom_repository_find_finish(repository, result, &error))) { g_simple_async_result_take_error(simple, error); g_simple_async_result_complete_in_idle(simple); g_object_unref(simple); return; } if (!gom_resource_group_get_count(group)) { g_simple_async_result_set_error(simple, GOM_ERROR, GOM_ERROR_REPOSITORY_EMPTY_RESULT, _("No resources were found.")); g_simple_async_result_complete_in_idle(simple); g_object_unref(simple); g_object_unref(group); return; } gom_resource_group_fetch_async(group, 0, 1, gom_repository_find_one_fetch_cb, simple); g_object_unref(group); }
static void find_cb (GObject *object, GAsyncResult *res, gpointer user_data) { GomResourceGroup *group; OperationSpec *os = user_data; GError *local_error = NULL; GError *error = NULL; guint idx, count, num_left; group = gom_repository_find_finish (GOM_REPOSITORY (object), res, &local_error); if (!group) { GRL_WARNING ("Failed to find bookmarks: %s", local_error->message); error = g_error_new (GRL_CORE_ERROR, os->error_code, _("Failed to find bookmarks: %s"), local_error->message); g_error_free (local_error); os->callback (os->source, os->operation_id, NULL, 0, os->user_data, error); g_error_free (error); goto out; } count = gom_resource_group_get_count (group); if (os->skip >= count) { os->callback (os->source, os->operation_id, NULL, 0, os->user_data, NULL); goto out; } if (!gom_resource_group_fetch_sync (group, os->skip, os->count, &local_error)) { GRL_WARNING ("Failed to find bookmarks: %s", local_error->message); error = g_error_new (GRL_CORE_ERROR, os->error_code, _("Failed to find bookmarks: %s"), local_error->message); g_error_free (local_error); os->callback (os->source, os->operation_id, NULL, 0, os->user_data, error); g_error_free (error); goto out; } idx = os->skip; num_left = MIN (count - os->skip, os->count); for (idx = os->skip; num_left > 0 ; idx++) { GomResource *resource; GrlMedia *media; resource = gom_resource_group_get_index (group, idx); media = build_media_from_resource (NULL, resource, os->type_filter); if (media == NULL) { num_left--; if (num_left == 0) os->callback (os->source, os->operation_id, NULL, 0, os->user_data, NULL); continue; } os->callback (os->source, os->operation_id, media, --num_left, os->user_data, NULL); } g_object_unref (group); out: g_slice_free (OperationSpec, os); }