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;
 }
 
_______________________________________________
tracker-list mailing list
tracker-list@gnome.org
http://mail.gnome.org/mailman/listinfo/tracker-list

Reply via email to