[gthumb] add to catalog: create the catalog if the file does not exist
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] add to catalog: create the catalog if the file does not exist
- Date: Wed, 18 Dec 2019 08:58:21 +0000 (UTC)
commit e75201a6734bf36fb7e6f25cbe4ec845c8e94172
Author: Paolo Bacchilega <paobac src gnome org>
Date: Tue Dec 17 17:42:00 2019 +0100
add to catalog: create the catalog if the file does not exist
If the catalog file does not exist, use the file extension to
choose whether to create a GthCatalog or a GthSearch.
extensions/catalogs/callbacks.c | 12 ++++++++++++
extensions/catalogs/callbacks.h | 1 +
extensions/catalogs/dlg-add-to-catalog.c | 11 ++++-------
extensions/catalogs/dlg-catalog-properties.c | 7 +++++--
extensions/catalogs/gth-catalog.c | 26 ++++++++++++++++++++++----
extensions/catalogs/gth-catalog.h | 1 +
extensions/catalogs/gth-file-source-catalogs.c | 4 ++--
extensions/catalogs/main.c | 10 ++++++++++
extensions/search/callbacks.c | 10 ++++++++++
extensions/search/callbacks.h | 1 +
extensions/search/main.c | 1 +
11 files changed, 69 insertions(+), 15 deletions(-)
---
diff --git a/extensions/catalogs/callbacks.c b/extensions/catalogs/callbacks.c
index 4991a944..b543c4a9 100644
--- a/extensions/catalogs/callbacks.c
+++ b/extensions/catalogs/callbacks.c
@@ -248,6 +248,16 @@ catalogs__gth_catalog_load_from_data_cb (const void *buffer)
}
+GthCatalog *
+catalogs__gth_catalog_new_for_uri_cb (const char *uri)
+{
+ if (g_str_has_suffix (uri, ".catalog") || g_str_has_suffix (uri, ".gqv"))
+ return gth_catalog_new ();
+ else
+ return NULL;
+}
+
+
void
catalogs__gth_browser_folder_tree_popup_before_cb (GthBrowser *browser,
GthFileSource *file_source,
@@ -462,6 +472,8 @@ process_rename_data_list (gpointer user_data)
GError *error = NULL;
catalog = gth_catalog_load_from_file (rename_data->location);
+ if (catalog == NULL)
+ continue;
for (scan_files = rename_data->files, scan_new_files = rename_data->new_files;
scan_files && scan_new_files;
diff --git a/extensions/catalogs/callbacks.h b/extensions/catalogs/callbacks.h
index 3f1f7eb9..126b7f23 100644
--- a/extensions/catalogs/callbacks.h
+++ b/extensions/catalogs/callbacks.h
@@ -34,6 +34,7 @@ void catalogs__gth_browser_folder_tree_popup_before_cb (GthBrowser *browse
GthFileData *folder);
GFile * catalogs__command_line_files_cb (GList *files);
GthCatalog * catalogs__gth_catalog_load_from_data_cb (const void *buffer);
+GthCatalog * catalogs__gth_catalog_new_for_uri_cb (const char *uri);
void catalogs__gth_browser_load_location_after_cb (GthBrowser *browser,
GthFileData *location);
void catalogs__gth_browser_update_extra_widget_cb (GthBrowser *browser);
diff --git a/extensions/catalogs/dlg-add-to-catalog.c b/extensions/catalogs/dlg-add-to-catalog.c
index 742a221a..76fd4a0a 100644
--- a/extensions/catalogs/dlg-add-to-catalog.c
+++ b/extensions/catalogs/dlg-add-to-catalog.c
@@ -184,14 +184,11 @@ catalog_ready_cb (GObject *catalog,
gsize length;
GFile *gio_file;
- if (error != NULL) {
- _gtk_error_dialog_from_gerror_show (GTK_WINDOW (add_data->parent_window), _("Could not add
the files to the catalog"), error);
- add_data_unref (add_data);
- return;
- }
-
_g_object_unref (add_data->catalog);
- add_data->catalog = (GthCatalog *) catalog;
+ if (catalog != NULL)
+ add_data->catalog = (GthCatalog *) catalog;
+ else
+ add_data->catalog = gth_catalog_new_for_file (add_data->catalog_file);
for (scan = add_data->files; scan; scan = scan->next)
gth_catalog_insert_file (add_data->catalog, (GFile *) scan->data, -1);
diff --git a/extensions/catalogs/dlg-catalog-properties.c b/extensions/catalogs/dlg-catalog-properties.c
index 28ba05a1..b2f20f68 100644
--- a/extensions/catalogs/dlg-catalog-properties.c
+++ b/extensions/catalogs/dlg-catalog-properties.c
@@ -150,7 +150,7 @@ catalog_ready_cb (GObject *object,
{
DialogData *data = user_data;
- if (error != NULL) {
+ if ((error != NULL) || (object == NULL)) {
_gtk_error_dialog_from_gerror_show (GTK_WINDOW(data->browser), _("Could not load the
catalog"), error);
gtk_widget_destroy (data->dialog);
return;
@@ -238,5 +238,8 @@ dlg_catalog_properties (GthBrowser *browser,
/* run dialog. */
gtk_widget_grab_focus (GET_WIDGET ("name_entry"));
- gth_catalog_load_from_file_async (file_data->file, NULL, catalog_ready_cb, data);
+ gth_catalog_load_from_file_async (file_data->file,
+ NULL,
+ catalog_ready_cb,
+ data);
}
diff --git a/extensions/catalogs/gth-catalog.c b/extensions/catalogs/gth-catalog.c
index d4befe1b..9d9d940a 100644
--- a/extensions/catalogs/gth-catalog.c
+++ b/extensions/catalogs/gth-catalog.c
@@ -262,6 +262,24 @@ gth_catalog_new (void)
}
+GthCatalog *
+gth_catalog_new_for_file (GFile *file)
+{
+ char *uri;
+ GthCatalog *catalog;
+
+ if (file == NULL)
+ return NULL;
+
+ uri = g_file_get_uri (file);
+ catalog = gth_hook_invoke_get ("gth-catalog-new-for-uri", uri);
+
+ g_free (uri);
+
+ return catalog;
+}
+
+
GthCatalog *
gth_catalog_new_from_data (const void *buffer,
gsize count,
@@ -271,10 +289,10 @@ gth_catalog_new_from_data (const void *buffer,
GthCatalog *catalog = NULL;
text_buffer = (char *) buffer;
- if ((text_buffer == NULL)
- || (*text_buffer == 0)
- || (strncmp (text_buffer, "<?xml ", 6) == 0))
- {
+ if ((text_buffer == NULL) || (*text_buffer == 0))
+ return NULL;
+
+ if (strncmp (text_buffer, "<?xml ", 6) == 0) {
catalog = gth_hook_invoke_get ("gth-catalog-load-from-data", (gpointer) buffer);
if (catalog != NULL)
read_catalog_data_from_xml (catalog, text_buffer, count, error);
diff --git a/extensions/catalogs/gth-catalog.h b/extensions/catalogs/gth-catalog.h
index 4a2b556d..058fa9b6 100644
--- a/extensions/catalogs/gth-catalog.h
+++ b/extensions/catalogs/gth-catalog.h
@@ -73,6 +73,7 @@ typedef void (*CatalogReadyCallback) (GthCatalog *catalog,
GType gth_catalog_get_type (void) G_GNUC_CONST;
GthCatalog * gth_catalog_new (void);
+GthCatalog * gth_catalog_new_for_file (GFile *file);
GthCatalog * gth_catalog_new_from_data (const void *buffer,
gsize count,
GError **error);
diff --git a/extensions/catalogs/gth-file-source-catalogs.c b/extensions/catalogs/gth-file-source-catalogs.c
index 170cae6d..9107eebd 100644
--- a/extensions/catalogs/gth-file-source-catalogs.c
+++ b/extensions/catalogs/gth-file-source-catalogs.c
@@ -820,7 +820,7 @@ catalog_ready_cb (GObject *catalog,
gsize size;
GFile *gio_file;
- if (error != NULL) {
+ if ((error != NULL) || (catalog == NULL)) {
cod->ready_callback (G_OBJECT (cod->file_source), error, cod->user_data);
copy_op_data_free (cod);
return;
@@ -1235,7 +1235,7 @@ reorder_catalog_ready_cb (GObject *object,
gsize size;
GFile *gio_file;
- if (error != NULL) {
+ if ((error != NULL) || (object == NULL)) {
reorder_data->callback (G_OBJECT (reorder_data->file_source), error, reorder_data->data);
reorder_data_free (reorder_data);
return;
diff --git a/extensions/catalogs/main.c b/extensions/catalogs/main.c
index 1174121c..49a86d22 100644
--- a/extensions/catalogs/main.c
+++ b/extensions/catalogs/main.c
@@ -39,6 +39,15 @@ gthumb_extension_activate (void)
**/
gth_hook_register ("gth-catalog-load-from-data", 1);
+ /**
+ * Called to create the right catalog class for the given uri.
+ *
+ * @uri (const char *): the file uri.
+ * @return (GthCatalog *): return a pointer to the object that can
+ * handle the catalog uri, or NULL if the data type doesn't match.
+ **/
+ gth_hook_register ("gth-catalog-new-for-uri", 1);
+
/**
* Called to update the catalog data from a given file data.
*
@@ -109,6 +118,7 @@ gthumb_extension_activate (void)
gth_hook_add_callback ("command-line-files", 10, G_CALLBACK (catalogs__command_line_files_cb), NULL);
gth_hook_add_callback ("gth-catalog-load-from-data", 10, G_CALLBACK
(catalogs__gth_catalog_load_from_data_cb), NULL);
+ gth_hook_add_callback ("gth-catalog-new-for-uri", 10, G_CALLBACK
(catalogs__gth_catalog_new_for_uri_cb), NULL);
gth_main_register_file_source (GTH_TYPE_FILE_SOURCE_CATALOGS);
gth_hook_add_callback ("initialize", 10, G_CALLBACK (catalogs__initialize_cb), NULL);
diff --git a/extensions/search/callbacks.c b/extensions/search/callbacks.c
index 6dc1c78a..612d0115 100644
--- a/extensions/search/callbacks.c
+++ b/extensions/search/callbacks.c
@@ -135,6 +135,16 @@ search__gth_catalog_load_from_data_cb (const void *buffer)
}
+GthCatalog *
+search__gth_catalog_new_for_uri_cb (const char *uri)
+{
+ if (g_str_has_suffix (uri, ".search"))
+ return (GthCatalog *) gth_search_new ();
+ else
+ return NULL;
+}
+
+
void
search__dlg_catalog_properties (GtkBuilder *builder,
GthFileData *file_data,
diff --git a/extensions/search/callbacks.h b/extensions/search/callbacks.h
index c0f4947a..1ee9103b 100644
--- a/extensions/search/callbacks.h
+++ b/extensions/search/callbacks.h
@@ -30,6 +30,7 @@ void search__gth_browser_construct_cb (GthBrowser *br
void search__gth_browser_update_sensitivity_cb (GthBrowser *browser);
void search__gth_browser_update_extra_widget_cb (GthBrowser *browser);
GthCatalog * search__gth_catalog_load_from_data_cb (const void *buffer);
+GthCatalog * search__gth_catalog_new_for_uri_cb (const char *uri);
void search__dlg_catalog_properties (GtkBuilder *builder,
GthFileData *file_data,
GthCatalog *catalog);
diff --git a/extensions/search/main.c b/extensions/search/main.c
index 7308713f..1d11a498 100644
--- a/extensions/search/main.c
+++ b/extensions/search/main.c
@@ -30,6 +30,7 @@ G_MODULE_EXPORT void
gthumb_extension_activate (void)
{
gth_hook_add_callback ("gth-catalog-load-from-data", 10, G_CALLBACK
(search__gth_catalog_load_from_data_cb), NULL);
+ gth_hook_add_callback ("gth-catalog-new-for-uri", 10, G_CALLBACK
(search__gth_catalog_new_for_uri_cb), NULL);
gth_hook_add_callback ("gth-browser-construct", 10, G_CALLBACK (search__gth_browser_construct_cb),
NULL);
gth_hook_add_callback ("gth-browser-update-extra-widget", 20, G_CALLBACK
(search__gth_browser_update_extra_widget_cb), NULL);
gth_hook_add_callback ("dlg-catalog-properties", 10, G_CALLBACK (search__dlg_catalog_properties),
NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]