static void test_notnull (void) { GomAdapter *adapter; GomRepository *repository; GList *object_types; ItemResource *item; 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 without a name */ item = g_object_new (ITEM_TYPE_RESOURCE, "repository", repository, "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, "NOT NULL") != NULL); g_assert (strstr (error->message, "items.name") != NULL); g_clear_error(&error); g_object_unref(item); /* Try inserting an item without an email */ item = g_object_new (ITEM_TYPE_RESOURCE, "repository", repository, "name", "gom", NULL); gom_resource_save_sync(GOM_RESOURCE(item), &error); g_assert_error(error, GOM_ERROR, GOM_ERROR_COMMAND_SQLITE); g_assert (strstr (error->message, "NOT NULL") != NULL); g_assert (strstr (error->message, "items.email") != NULL); g_clear_error(&error); g_object_unref(item); gom_adapter_close_sync(adapter, &error); g_assert_no_error(error); g_object_unref(repository); g_object_unref(adapter); }
static void migrate_cb (GObject *object, GAsyncResult *result, gpointer user_data) { GomRepository *repository = (GomRepository *)object; GomAdapter *adapter; gboolean ret; GError *error = NULL; GomResource *resource; GomFilter *filter; GValue value = { 0, }; char *url, *thumbnail_url; gboolean favourite; ret = gom_repository_migrate_finish(repository, result, &error); g_assert_no_error(error); g_assert(ret); /* Get the item containing "sherwood" */ g_value_init(&value, G_TYPE_STRING); g_value_set_string(&value, "%sherwood%"); filter = gom_filter_new_like(BOOKMARKS_TYPE_RESOURCE, "title", &value); g_value_unset(&value); resource = gom_repository_find_one_sync(repository, BOOKMARKS_TYPE_RESOURCE, filter, &error); g_assert_no_error(error); g_assert(resource); g_object_get(resource, "url", &url, NULL); g_assert_cmpstr(url, ==, "file:///home/hadess/.cache/totem/media/b91c194d5725c4586e583c4963233a3ae3c28ea3e2cc2019f903089911dd6d45"); g_free(url); /* Modify the item */ g_object_set(resource, "url", "file:///tmp/test", "thumbnail-url", "file:///tmp/test-thumbnail", "favourite", TRUE, NULL); ret = gom_resource_save_sync(resource, &error); g_assert_no_error(error); g_assert(ret); g_object_unref(resource); /* Fetch it again */ resource = gom_repository_find_one_sync(repository, BOOKMARKS_TYPE_RESOURCE, filter, &error); g_assert_no_error(error); g_assert(resource); g_object_get(resource, "url", &url, "thumbnail-url", &thumbnail_url, "favourite", &favourite, NULL); g_assert_cmpstr(url, ==, "file:///tmp/test"); g_assert_cmpstr(thumbnail_url, ==, "file:///tmp/test-thumbnail"); g_assert(favourite); g_free(url); g_free(thumbnail_url); g_object_unref(filter); adapter = gom_repository_get_adapter(repository); gom_adapter_close_async(adapter, close_cb, user_data); }
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); }
static void store_bookmark (GrlBookmarksSource *bookmarks_source, GList **keylist, GrlMediaBox *parent, GrlMedia *bookmark, GError **error) { GomResource *resource; const gchar *title; const gchar *url; const gchar *desc; const gchar *thumb; GTimeVal now; gint64 parent_id; const gchar *mime; gchar *date; guint type; gint64 id; gchar *str_id; GError *local_error = NULL; gboolean ret; GRL_DEBUG ("store_bookmark"); title = grl_media_get_title (bookmark); url = grl_media_get_url (bookmark); thumb = grl_media_get_thumbnail (bookmark); desc = grl_media_get_description (bookmark); mime = grl_media_get_mime (bookmark); g_get_current_time (&now); date = g_time_val_to_iso8601 (&now); if (!parent) { parent_id = 0; } else { parent_id = g_ascii_strtoll (grl_media_get_id (GRL_MEDIA (parent)), NULL, 0); } if (parent_id < 0) { parent_id = 0; } GRL_DEBUG ("URL: '%s'", url); if (GRL_IS_MEDIA_BOX (bookmark)) { type = BOOKMARK_TYPE_CATEGORY; } else { type = BOOKMARK_TYPE_STREAM; } resource = g_object_new (BOOKMARKS_TYPE_RESOURCE, "repository", bookmarks_source->priv->repository, "parent", parent_id, "type", type, NULL); if (type == BOOKMARK_TYPE_STREAM) { g_object_set (G_OBJECT (resource), "url", url, NULL); *keylist = g_list_remove (*keylist, GRLKEYID_TO_POINTER (GRL_METADATA_KEY_URL)); } if (title) { g_object_set (G_OBJECT (resource), "title", title, NULL); *keylist = g_list_remove (*keylist, GRLKEYID_TO_POINTER (GRL_METADATA_KEY_TITLE)); } else if (url) { g_object_set (G_OBJECT (resource), "title", url, NULL); } else { g_object_set (G_OBJECT (resource), "title", "(unknown)", NULL); } if (date) { g_object_set (G_OBJECT (resource), "date", date, NULL); } if (mime) { g_object_set (G_OBJECT (resource), "mime", mime, NULL); *keylist = g_list_remove (*keylist, GRLKEYID_TO_POINTER (GRL_METADATA_KEY_MIME)); } if (desc) { g_object_set (G_OBJECT (resource), "desc", desc, NULL); *keylist = g_list_remove (*keylist, GRLKEYID_TO_POINTER (GRL_METADATA_KEY_DESCRIPTION)); } if (thumb) { g_object_set (G_OBJECT (resource), "thumbnail-url", desc, NULL); *keylist = g_list_remove (*keylist, GRLKEYID_TO_POINTER (GRL_METADATA_KEY_THUMBNAIL)); } ret = gom_resource_save_sync (resource, &local_error); if (!ret) { GRL_WARNING ("Failed to store bookmark '%s': %s", title, local_error->message); *error = g_error_new (GRL_CORE_ERROR, GRL_CORE_ERROR_STORE_FAILED, _("Failed to store: %s"), local_error->message); g_error_free (local_error); g_object_unref (resource); return; } g_object_get (resource, "id", &id, NULL); str_id = g_strdup_printf ("%" G_GINT64_FORMAT, id); grl_media_set_id (bookmark, str_id); g_free (str_id); g_object_unref (resource); if (bookmarks_source->priv->notify_changes) { grl_source_notify_change (GRL_SOURCE (bookmarks_source), bookmark, GRL_CONTENT_ADDED, FALSE); } }