[tracker/tracker-0.6] Fixes NB#124822 Tracker not finding large video file



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]