[gtksourceview/wip/metadata: 6/6] FileSaver: add save_metadata(), sync and async versions



commit 7c9d28c836a661604ca8972f682568b41c13c7a8
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Fri Apr 29 16:33:21 2016 +0200

    FileSaver: add save_metadata(), sync and async versions

 docs/reference/gtksourceview-3.0-sections.txt |    3 +
 gtksourceview/gtksourcefilesaver.c            |  136 +++++++++++++++++++++++++
 gtksourceview/gtksourcefilesaver.h            |   19 ++++
 3 files changed, 158 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/gtksourceview-3.0-sections.txt b/docs/reference/gtksourceview-3.0-sections.txt
index be54a3c..03fea7e 100644
--- a/docs/reference/gtksourceview-3.0-sections.txt
+++ b/docs/reference/gtksourceview-3.0-sections.txt
@@ -329,6 +329,9 @@ gtk_source_file_saver_set_flags
 gtk_source_file_saver_get_flags
 gtk_source_file_saver_save_async
 gtk_source_file_saver_save_finish
+gtk_source_file_saver_save_metadata
+gtk_source_file_saver_save_metadata_async
+gtk_source_file_saver_save_metadata_finish
 <SUBSECTION Standard>
 GTK_SOURCE_FILE_SAVER
 GTK_SOURCE_FILE_SAVER_CLASS
diff --git a/gtksourceview/gtksourcefilesaver.c b/gtksourceview/gtksourcefilesaver.c
index cfeff1d..247129e 100644
--- a/gtksourceview/gtksourcefilesaver.c
+++ b/gtksourceview/gtksourcefilesaver.c
@@ -1487,3 +1487,139 @@ gtk_source_file_saver_save_finish (GtkSourceFileSaver  *saver,
 
        return ok;
 }
+
+/**
+ * gtk_source_file_saver_save_metadata:
+ * @saver: a #GtkSourceFileSaver.
+ * @cancellable: (nullable): optional #GCancellable object, %NULL to ignore.
+ * @error: location to a %NULL #GError, or %NULL.
+ *
+ * Saves synchronously the metadata.
+ *
+ * Returns: whether the metadata was saved successfully.
+ * Since: 3.22
+ */
+gboolean
+gtk_source_file_saver_save_metadata (GtkSourceFileSaver  *saver,
+                                    GCancellable        *cancellable,
+                                    GError             **error)
+{
+       GFileInfo *metadata;
+
+       g_return_val_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver), FALSE);
+       g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
+       g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+       if (saver->priv->file == NULL ||
+           saver->priv->location == NULL)
+       {
+               return FALSE;
+       }
+
+       metadata = _gtk_source_file_get_metadata_info (saver->priv->file);
+
+       return g_file_set_attributes_from_info (saver->priv->location,
+                                               metadata,
+                                               G_FILE_QUERY_INFO_NONE,
+                                               cancellable,
+                                               error);
+}
+
+static void
+save_metadata_async_cb (GFile        *location,
+                       GAsyncResult *result,
+                       GTask        *task)
+{
+       GError *error = NULL;
+
+       DEBUG ({
+              g_print ("%s\n", G_STRFUNC);
+       });
+
+       g_file_set_attributes_finish (location, result, NULL, &error);
+
+       if (error != NULL)
+       {
+               DEBUG ({
+                      g_print ("Save metadata error: %s\n", error->message);
+               });
+
+               g_task_return_error (task, error);
+               g_object_unref (task);
+               return;
+       }
+
+       g_task_return_boolean (task, TRUE);
+       g_object_unref (task);
+}
+
+/**
+ * gtk_source_file_saver_save_metadata_async:
+ * @saver: a #GtkSourceFileSaver.
+ * @io_priority: the I/O priority of the request. E.g. %G_PRIORITY_LOW,
+ *   %G_PRIORITY_DEFAULT or %G_PRIORITY_HIGH.
+ * @cancellable: (nullable): optional #GCancellable object, %NULL to ignore.
+ * @callback: (scope async): a #GAsyncReadyCallback to call when the request is
+ *   satisfied.
+ * @user_data: user data to pass to @callback.
+ *
+ * Saves asynchronously the metadata. See the #GAsyncResult documentation to
+ * know how to use this function.
+ *
+ * Since: 3.22
+ */
+void
+gtk_source_file_saver_save_metadata_async (GtkSourceFileSaver  *saver,
+                                          gint                 io_priority,
+                                          GCancellable        *cancellable,
+                                          GAsyncReadyCallback  callback,
+                                          gpointer             user_data)
+{
+       GTask *task;
+       GFileInfo *metadata;
+
+       g_return_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver));
+       g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+
+       if (saver->priv->file == NULL ||
+           saver->priv->location == NULL)
+       {
+               return;
+       }
+
+       task = g_task_new (saver, cancellable, callback, user_data);
+
+       metadata = _gtk_source_file_get_metadata_info (saver->priv->file);
+
+       g_file_set_attributes_async (saver->priv->location,
+                                    metadata,
+                                    G_FILE_QUERY_INFO_NONE,
+                                    io_priority,
+                                    cancellable,
+                                    (GAsyncReadyCallback) save_metadata_async_cb,
+                                    task);
+}
+
+/**
+ * gtk_source_file_saver_save_metadata_finish:
+ * @saver: a #GtkSourceFileSaver.
+ * @result: a #GAsyncResult.
+ * @error: location to a %NULL #GError, or %NULL.
+ *
+ * Finishes the metadata saving started with
+ * gtk_source_file_saver_save_metadata_async().
+ *
+ * Returns: whether the metadata was saved successfully.
+ * Since: 3.22
+ */
+gboolean
+gtk_source_file_saver_save_metadata_finish (GtkSourceFileSaver  *saver,
+                                           GAsyncResult        *result,
+                                           GError             **error)
+{
+       g_return_val_if_fail (GTK_SOURCE_IS_FILE_SAVER (saver), FALSE);
+       g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+       g_return_val_if_fail (g_task_is_valid (result, saver), FALSE);
+
+       return g_task_propagate_boolean (G_TASK (result), error);
+}
diff --git a/gtksourceview/gtksourcefilesaver.h b/gtksourceview/gtksourcefilesaver.h
index 3a42453..be88687 100644
--- a/gtksourceview/gtksourcefilesaver.h
+++ b/gtksourceview/gtksourcefilesaver.h
@@ -161,6 +161,25 @@ gboolean            gtk_source_file_saver_save_finish      (GtkSourceFileSaver       
*saver,
                                                                 GAsyncResult             *result,
                                                                 GError                  **error);
 
+GTK_SOURCE_AVAILABLE_IN_3_22
+gboolean                gtk_source_file_saver_save_metadata    (GtkSourceFileSaver       *saver,
+                                                                GCancellable             *cancellable,
+                                                                GError                  **error);
+
+GTK_SOURCE_AVAILABLE_IN_3_22
+void                    gtk_source_file_saver_save_metadata_async
+                                                               (GtkSourceFileSaver       *saver,
+                                                                gint                      io_priority,
+                                                                GCancellable             *cancellable,
+                                                                GAsyncReadyCallback       callback,
+                                                                gpointer                  user_data);
+
+GTK_SOURCE_AVAILABLE_IN_3_22
+gboolean                gtk_source_file_saver_save_metadata_finish
+                                                               (GtkSourceFileSaver       *saver,
+                                                                GAsyncResult             *result,
+                                                                GError                  **error);
+
 G_END_DECLS
 
 #endif  /* GTK_SOURCE_FILE_SAVER_H  */


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