[tracker-miners/wip/carlosg/time_t: 9/10] tracker-miner-fs: Use g_file_info_get_modification_date_time()




commit e04b360ed676d25434601952bee3e3bdfdd551fa
Author: Carlos Garnacho <carlosg gnome org>
Date:   Mon Dec 28 14:21:03 2020 +0100

    tracker-miner-fs: Use g_file_info_get_modification_date_time()
    
    The interpretation of the uint64 G_FILE_ATTRIBUTE_TIME_MODIFIED value
    with mtime < 0 is fairly undefined. We interpret it literally as an
    uint64_t, but (signed) time_t is practically simply casted to it
    internally in gio. This makes negative dates seem far far in the
    future.
    
    Use the GDateTime helper instead, this will a) leave the mtime
    interpretation (bugs included) up to GLib. And b) will implicitly
    make mtimes within the expected range, given Tracker and GDateTime
    limits match.
    
    Fixes: https://gitlab.gnome.org/GNOME/tracker-miners/-/issues/155

 src/miners/fs/tracker-miner-files.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)
---
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index 8b55c0251..794b85a3d 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -2068,6 +2068,7 @@ miner_files_process_file (TrackerMinerFS      *fs,
        GFile *parent;
        gchar *uri, *time_str;
        gboolean is_directory;
+       GDateTime *modified;
 
        priv = TRACKER_MINER_FILES (fs)->private;
 
@@ -2077,6 +2078,7 @@ miner_files_process_file (TrackerMinerFS      *fs,
 
        is_directory = (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY ?
                        TRUE : FALSE);
+       modified = g_file_info_get_modification_date_time (file_info);
 
        if (!create && !is_directory) {
                /* In case of update: delete all information elements for the given data object
@@ -2119,8 +2121,7 @@ miner_files_process_file (TrackerMinerFS      *fs,
        tracker_resource_set_int64 (resource, "nfo:fileSize",
                                    g_file_info_get_size (file_info));
 
-       time_ = g_file_info_get_attribute_uint64 (file_info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
-       time_str = tracker_date_to_string (time_);
+       time_str = g_date_time_format_iso8601 (modified);
        tracker_resource_set_string (resource, "nfo:fileLastModified", time_str);
        g_free (time_str);
 
@@ -2151,8 +2152,7 @@ miner_files_process_file (TrackerMinerFS      *fs,
                graph_file = tracker_resource_new (uri);
                tracker_resource_add_uri (graph_file, "rdf:type", "nfo:FileDataObject");
 
-               time_ = g_file_info_get_attribute_uint64 (file_info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
-               time_str = tracker_date_to_string (time_);
+               time_str = g_date_time_format_iso8601 (modified);
                tracker_resource_set_string (graph_file, "nfo:fileLastModified", time_str);
                g_free (time_str);
        }
@@ -2167,6 +2167,7 @@ miner_files_process_file (TrackerMinerFS      *fs,
        if (folder_resource)
                tracker_sparql_buffer_push (buffer, file, DEFAULT_GRAPH, folder_resource);
 
+       g_date_time_unref (modified);
        g_object_unref (resource);
        g_clear_object (&folder_resource);
        g_clear_object (&graph_file);
@@ -2182,6 +2183,7 @@ miner_files_process_file_attributes (TrackerMinerFS      *fs,
        TrackerResource *resource;
        guint64 time_;
        gchar *uri, *time_str;
+       GDateTime *modified;
 
        uri = g_file_get_uri (file);
        resource = tracker_resource_new (uri);
@@ -2195,9 +2197,10 @@ miner_files_process_file_attributes (TrackerMinerFS      *fs,
        }
 
        /* Update nfo:fileLastModified */
-       time_ = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
-       time_str = tracker_date_to_string (time_);
+       modified = g_file_info_get_modification_date_time (info);
+       time_str = g_date_time_format_iso8601 (modified);
        tracker_resource_set_string (resource, "nfo:fileLastModified", time_str);
+       g_date_time_unref (modified);
        g_free (time_str);
 
        /* Update nfo:fileLastAccessed */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]