[tracker/tracker-0.6] Fixes NB#124822 Tracker not finding large video file
- From: Ivan Frade <ifrade src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker/tracker-0.6] Fixes NB#124822 Tracker not finding large video file
- Date: Fri, 26 Jun 2009 13:24:12 +0000 (UTC)
commit 2fedeb6df86072748b4a5a79e53a3af5d96d7571
Author: Ivan Frade <ivan frade nokia com>
Date: Fri Jun 26 16:22:12 2009 +0300
Fixes NB#124822 Tracker not finding large video file
Tracker was using stat to get the basic data from the file. This function
only support files until 2Gb. Replaced that code to use GIO (which uses
64 bits to save the file size).
src/libtracker-common/tracker-type-utils.c | 12 +++++
src/libtracker-common/tracker-type-utils.h | 3 +
.../tracker-module-metadata-utils.c | 45 ++++++++++++++------
src/tracker-indexer/tracker-module-metadata.c | 28 ++++++++++++
src/tracker-indexer/tracker-module-metadata.h | 6 +++
5 files changed, 81 insertions(+), 13 deletions(-)
---
diff --git a/src/libtracker-common/tracker-type-utils.c b/src/libtracker-common/tracker-type-utils.c
index 7656959..c3e4206 100644
--- a/src/libtracker-common/tracker-type-utils.c
+++ b/src/libtracker-common/tracker-type-utils.c
@@ -665,6 +665,18 @@ tracker_guint32_to_string (guint32 i)
return g_strdup_printf ("%" G_GUINT32_FORMAT, i);
}
+gchar *
+tracker_gint64_to_string (gint64 i)
+{
+ return g_strdup_printf ("%" G_GINT64_FORMAT, i);
+}
+
+gchar *
+tracker_guint64_to_string (guint64 i)
+{
+ return g_strdup_printf ("%" G_GUINT64_FORMAT, i);
+}
+
gboolean
tracker_string_to_uint (const gchar *s,
guint *value)
diff --git a/src/libtracker-common/tracker-type-utils.h b/src/libtracker-common/tracker-type-utils.h
index 92b5f5b..bc16606 100644
--- a/src/libtracker-common/tracker-type-utils.h
+++ b/src/libtracker-common/tracker-type-utils.h
@@ -41,6 +41,9 @@ gchar * tracker_gint_to_string (gint i);
gchar * tracker_guint_to_string (guint i);
gchar * tracker_gint32_to_string (gint32 i);
gchar * tracker_guint32_to_string (guint32 i);
+gchar * tracker_gint64_to_string (gint64 i);
+gchar * tracker_guint64_to_string (guint64 i);
+
gboolean tracker_string_to_uint (const gchar *s,
guint *ret);
gint tracker_string_in_string_list (const gchar *str,
diff --git a/src/tracker-indexer/tracker-module-metadata-utils.c b/src/tracker-indexer/tracker-module-metadata-utils.c
index a6178dc..a6d52ca 100644
--- a/src/tracker-indexer/tracker-module-metadata-utils.c
+++ b/src/tracker-indexer/tracker-module-metadata-utils.c
@@ -23,6 +23,7 @@
#include <string.h>
#include <stdlib.h>
+#include <sys/stat.h>
#include <sys/types.h>
#include <signal.h>
#include <errno.h>
@@ -847,21 +848,33 @@ TrackerModuleMetadata *
tracker_module_metadata_utils_get_data (GFile *file)
{
TrackerModuleMetadata *metadata;
- struct stat st;
- gchar *path, *mime_type;
- gchar *dirname, *basename, *path_delimited;
-
- path = g_file_get_path (file);
-
- if (g_lstat (path, &st) < 0) {
- g_free (path);
+ GFileInfo *info;
+ gchar *path, *mime_type;
+ gchar *dirname, *basename, *path_delimited;
+ guint64 modified, accessed;
+ GError *error = NULL;
+
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE ","
+ G_FILE_ATTRIBUTE_STANDARD_SIZE ","
+ G_FILE_ATTRIBUTE_TIME_ACCESS ","
+ G_FILE_ATTRIBUTE_TIME_MODIFIED,
+ G_FILE_QUERY_INFO_NONE, NULL, &error);
+
+ if (error) {
+ g_warning ("Unable to retrieve info from file (%s)", error->message);
return NULL;
}
metadata = tracker_module_metadata_new ();
+
+ mime_type = g_file_info_get_content_type (info);
+ if (!mime_type) {
+ /* Tracker convention... duplicated with tracker-file-utils.c */
+ mime_type = g_strdup ("unknown");
+ }
- mime_type = tracker_file_get_mime_type (path);
-
+ path = g_file_get_path (file);
dirname = g_path_get_dirname (path);
basename = g_filename_display_basename (path);
path_delimited = g_filename_to_utf8 (path, -1, NULL, NULL, NULL);
@@ -874,9 +887,15 @@ tracker_module_metadata_utils_get_data (GFile *file)
g_free (basename);
g_free (dirname);
- tracker_module_metadata_add_uint (metadata, METADATA_FILE_SIZE, st.st_size);
- tracker_module_metadata_add_date (metadata, METADATA_FILE_MODIFIED, st.st_mtime);
- tracker_module_metadata_add_date (metadata, METADATA_FILE_ACCESSED, st.st_atime);
+ tracker_module_metadata_add_int64 (metadata,
+ METADATA_FILE_SIZE,
+ g_file_info_get_size (info));
+
+ modified = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
+ tracker_module_metadata_add_uint64 (metadata, METADATA_FILE_MODIFIED, modified);
+
+ accessed = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS);
+ tracker_module_metadata_add_uint64 (metadata, METADATA_FILE_ACCESSED, accessed);
tracker_module_metadata_add_date (metadata, METADATA_FILE_ADDED, time (NULL));
diff --git a/src/tracker-indexer/tracker-module-metadata.c b/src/tracker-indexer/tracker-module-metadata.c
index 2e228d2..b1d82ab 100644
--- a/src/tracker-indexer/tracker-module-metadata.c
+++ b/src/tracker-indexer/tracker-module-metadata.c
@@ -205,6 +205,34 @@ tracker_module_metadata_add_uint (TrackerModuleMetadata *metadata,
}
}
+void
+tracker_module_metadata_add_int64 (TrackerModuleMetadata *metadata,
+ const gchar *field_name,
+ gint64 value)
+{
+ gchar *str;
+
+ str = tracker_gint64_to_string (value);
+
+ if (!tracker_module_metadata_add_take_string (metadata, field_name, str)) {
+ g_free (str);
+ }
+}
+
+void
+tracker_module_metadata_add_uint64 (TrackerModuleMetadata *metadata,
+ const gchar *field_name,
+ guint64 value)
+{
+ gchar *str;
+
+ str = tracker_guint64_to_string (value);
+
+ if (!tracker_module_metadata_add_take_string (metadata, field_name, str)) {
+ g_free (str);
+ }
+}
+
/**
* tracker_module_metadata_add_double:
* @metadata: A #TrackerModuleMetadata
diff --git a/src/tracker-indexer/tracker-module-metadata.h b/src/tracker-indexer/tracker-module-metadata.h
index 831ddef..2b483c1 100644
--- a/src/tracker-indexer/tracker-module-metadata.h
+++ b/src/tracker-indexer/tracker-module-metadata.h
@@ -62,6 +62,12 @@ void tracker_module_metadata_add_int (TrackerModuleMe
void tracker_module_metadata_add_uint (TrackerModuleMetadata *metadata,
const gchar *field_name,
guint value);
+void tracker_module_metadata_add_int64 (TrackerModuleMetadata *metadata,
+ const gchar *field_name,
+ gint64 value);
+void tracker_module_metadata_add_uint64 (TrackerModuleMetadata *metadata,
+ const gchar *field_name,
+ guint64 value);
void tracker_module_metadata_add_double (TrackerModuleMetadata *metadata,
const gchar *field_name,
gdouble value);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]