diff --git a/tumblerd/tumbler-registry.c b/tumblerd/tumbler-registry.c index 77bc74f..14d4e01 100644 --- a/tumblerd/tumbler-registry.c +++ b/tumblerd/tumbler-registry.c @@ -25,6 +25,8 @@ #include #include +#include + #include #include @@ -461,11 +463,37 @@ tumbler_registry_get_thumbnailer_array (TumblerRegistry *registry, /* iterate over all URIs */ for (n = 0; n < length; ++n) { + gchar *filename; + struct stat sb; + g_assert (TUMBLER_IS_FILE_INFO (infos[n])); /* reset */ file_size = 0; + filename = g_filename_from_uri (tumbler_file_info_get_uri (infos[n]), NULL, NULL); + + if (G_LIKELY(filename)) + { + stat (filename, &sb); + + g_free (filename); + + if (!S_ISREG (sb.st_mode)) + continue; + + if (((512. * sb.st_blocks) / sb.st_size) < 0.8) + { + g_debug ("'%s' is probably a sparse file, skipping it\n", tumbler_file_info_get_uri (infos[n])); + continue; + } + } + else + { + g_warning ("Failed to get filename from uri for '%s', skipping it\n", tumbler_file_info_get_uri (infos[n])); + continue; + } + /* determine the URI scheme and generate a hash key */ gfile = g_file_new_for_uri (tumbler_file_info_get_uri (infos[n])); scheme = g_file_get_uri_scheme (gfile);