[tepl] Metadata: query if GFile location exists
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tepl] Metadata: query if GFile location exists
- Date: Sat, 18 Apr 2020 17:19:42 +0000 (UTC)
commit 5104a50ef42f34b6f717638d5ebff382a6a05cbc
Author: Sébastien Wilmet <swilmet gnome org>
Date: Thu Apr 16 13:54:56 2020 +0200
Metadata: query if GFile location exists
Now all unit tests pass, yay \o/
tepl/tepl-metadata.c | 151 +++++++++++++++++++++++++----------------
testsuite/test-file-metadata.c | 10 +--
2 files changed, 99 insertions(+), 62 deletions(-)
---
diff --git a/tepl/tepl-metadata.c b/tepl/tepl-metadata.c
index 3491d8a..2b7e816 100644
--- a/tepl/tepl-metadata.c
+++ b/tepl/tepl-metadata.c
@@ -54,21 +54,23 @@ use_gvfs_metadata (void)
}
/******************************************************************************/
-/* Simplify TeplMetadataStore is_activated/is_loaded/is_loading/load */
+/* Common task for GFile query exists +
+ * TeplMetadataStore is_activated/is_loaded/is_loading/load
+ */
static void
-load_metadata_store__notify_loaded_cb (TeplMetadataStore *store,
- GParamSpec *pspec,
- GTask *task)
+common_task__metadata_store_notify_loaded_cb (TeplMetadataStore *store,
+ GParamSpec *pspec,
+ GTask *task)
{
g_task_return_boolean (task, TRUE);
g_object_unref (task);
}
static void
-load_metadata_store__load_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
+common_task__metadata_store_load_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
{
TeplMetadataStore *store = TEPL_METADATA_STORE (source_object);
GTask *task = G_TASK (user_data);
@@ -88,19 +90,34 @@ load_metadata_store__load_cb (GObject *source_object,
}
static void
-load_metadata_store_async (TeplMetadataStore *store,
- gint io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
+common_task__query_exists_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
{
- GTask *task;
+ GFile *location = G_FILE (source_object);
+ GTask *task = G_TASK (user_data);
+ GFileInfo *info;
+ GError *error = NULL;
+ TeplMetadataStore *store;
- g_return_if_fail (TEPL_IS_METADATA_STORE (store));
- g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+ info = g_file_query_info_finish (location, result, &error);
+ g_clear_object (&info);
+ if (error != NULL)
+ {
+ /* The location doesn't exist. Do the same behavior as the GFile
+ * metadata APIs, return an error. Having the same behavior with
+ * both backends (GVfs and TeplMetadataStore) is easier for
+ * testing, it's more consistent.
+ * Note that we haven't used tepl_utils_file_query_exists_*()
+ * because we need the GError instead of creating our own
+ * GError.
+ */
+ g_task_return_error (task, error);
+ g_object_unref (task);
+ return;
+ }
- task = g_task_new (store, cancellable, callback, user_data);
- g_task_set_priority (task, io_priority);
+ store = tepl_metadata_store_get_singleton ();
if (!_tepl_metadata_store_is_activated (store))
{
@@ -120,27 +137,51 @@ load_metadata_store_async (TeplMetadataStore *store,
{
g_signal_connect (store,
"notify::loaded",
- G_CALLBACK (load_metadata_store__notify_loaded_cb),
+ G_CALLBACK (common_task__metadata_store_notify_loaded_cb),
task);
}
else
{
_tepl_metadata_store_load_async (store,
- io_priority,
- cancellable,
- load_metadata_store__load_cb,
+ g_task_get_priority (task),
+ g_task_get_cancellable (task),
+ common_task__metadata_store_load_cb,
task);
}
}
+static void
+common_task_async (GFile *location,
+ gint io_priority,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GTask *task;
+
+ g_return_if_fail (G_IS_FILE (location));
+ g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+
+ task = g_task_new (location, cancellable, callback, user_data);
+ g_task_set_priority (task, io_priority);
+
+ g_file_query_info_async (location,
+ G_FILE_ATTRIBUTE_STANDARD_TYPE,
+ G_FILE_QUERY_INFO_NONE,
+ io_priority,
+ cancellable,
+ common_task__query_exists_cb,
+ task);
+}
+
static gboolean
-load_metadata_store_finish (TeplMetadataStore *store,
- GAsyncResult *result,
- GError **error)
+common_task_finish (GFile *location,
+ GAsyncResult *result,
+ GError **error)
{
- g_return_val_if_fail (TEPL_IS_METADATA_STORE (store), FALSE);
+ g_return_val_if_fail (G_IS_FILE (location), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- g_return_val_if_fail (g_task_is_valid (result, store), FALSE);
+ g_return_val_if_fail (g_task_is_valid (result, location), FALSE);
return g_task_propagate_boolean (G_TASK (result), error);
}
@@ -149,9 +190,9 @@ load_metadata_store_finish (TeplMetadataStore *store,
/* Query info */
static void
-do_query_info (TeplMetadataStore *store,
- GTask *task)
+do_query_info (GTask *task)
{
+ TeplMetadataStore *store = tepl_metadata_store_get_singleton ();
GFile *location = g_task_get_source_object (task);
GFileInfo *file_info;
@@ -167,15 +208,15 @@ do_query_info (TeplMetadataStore *store,
}
static void
-query_info__load_metadata_store_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
+query_info__common_task_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
{
- TeplMetadataStore *store = TEPL_METADATA_STORE (source_object);
+ GFile *location = G_FILE (source_object);
GTask *task = G_TASK (user_data);
GError *error = NULL;
- load_metadata_store_finish (store, result, &error);
+ common_task_finish (location, result, &error);
if (error != NULL)
{
g_task_return_error (task, error);
@@ -183,7 +224,7 @@ query_info__load_metadata_store_cb (GObject *source_object,
return;
}
- do_query_info (store, task);
+ do_query_info (task);
}
void
@@ -194,7 +235,6 @@ _tepl_metadata_query_info_async (GFile *location,
gpointer user_data)
{
GTask *task;
- TeplMetadataStore *store;
if (use_gvfs_metadata ())
{
@@ -214,13 +254,11 @@ _tepl_metadata_query_info_async (GFile *location,
task = g_task_new (location, cancellable, callback, user_data);
g_task_set_priority (task, io_priority);
- store = tepl_metadata_store_get_singleton ();
-
- load_metadata_store_async (store,
- io_priority,
- cancellable,
- query_info__load_metadata_store_cb,
- task);
+ common_task_async (location,
+ io_priority,
+ cancellable,
+ query_info__common_task_cb,
+ task);
}
GFileInfo *
@@ -244,9 +282,9 @@ _tepl_metadata_query_info_finish (GFile *location,
/* Set attributes */
static void
-do_set_attributes (TeplMetadataStore *store,
- GTask *task)
+do_set_attributes (GTask *task)
{
+ TeplMetadataStore *store = tepl_metadata_store_get_singleton ();
GFile *location = g_task_get_source_object (task);
GFileInfo *file_info_to_merge = g_task_get_task_data (task);
GFileInfo *full_file_info;
@@ -294,15 +332,15 @@ do_set_attributes (TeplMetadataStore *store,
}
static void
-set_attributes__load_metadata_store_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
+set_attributes__common_task_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
{
- TeplMetadataStore *store = TEPL_METADATA_STORE (source_object);
+ GFile *location = G_FILE (source_object);
GTask *task = G_TASK (user_data);
GError *error = NULL;
- load_metadata_store_finish (store, result, &error);
+ common_task_finish (location, result, &error);
if (error != NULL)
{
g_task_return_error (task, error);
@@ -310,7 +348,7 @@ set_attributes__load_metadata_store_cb (GObject *source_object,
return;
}
- do_set_attributes (store, task);
+ do_set_attributes (task);
}
void
@@ -322,7 +360,6 @@ _tepl_metadata_set_attributes_async (GFile *location,
gpointer user_data)
{
GTask *task;
- TeplMetadataStore *store;
if (use_gvfs_metadata ())
{
@@ -340,13 +377,11 @@ _tepl_metadata_set_attributes_async (GFile *location,
g_task_set_priority (task, io_priority);
g_task_set_task_data (task, g_file_info_dup (file_info), g_object_unref);
- store = tepl_metadata_store_get_singleton ();
-
- load_metadata_store_async (store,
- io_priority,
- cancellable,
- set_attributes__load_metadata_store_cb,
- task);
+ common_task_async (location,
+ io_priority,
+ cancellable,
+ set_attributes__common_task_cb,
+ task);
}
gboolean
diff --git a/testsuite/test-file-metadata.c b/testsuite/test-file-metadata.c
index 2e3be64..55e5517 100644
--- a/testsuite/test-file-metadata.c
+++ b/testsuite/test-file-metadata.c
@@ -321,7 +321,8 @@ test_set_without_load (gpointer fixture,
}
static void
-test_arbitrary_keys_and_values_success (void)
+test_arbitrary_keys_and_values_success (gpointer fixture,
+ gconstpointer user_data)
{
check_round_trip ("tepl-simple-key", "simple-value");
check_round_trip ("tepl-simple-key", " ");
@@ -386,7 +387,8 @@ test_for_remote_file_success (gpointer fixture,
}
static void
-test_for_remote_file_failure (void)
+test_for_remote_file_failure (gpointer fixture,
+ gconstpointer user_data)
{
if (g_test_subprocess ())
{
@@ -599,13 +601,13 @@ main (int argc,
add_test ("get_set_metadata", test_get_set_metadata);
add_test ("set_without_load", test_set_without_load);
- g_test_add_func ("/file_metadata/arbitrary_keys_and_values_success",
test_arbitrary_keys_and_values_success);
+ add_test ("arbitrary_keys_and_values_success", test_arbitrary_keys_and_values_success);
add_test ("arbitrary_keys_and_values_failure_01", test_arbitrary_keys_and_values_failure_01);
add_test ("arbitrary_keys_and_values_failure_02", test_arbitrary_keys_and_values_failure_02);
add_test ("arbitrary_keys_and_values_failure_03", test_arbitrary_keys_and_values_failure_03);
add_test ("arbitrary_keys_and_values_failure_04", test_arbitrary_keys_and_values_failure_04);
add_test ("for_remote_file_success", test_for_remote_file_success);
- g_test_add_func ("/file_metadata/for_remote_file_failure", test_for_remote_file_failure);
+ add_test ("for_remote_file_failure", test_for_remote_file_failure);
add_test ("simulate_several_apps", test_simulate_several_apps);
add_test ("save_as_new_document", test_save_as_new_document);
add_test ("open_existing_document_and_save_as", test_open_existing_document_and_save_as);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]