[tepl] FileMetadata: disallow some operations during saving



commit fa4a52052f8fc384408b42d3f9953c85602467a8
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Thu Apr 9 17:50:44 2020 +0200

    FileMetadata: disallow some operations during saving

 tepl/tepl-file-metadata.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
---
diff --git a/tepl/tepl-file-metadata.c b/tepl/tepl-file-metadata.c
index 3e200c1..9965d08 100644
--- a/tepl/tepl-file-metadata.c
+++ b/tepl/tepl-file-metadata.c
@@ -73,6 +73,8 @@ struct _TeplFileMetadataPrivate
         */
        GFileInfo *file_info_modified;
 
+       guint is_saving : 1;
+
 #if 0
        guint use_gvfs_metadata : 1;
 #endif
@@ -225,6 +227,7 @@ tepl_file_metadata_set (TeplFileMetadata *metadata,
        g_return_if_fail (value == NULL || g_utf8_validate (value, -1, NULL));
 
        priv = tepl_file_metadata_get_instance_private (metadata);
+       g_return_if_fail (!priv->is_saving);
 
        if (priv->file_info_modified == NULL)
        {
@@ -340,12 +343,16 @@ tepl_file_metadata_load_async (TeplFileMetadata    *metadata,
                               GAsyncReadyCallback  callback,
                               gpointer             user_data)
 {
+       TeplFileMetadataPrivate *priv;
        GTask *task;
 
        g_return_if_fail (TEPL_IS_FILE_METADATA (metadata));
        g_return_if_fail (G_IS_FILE (location));
        g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
 
+       priv = tepl_file_metadata_get_instance_private (metadata);
+       g_return_if_fail (!priv->is_saving);
+
        task = g_task_new (metadata, cancellable, callback, user_data);
        g_task_set_priority (task, io_priority);
 
@@ -453,6 +460,9 @@ tepl_file_metadata_save_async (TeplFileMetadata    *metadata,
        g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
 
        priv = tepl_file_metadata_get_instance_private (metadata);
+       g_return_if_fail (!priv->is_saving);
+
+       priv->is_saving = TRUE;
 
        task = g_task_new (metadata, cancellable, callback, user_data);
        g_task_set_priority (task, io_priority);
@@ -493,10 +503,15 @@ tepl_file_metadata_save_finish (TeplFileMetadata  *metadata,
                                GAsyncResult      *result,
                                GError           **error)
 {
+       TeplFileMetadataPrivate *priv;
+
        g_return_val_if_fail (TEPL_IS_FILE_METADATA (metadata), FALSE);
        g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
        g_return_val_if_fail (g_task_is_valid (result, metadata), FALSE);
 
+       priv = tepl_file_metadata_get_instance_private (metadata);
+       priv->is_saving = FALSE;
+
        return g_task_propagate_boolean (G_TASK (result), error);
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]