Exemplo n.º 1
0
static void
produce_bookmarks_from_text (OperationSpec *os, const gchar *text)
{
  GomFilter *like1, *like2, *likes, *type1, *filter;
  GValue value = { 0, };

  GRL_DEBUG ("produce_bookmarks_from_text");

  /* WHERE (title LIKE '%text%' OR desc LIKE '%text%') AND type == BOOKMARKS_TYPE_STREAM */

  like1 = substr_filter ("title", text);
  like2 = substr_filter ("desc", text);
  likes = gom_filter_new_or (like1, like2);
  g_object_unref (like1);
  g_object_unref (like2);

  g_value_init (&value, G_TYPE_INT);
  g_value_set_int (&value, BOOKMARKS_TYPE_STREAM);
  type1 = gom_filter_new_eq (BOOKMARKS_TYPE_RESOURCE, "type", &value);
  g_value_unset (&value);

  filter = gom_filter_new_and (likes, type1);
  g_object_unref (likes);
  g_object_unref (type1);

  produce_bookmarks_from_filter (os, filter);
  g_object_unref (filter);
}
Exemplo n.º 2
0
static void
bookmark_resolve (GrlSourceResolveSpec *rs)
{
  GomRepository *repository;
  GValue value = { 0, };
  GomFilter *filter;
  GomResource *resource;
  GError *error = NULL;
  gint64 id;
  GrlTypeFilter type_filter;

  GRL_DEBUG (__FUNCTION__);

  repository = GRL_BOOKMARKS_SOURCE (rs->source)->priv->repository;

  id = g_ascii_strtoll (grl_media_get_id (rs->media), NULL, 0);
  if (!id) {
    /* Root category: special case */
    grl_media_set_title (rs->media, GRL_ROOT_TITLE);
    rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
    return;
  }

  g_value_init (&value, G_TYPE_INT64);
  g_value_set_int64 (&value, id);
  filter = gom_filter_new_eq (BOOKMARKS_TYPE_RESOURCE, "id", &value);
  g_value_unset (&value);
  resource = gom_repository_find_one_sync (repository,
                                           BOOKMARKS_TYPE_RESOURCE,
                                           filter,
                                           &error);
  g_object_unref (filter);

  if (!resource) {
    GRL_WARNING ("Failed to get bookmark: %s", error->message);
    g_error_free (error);

    error = g_error_new_literal (GRL_CORE_ERROR,
                                 GRL_CORE_ERROR_RESOLVE_FAILED,
                                 _("Failed to get bookmark metadata"));
    rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, error);
    g_error_free (error);
    return;
  }

  type_filter = grl_operation_options_get_type_filter (rs->options);
  build_media_from_resource (rs->media, resource, type_filter);
  g_object_unref (resource);
  rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
}
Exemplo n.º 3
0
static void
produce_bookmarks_from_category (OperationSpec *os, const gchar *category_id)
{
  GomFilter *filter;
  GValue value = { 0, };
  int parent_id;

  GRL_DEBUG ("produce_bookmarks_from_category");
  parent_id = atoi (category_id);

  g_value_init (&value, G_TYPE_INT64);
  g_value_set_int64 (&value, parent_id);
  filter = gom_filter_new_eq (BOOKMARKS_TYPE_RESOURCE, "parent", &value);
  g_value_unset (&value);

  produce_bookmarks_from_filter (os, filter);
  g_object_unref (filter);
}
Exemplo n.º 4
0
gint
main (gint   argc,
      gchar *argv[])
{
   GOptionContext *context;
   GomFilter *filter;
   GError *error = NULL;

   context = g_option_context_new(_("- Catch, List a users spaces."));
   g_option_context_add_main_entries(context, entries, PACKAGE);
   if (!g_option_context_parse(context, &argc, &argv, &error)) {
      g_printerr("%s\n", error->message);
      g_error_free(error);
      return EXIT_FAILURE;
   }

   g_type_init();

   gMainLoop = g_main_loop_new(NULL, FALSE);
   gSession = g_object_new(CATCH_TYPE_SESSION,
                           "bearer-token", gBearerToken,
                           "port", gPort,
                           "secure", !gInsecure,
                           "server", gServer,
                           NULL);

#if 0
   filter = gom_filter_new_eq();

   if (gQuery) {
      catch_resource_filter_set_search_query(filter, gQuery);
   }
#else
   filter = NULL;
#endif

   catch_session_get_spaces_async(gSession, filter, get_spaces_cb, NULL);

   g_main_loop_run(gMainLoop);
   g_main_loop_unref(gMainLoop);

   return EXIT_SUCCESS;
}
Exemplo n.º 5
0
/**
 * catch_space_get_objects_async:
 * @space: (in): A #CatchSpace.
 * @filter: (in): A #GomFilter.
 * @callback: (in): A callback to execute upon completion.
 * @user_data: (in): User data for @callback.
 *
 * Fetches the objects found in a space using the filter provided.
 * @callback is responsible for calling catch_space_get_objects_finish()
 * to complete the request.
 */
