[tepl] App: add handle_metadata()



commit 89de58de2f57ecf5c2a1f8c2aa4a2c25865b668b
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Sun Apr 19 15:40:57 2020 +0200

    App: add handle_metadata()

 docs/reference/tepl-sections.txt |  1 +
 tepl/tepl-application.c          | 90 ++++++++++++++++++++++++++++++++++++++++
 tepl/tepl-application.h          |  2 +
 3 files changed, 93 insertions(+)
---
diff --git a/docs/reference/tepl-sections.txt b/docs/reference/tepl-sections.txt
index dd62bad..a630317 100644
--- a/docs/reference/tepl-sections.txt
+++ b/docs/reference/tepl-sections.txt
@@ -42,6 +42,7 @@ tepl_application_get_active_main_window
 tepl_application_open_simple
 tepl_application_handle_activate
 tepl_application_handle_open
+tepl_application_handle_metadata
 <SUBSECTION Standard>
 TEPL_APPLICATION
 TEPL_APPLICATION_CLASS
diff --git a/tepl/tepl-application.c b/tepl/tepl-application.c
index b5b0fbc..edbb1ca 100644
--- a/tepl/tepl-application.c
+++ b/tepl/tepl-application.c
@@ -22,6 +22,7 @@
 #include <glib/gi18n-lib.h>
 #include "tepl-abstract-factory.h"
 #include "tepl-application-window.h"
+#include "tepl-metadata-manager.h"
 
 /**
  * SECTION:application
@@ -60,6 +61,7 @@ struct _TeplApplicationPrivate
 
        guint handle_activate : 1;
        guint handle_open : 1;
+       guint handle_metadata : 1;
 };
 
 enum
@@ -601,4 +603,92 @@ tepl_application_handle_open (TeplApplication *tepl_app)
        }
 }
 
+static void
+handle_metadata__startup_cb (GtkApplication  *gtk_app,
+                            TeplApplication *tepl_app)
+{
+       TeplAbstractFactory *factory = tepl_abstract_factory_get_singleton ();
+       TeplMetadataManager *manager = tepl_metadata_manager_get_singleton ();
+       GFile *file;
+       GError *error = NULL;
+
+       file = tepl_abstract_factory_create_metadata_manager_file (factory);
+       if (file == NULL)
+       {
+               return;
+       }
+
+       tepl_metadata_manager_load_from_disk (manager, file, &error);
+       if (error != NULL)
+       {
+               g_warning ("Failed to load metadata: %s", error->message);
+               g_clear_error (&error);
+       }
+
+       g_object_unref (file);
+}
+
+static void
+handle_metadata__shutdown_cb (GtkApplication  *gtk_app,
+                             TeplApplication *tepl_app)
+{
+       TeplAbstractFactory *factory = tepl_abstract_factory_get_singleton ();
+       TeplMetadataManager *manager = tepl_metadata_manager_get_singleton ();
+       GFile *file;
+       GError *error = NULL;
+
+       file = tepl_abstract_factory_create_metadata_manager_file (factory);
+       if (file == NULL)
+       {
+               return;
+       }
+
+       tepl_metadata_manager_save_to_disk (manager, file, TRUE, &error);
+       if (error != NULL)
+       {
+               g_warning ("Failed to save metadata: %s", error->message);
+               g_clear_error (&error);
+       }
+
+       g_object_unref (file);
+}
+
+/**
+ * tepl_application_handle_metadata:
+ * @tepl_app: a #TeplApplication.
+ *
+ * This function:
+ * - Connects to the #GApplication::startup signal to call
+ *   tepl_metadata_manager_load_from_disk().
+ * - Connects to the #GApplication::shutdown signal to call
+ *   tepl_metadata_manager_save_to_disk() with @trim set to %TRUE.
+ *
+ * It gets the #GFile by calling
+ * tepl_abstract_factory_create_metadata_manager_file().
+ *
+ * Since: 5.0
+ */
+void
+tepl_application_handle_metadata (TeplApplication *tepl_app)
+{
+       g_return_if_fail (TEPL_IS_APPLICATION (tepl_app));
+
+       if (!tepl_app->priv->handle_metadata)
+       {
+               g_signal_connect_object (tepl_app->priv->gtk_app,
+                                        "startup",
+                                        G_CALLBACK (handle_metadata__startup_cb),
+                                        tepl_app,
+                                        0);
+
+               g_signal_connect_object (tepl_app->priv->gtk_app,
+                                        "shutdown",
+                                        G_CALLBACK (handle_metadata__shutdown_cb),
+                                        tepl_app,
+                                        0);
+
+               tepl_app->priv->handle_metadata = TRUE;
+       }
+}
+
 /* ex:set ts=8 noet: */
diff --git a/tepl/tepl-application.h b/tepl/tepl-application.h
index c00276f..c8e5d1a 100644
--- a/tepl/tepl-application.h
+++ b/tepl/tepl-application.h
@@ -75,6 +75,8 @@ void                  tepl_application_handle_activate                (TeplApplication 
*tepl_app);
 
 void                   tepl_application_handle_open                    (TeplApplication *tepl_app);
 
+void                   tepl_application_handle_metadata                (TeplApplication *tepl_app);
+
 G_END_DECLS
 
 #endif /* TEPL_APPLICATION_H */


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