diff options
author | Gaël Bonithon <gael@xfce.org> | 2021-12-28 19:28:10 +0100 |
---|---|---|
committer | Gaël Bonithon <gael@xfce.org> | 2021-12-29 13:09:43 +0100 |
commit | 270289b3a3f2f9ac7891f26135bae6d5e574c868 (patch) | |
tree | 71122e3d253cbfdaa9279ef7165d1bf796190727 | |
parent | cd30208a015032a17df7e5038be357ef5acc1de2 (diff) | |
download | tumbler-270289b3a3f2f9ac7891f26135bae6d5e574c868.tar.gz |
desktop-thumbnailer: Allow for thumbnailer override
By the usual rule: for a given thumbnailer name, the one placed in the
highest priority directory overrides the others of the same name.
Closes #53.
-rw-r--r-- | plugins/desktop-thumbnailer/desktop-thumbnailer-provider.c | 25 | ||||
-rw-r--r-- | plugins/desktop-thumbnailer/desktop-thumbnailer.c | 2 |
2 files changed, 18 insertions, 9 deletions
diff --git a/plugins/desktop-thumbnailer/desktop-thumbnailer-provider.c b/plugins/desktop-thumbnailer/desktop-thumbnailer-provider.c index a7d7bea..69297a0 100644 --- a/plugins/desktop-thumbnailer/desktop-thumbnailer-provider.c +++ b/plugins/desktop-thumbnailer/desktop-thumbnailer-provider.c @@ -167,11 +167,13 @@ desktop_thumbnailer_get_from_desktop_file (GFile *file, static GList * desktop_thumbnailer_get_thumbnailers_from_dir (GList *thumbnailers, - GFile *directory, - GStrv uri_schemes) + GFile *directory, + GStrv uri_schemes, + GHashTable **single_name) { const gchar *base_name; - GDir *dir; + gchar *name; + GDir *dir; /* try to open the directory for reading */ dir = g_dir_open (g_file_peek_path (directory), 0, NULL); @@ -187,8 +189,9 @@ desktop_thumbnailer_get_thumbnailers_from_dir (GList *thumbnailers, GFile *file; DesktopThumbnailer *thumbnailer = NULL; - /* skip files that don't end with the .thumbnailer extension */ - if (!g_str_has_suffix (base_name, ".thumbnailer")) + /* skip files that don't end with the .thumbnailer extension or already added */ + if (! g_str_has_suffix (base_name, ".thumbnailer") + || g_hash_table_lookup (*single_name, base_name)) continue; file = g_file_get_child (directory, base_name); @@ -203,6 +206,8 @@ desktop_thumbnailer_get_thumbnailers_from_dir (GList *thumbnailers, if (thumbnailer) { thumbnailers = g_list_prepend (thumbnailers, thumbnailer); + name = g_strdup (base_name); + g_hash_table_insert (*single_name, name, name); } } @@ -214,6 +219,7 @@ desktop_thumbnailer_get_thumbnailers_from_dir (GList *thumbnailers, static GList * desktop_thumbnailer_provider_get_thumbnailers (TumblerThumbnailerProvider *provider) { + GHashTable *single_name; GList *directories, *iter, *thumbnailers = NULL; GStrv uri_schemes; @@ -223,15 +229,18 @@ desktop_thumbnailer_provider_get_thumbnailers (TumblerThumbnailerProvider *provi tumbler_util_dump_strv (G_LOG_DOMAIN, "Supported URI schemes", (const gchar *const *) uri_schemes); + /* use a ghash table to avoid duplication and allow for thumbnailer override */ + single_name = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + /* thumbnailers end up in reverse order here, since they are prepended, but the list must * not be reversed: this will happen during sorted insertion in tumbler_registry_add() */ for (iter = directories; iter != NULL; iter = iter->next) - { - thumbnailers = desktop_thumbnailer_get_thumbnailers_from_dir (thumbnailers, iter->data, uri_schemes); - } + thumbnailers = desktop_thumbnailer_get_thumbnailers_from_dir (thumbnailers, iter->data, + uri_schemes, &single_name); g_strfreev (uri_schemes); g_list_free_full (directories, g_object_unref); + g_hash_table_destroy (single_name); return thumbnailers; } diff --git a/plugins/desktop-thumbnailer/desktop-thumbnailer.c b/plugins/desktop-thumbnailer/desktop-thumbnailer.c index 05c4433..4e53459 100644 --- a/plugins/desktop-thumbnailer/desktop-thumbnailer.c +++ b/plugins/desktop-thumbnailer/desktop-thumbnailer.c @@ -368,7 +368,7 @@ desktop_thumbnailer_create (TumblerAbstractThumbnailer *thumbnailer, uri = tumbler_file_info_get_uri (info); file = g_file_new_for_uri (uri); - g_debug ("Handling URI '%s'", uri); + g_debug ("'Exec=%s': Handling URI '%s'", DESKTOP_THUMBNAILER (thumbnailer)->exec, uri); thumbnail = tumbler_file_info_get_thumbnail (info); g_assert (thumbnail != NULL); |