void
catch_space_get_objects_async (CatchSpace         *space,
                                GomFilter           *filter,
                                GAsyncReadyCallback  callback,
                                gpointer             user_data)
{
   GSimpleAsyncResult *simple;
   GomFilter *map_filter;
   GomFilter *tmp;
   GValue value = { 0 };

   ENTRY;

   g_return_if_fail(CATCH_IS_SPACE(space));
   g_return_if_fail(!filter || GOM_IS_FILTER(filter));
   g_return_if_fail(callback != NULL);

   simple = g_simple_async_result_new(G_OBJECT(space), callback, user_data,
                                      catch_space_get_objects_async);

   g_value_init(&value, G_TYPE_INT64);
   g_object_get_property(G_OBJECT(space), "local-id", &value);
   map_filter = gom_filter_new_eq(CATCH_TYPE_SPACE, "local-id", &value);
   g_value_unset(&value);

   if (filter) {
      tmp = map_filter;
      map_filter = gom_filter_new_and(map_filter, filter);
      g_object_unref(tmp);
   }

   gom_resource_fetch_m2m_async(GOM_RESOURCE(space), CATCH_TYPE_OBJECT,
                                "spaces_objects", map_filter,
                                catch_space_get_objects_cb,
                                simple);

   EXIT;
}
static void
test_unique (void)
{
  GomAdapter *adapter;
  GomRepository *repository;
  GList *object_types;
  ItemResource *item;

  GomFilter *filter;
  GValue value = { 0, };
  guint id;
  gchar *name, *email;

  GError *error = NULL;

  adapter = gom_adapter_new();
  gom_adapter_open_sync(adapter, ":memory:", &error);
  g_assert_no_error(error);

  repository = gom_repository_new(adapter);
  object_types = g_list_prepend(NULL, GINT_TO_POINTER(ITEM_TYPE_RESOURCE));
  gom_repository_automatic_migrate_sync(repository, 1, object_types, &error);
  g_assert_no_error(error);

  /* Insert an item */
  item = g_object_new (ITEM_TYPE_RESOURCE, "repository", repository,
                       "name", "gom", "email", "*****@*****.**",
                       NULL);
  gom_resource_save_sync(GOM_RESOURCE(item), &error);
  g_assert_no_error(error);
  g_object_get(item, "id", &id, NULL);
  g_object_unref(item);

  /* Fetch it, to make sure it was saved correctly */
  g_value_init(&value, G_TYPE_UINT);
  g_value_set_uint(&value, id);
  filter = gom_filter_new_eq(ITEM_TYPE_RESOURCE, "id", &value);
  g_value_unset(&value);

  item = ITEM_RESOURCE (gom_repository_find_one_sync(repository,
                                                     ITEM_TYPE_RESOURCE,
                                                     filter,
                                                     &error));
  g_assert_no_error(error);
  g_assert(item);
  g_object_unref(filter);

  g_object_get(item, "name", &name, "email", &email, NULL);
  g_assert_cmpstr(name, ==, "gom");
  g_free(name);
  g_assert_cmpstr(email, ==, "*****@*****.**");
  g_free(email);
  g_object_unref(item);

  /* Now try inserting a new item with the same name (non UNIQUE column) */
  item = g_object_new (ITEM_TYPE_RESOURCE, "repository", repository,
                       "name", "gom", "email", "*****@*****.**",
                       NULL);
  gom_resource_save_sync(GOM_RESOURCE(item), &error);
  g_assert_no_error(error);
  g_object_get(item, "id", &id, NULL);
  g_object_unref(item);

  /* Fetch it, to make sure it was saved correctly */
  g_value_init(&value, G_TYPE_UINT);
  g_value_set_uint(&value, id);
  filter = gom_filter_new_eq(ITEM_TYPE_RESOURCE, "id", &value);
  g_value_unset(&value);

  item = ITEM_RESOURCE (gom_repository_find_one_sync(repository,
                                                     ITEM_TYPE_RESOURCE,
                                                     filter,
                                                     &error));
  g_assert_no_error(error);
  g_assert(item);
  g_object_unref(filter);

  g_object_get(item, "name", &name, "email", &email, NULL);
  g_assert_cmpstr(name, ==, "gom");
  g_free(name);
  g_assert_cmpstr(email, ==, "*****@*****.**");
  g_free(email);
  g_object_unref(item);

  /* And finally try inserting an item with the same email (UNIQUE column) */
  item = g_object_new (ITEM_TYPE_RESOURCE, "repository", repository,
                       "name", "gom2", "email", "*****@*****.**",
                       NULL);
  gom_resource_save_sync(GOM_RESOURCE(item), &error);
  g_assert_error(error, GOM_ERROR, GOM_ERROR_COMMAND_SQLITE);
  g_assert (strstr (error->message, "UNIQUE") != NULL);
  g_assert (strstr (error->message, "items.email") != NULL);
  g_object_unref(item);
  g_clear_error(&error);

  gom_adapter_close_sync(adapter, &error);
  g_assert_no_error(error);

  g_object_unref(repository);
  g_object_unref(adapter);
}