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); }
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); }
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); }
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; }
/** * 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); }