Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
/**
 * catch_resource_group_fetch_async:
 * @group: (in): A #CatchResourceGroup.
 * @index_: (in): The start index to fetch.
 * @count: (in): The number of resources to fetch starting from @index_.
 * @callback: (in): A callback to execute upon completion.
 * @user_data: (in): User data for @callback.
 *
 * Asynchronously requests that @count resources starting from @index_ be
 * loaded from either the remote API or the local SQLite database. @callback
 * is responsible for calling catch_resource_group_fetch_finish().
 *
 * Once this operation has completed, you may access the loaded resource
 * using catch_resource_group_get_resource().
 */
void
catch_resource_group_fetch_async (CatchResourceGroup  *group,
                                  guint                index_,
                                  guint                count,
                                  GAsyncReadyCallback  callback,
                                  gpointer             user_data)
{
   CatchResourceGroupPrivate *priv;
   GSimpleAsyncResult *simple;

   ENTRY;

   g_return_if_fail(CATCH_IS_RESOURCE_GROUP(group));
   g_return_if_fail(callback != NULL);

   priv = group->priv;

   simple = g_simple_async_result_new(G_OBJECT(group), callback, user_data,
                                      catch_resource_group_fetch_async);

   if (priv->group) {
      gom_resource_group_fetch_async(priv->group, index_, count,
                                     catch_resource_group_fetch_cb,
                                     simple);
   } else {
      catch_resource_group_api_fetch_async(group, index_, count,
                                           callback, user_data);
   }

   EXIT;
}