[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[Tracker] Performance improvement for the extractors
- From: Philip Van Hoof <spam pvanhoof be>
- To: Tracker-List <tracker-list gnome org>
- Subject: [Tracker] Performance improvement for the extractors
- Date: Thu, 09 Apr 2009 15:27:09 +0200
This should improve performance for many file types
--
Philip Van Hoof, freelance software developer
home: me at pvanhoof dot be
gnome: pvanhoof at gnome dot org
http://pvanhoof.be/blog
http://codeminded.be
diff --git a/src/libtracker-common/tracker-file-utils.c b/src/libtracker-common/tracker-file-utils.c
index f47b487..a08775e 100644
--- a/src/libtracker-common/tracker-file-utils.c
+++ b/src/libtracker-common/tracker-file-utils.c
@@ -114,36 +114,44 @@ tracker_file_unlink (const gchar *uri)
goffset
tracker_file_get_size (const gchar *uri)
{
- GFileInfo *info;
- GFile *file;
- GError *error = NULL;
goffset size;
- g_return_val_if_fail (uri != NULL, 0);
-
- /* NOTE: We will need to fix this in Jurg's branch and call
- * the _for_uri() variant.
- */
- file = g_file_new_for_path (uri);
- info = g_file_query_info (file,
- G_FILE_ATTRIBUTE_STANDARD_SIZE,
- G_FILE_QUERY_INFO_NONE,
- NULL,
- &error);
-
- if (G_UNLIKELY (error)) {
- g_message ("Could not get size for '%s', %s",
- uri,
- error->message);
- g_error_free (error);
- size = 0;
+ if (g_str_has_prefix (uri, "file")) {
+ gchar *path = g_filename_from_uri (uri, NULL, NULL);
+ struct stat fstatbuf;
+ stat (path, &fstatbuf);
+ size = fstatbuf.st_size;
+ g_free (path);
} else {
- size = g_file_info_get_size (info);
- g_object_unref (info);
- }
+ GFileInfo *info;
+ GFile *file;
+ GError *error = NULL;
- g_object_unref (file);
+ g_return_val_if_fail (uri != NULL, 0);
+ /* NOTE: We will need to fix this in Jurg's branch and call
+ * the _for_uri() variant.
+ */
+ file = g_file_new_for_path (uri);
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_STANDARD_SIZE,
+ G_FILE_QUERY_INFO_NONE,
+ NULL,
+ &error);
+
+ if (G_UNLIKELY (error)) {
+ g_message ("Could not get size for '%s', %s",
+ uri,
+ error->message);
+ g_error_free (error);
+ size = 0;
+ } else {
+ size = g_file_info_get_size (info);
+ g_object_unref (info);
+ }
+
+ g_object_unref (file);
+ }
return size;
}
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]