[tracker/wip/carlosg/fixes-for-dataobject-split: 1/8] libtracker-data: Fix retrieval of old datetime values for updates



commit 0ab802d1c947cf564f40046bbfb4a4ce2cd9b3f4
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Apr 23 11:31:58 2020 +0200

    libtracker-data: Fix retrieval of old datetime values for updates
    
    Commit 542e1254e4f changed datetime storage so we don't resort to
    tricks with doubles to store sub-second precision. The code retrieving
    old values for INSERT/UPDATE handling was missed, leading to warnings
    trying to cast the contained string to a double.
    
    Dates are either unix timestamps (ints) or iso8601 dates (strings),
    deal properly with the latter.

 src/libtracker-data/tracker-data-update.c | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index dd7fcceac..74ceb96c2 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -1326,17 +1326,28 @@ get_property_values (TrackerData     *data,
 
                                if (G_VALUE_TYPE (&gvalue)) {
                                        if (tracker_property_get_data_type (property) == 
TRACKER_PROPERTY_TYPE_DATETIME) {
-                                               gdouble time;
-
                                                if (G_VALUE_TYPE (&gvalue) == G_TYPE_INT64) {
+                                                       gdouble time;
+
                                                        time = g_value_get_int64 (&gvalue);
+                                                       g_value_unset (&gvalue);
+                                                       g_value_init (&gvalue, TRACKER_TYPE_DATE_TIME);
+                                                       /* UTC offset is irrelevant for comparison */
+                                                       tracker_date_time_set (&gvalue, time, 0);
                                                } else {
-                                                       time = g_value_get_double (&gvalue);
+                                                       gchar *time;
+
+                                                       time = g_value_dup_string (&gvalue);
+                                                       g_value_unset (&gvalue);
+                                                       g_value_init (&gvalue, TRACKER_TYPE_DATE_TIME);
+                                                       tracker_date_time_set_from_string (&gvalue, time, 
&error);
+                                                       g_free (time);
+
+                                                       if (error) {
+                                                               g_warning ("Error in date conversion: %s", 
error->message);
+                                                               g_error_free (error);
+                                                       }
                                                }
-                                               g_value_unset (&gvalue);
-                                               g_value_init (&gvalue, TRACKER_TYPE_DATE_TIME);
-                                               /* UTC offset is irrelevant for comparison */
-                                               tracker_date_time_set (&gvalue, time, 0);
                                        }
 
                                        g_array_append_val (old_values, gvalue);


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