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; }