summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorentin Noël <corentin.noel@collabora.com>2023-03-05 23:27:44 +0100
committerCorentin Noël <tintou@noel.tf>2023-03-20 12:57:21 +0100
commitc285a054e51b8bf90f0716eff6e9b597841f3028 (patch)
tree974ba3efb7bed15fe2f370524b1b669c9324c1e0
parentc2f039c6221cc1080711d892722e7ff7bd41d646 (diff)
downloadevolution-data-server-c285a054e51b8bf90f0716eff6e9b597841f3028.tar.gz
M!117 - Replace GTimeVal by GDateTime or int64
We need to use something else to be Y2038-proof. Closes https://gitlab.gnome.org/GNOME/evolution-data-server/-/merge_requests/117
-rw-r--r--src/addressbook/backends/ldap/e-book-backend-ldap.c195
-rw-r--r--src/calendar/backends/file/e-cal-backend-file.c8
-rw-r--r--src/calendar/libecal/e-reminder-watcher.c58
-rw-r--r--src/libebackend/e-cache-reaper-utils.c23
-rw-r--r--src/libedataserver/e-source-alarms.c7
-rw-r--r--src/libedataserver/e-webdav-session.c27
-rw-r--r--src/libedataserver/e-xml-document.c18
-rw-r--r--src/modules/google-backend/module-google-backend.c7
8 files changed, 177 insertions, 166 deletions
diff --git a/src/addressbook/backends/ldap/e-book-backend-ldap.c b/src/addressbook/backends/ldap/e-book-backend-ldap.c
index 7002e09d6..0d2c94b73 100644
--- a/src/addressbook/backends/ldap/e-book-backend-ldap.c
+++ b/src/addressbook/backends/ldap/e-book-backend-ldap.c
@@ -76,8 +76,6 @@
/* timeout for ldap_result */
#define LDAP_RESULT_TIMEOUT_MILLIS 10
-#define TV_TO_MILLIS(timeval) ((timeval).tv_sec * 1000 + (timeval).tv_usec / 1000)
-
#define LDAP_SEARCH_OP_IDENT "EBookBackendLDAP.BookView::search_op"
/* the objectClasses we need */
@@ -772,15 +770,15 @@ e_book_backend_ldap_connect (EBookBackendLDAP *bl,
{
EBookBackendLDAPPrivate *blpriv = bl->priv;
gint protocol_version = LDAP_VERSION3;
- GTimeVal start, end;
- gulong diff;
+ gint64 start = 0, end;
+ GTimeSpan diff;
#ifdef SUNLDAP
gint ldap_flag;
#endif
if (enable_debug) {
printf ("e_book_backend_ldap_connect ... \n");
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
}
/* close connection first if it's open first */
@@ -936,12 +934,11 @@ e_book_backend_ldap_connect (EBookBackendLDAP *bl,
if (enable_debug) {
printf ("e_book_backend_ldap_connect ... success \n");
- g_get_current_time (&end);
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
+ end = g_get_monotonic_time ();
+ diff = end - start;
printf (
- "e_book_backend_ldap_connect took %ld.%03ld seconds\n",
- diff / 1000,diff % 1000);
+ "e_book_backend_ldap_connect took %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds\n",
+ diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
e_backend_ensure_source_status_connected (E_BACKEND (bl));
return TRUE;
@@ -980,12 +977,12 @@ e_book_backend_ldap_reconnect (EBookBackendLDAP *bl,
EDataBookView *book_view,
gint ldap_status)
{
- GTimeVal start, end;
- gulong diff;
+ gint64 start = 0, end;
+ GTimeSpan diff;
if (enable_debug) {
printf ("e_book_backend_ldap_reconnect ... \n");
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
}
g_rec_mutex_lock (&eds_ldap_handler_lock);
@@ -1026,12 +1023,11 @@ e_book_backend_ldap_reconnect (EBookBackendLDAP *bl,
if (enable_debug) {
printf ("e_book_backend_ldap_reconnect ... returning %d\n", ldap_error);
- g_get_current_time (&end);
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
+ end = g_get_monotonic_time ();
+ diff = end - start;
printf (
- "e_book_backend_ldap_reconnect took %ld.%03ld seconds\n",
- diff / 1000,diff % 1000);
+ "e_book_backend_ldap_reconnect took %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds\n",
+ diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
return (ldap_error == LDAP_SUCCESS);
@@ -2117,12 +2113,12 @@ get_contact_handler (LDAPOp *op,
{
EBookBackendLDAP *bl = E_BOOK_BACKEND_LDAP (op->backend);
gint msg_type;
- GTimeVal start, end;
- gulong diff;
+ gint64 start = 0, end;
+ GTimeSpan diff;
if (enable_debug) {
printf ("get_contact_handler ... \n");
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
}
g_rec_mutex_lock (&eds_ldap_handler_lock);
@@ -2185,12 +2181,11 @@ get_contact_handler (LDAPOp *op,
ldap_op_finished (op);
if (enable_debug) {
- g_get_current_time (&end);
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
+ end = g_get_monotonic_time ();
+ diff = end - start;
printf (
- "get_contact_handler took %ld.%03ld seconds \n",
- diff / 1000, diff % 1000);
+ "get_contact_handler took %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds \n",
+ diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
} else if (msg_type == LDAP_RES_SEARCH_REFERENCE) {
/* ignore references */
@@ -2256,12 +2251,12 @@ contact_list_handler (LDAPOp *op,
EBookBackendLDAP *bl = E_BOOK_BACKEND_LDAP (op->backend);
LDAPMessage *e;
gint msg_type;
- GTimeVal start, end;
- gulong diff;
+ gint64 start = 0, end;
+ GTimeSpan diff;
if (enable_debug) {
printf ("contact_list_handler ...\n");
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
}
g_rec_mutex_lock (&eds_ldap_handler_lock);
@@ -2359,10 +2354,9 @@ contact_list_handler (LDAPOp *op,
ldap_op_finished (op);
if (enable_debug) {
printf ("contact_list_handler success ");
- g_get_current_time (&end);
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
- printf ("and took %ld.%03ld seconds\n", diff / 1000, diff % 1000);
+ end = g_get_monotonic_time ();
+ diff = end - start;
+ printf ("and took %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds\n", diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
}
else {
@@ -2400,12 +2394,12 @@ contact_list_uids_handler (LDAPOp *op,
EBookBackendLDAP *bl = E_BOOK_BACKEND_LDAP (op->backend);
LDAPMessage *e;
gint msg_type;
- GTimeVal start, end;
- gulong diff;
+ gint64 start = 0, end;
+ GTimeSpan diff;
if (enable_debug) {
printf ("contact_list_uids_handler ...\n");
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
}
g_rec_mutex_lock (&eds_ldap_handler_lock);
@@ -2498,10 +2492,9 @@ contact_list_uids_handler (LDAPOp *op,
ldap_op_finished (op);
if (enable_debug) {
printf ("contact_list_uids_handler success ");
- g_get_current_time (&end);
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
- printf ("and took %ld.%03ld seconds\n", diff / 1000, diff % 1000);
+ end = g_get_monotonic_time ();
+ diff = end - start;
+ printf ("and took %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds\n", diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
}
else {
@@ -4656,12 +4649,12 @@ ldap_search_handler (LDAPOp *op,
EBookBackendLDAP *bl = E_BOOK_BACKEND_LDAP (op->backend);
LDAPMessage *e;
gint msg_type;
- GTimeVal start, end;
- gulong diff;
+ gint64 start = 0, end;
+ GTimeSpan diff;
d (printf ("ldap_search_handler (%p)\n", view));
if (enable_debug)
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
g_rec_mutex_lock (&eds_ldap_handler_lock);
if (!bl->priv->ldap) {
@@ -4747,11 +4740,10 @@ ldap_search_handler (LDAPOp *op,
ldap_op_finished (op);
if (enable_debug) {
- g_get_current_time (&end);
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
+ end = g_get_monotonic_time ();
+ diff = end - start;
printf ("ldap_search_handler... completed with error code %d ", ldap_error);
- printf ("and took %ld.%03ld seconds\n", diff / 1000, diff % 1000);
+ printf ("and took %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds\n", diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
}
else {
@@ -4800,12 +4792,12 @@ e_book_backend_ldap_search (EBookBackendLDAP *bl,
gchar *ldap_query;
GList *contacts;
GList *l;
- GTimeVal start, end;
- gulong diff;
+ gint64 start = 0, end;
+ GTimeSpan diff;
if (enable_debug) {
printf ("e_book_backend_ldap_search ... \n");
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
}
sexp = e_data_book_view_get_sexp (view);
@@ -4899,10 +4891,9 @@ e_book_backend_ldap_search (EBookBackendLDAP *bl,
if (enable_debug) {
printf ("e_book_backend_ldap_search invoked ldap_search_handler ");
- g_get_current_time (&end);
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
- printf ("and took %ld.%03ld seconds\n", diff / 1000,diff % 1000);
+ end = g_get_monotonic_time ();
+ diff = end - start;
+ printf ("and took %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds\n", diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
g_mutex_lock (&bl->priv->view_mutex);
@@ -4964,12 +4955,12 @@ generate_cache_handler (LDAPOp *op,
LDAPMessage *e;
gint msg_type;
EDataBookView *book_view;
- GTimeVal start, end;
- gulong diff;
+ gint64 start = 0, end;
+ GTimeSpan diff;
if (enable_debug) {
printf ("generate_cache_handler ... \n");
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
}
g_rec_mutex_lock (&eds_ldap_handler_lock);
@@ -5010,7 +5001,7 @@ generate_cache_handler (LDAPOp *op,
GSList *l;
gint contact_num = 0;
gchar *status_msg;
- GTimeVal now;
+ GDateTime *now;
gchar *update_str;
GList *contacts, *link;
@@ -5039,20 +5030,20 @@ generate_cache_handler (LDAPOp *op,
e_book_backend_notify_update (op->backend, contact);
}
e_book_backend_cache_set_populated (bl->priv->cache);
- g_get_current_time (&now);
- update_str = g_time_val_to_iso8601 (&now);
+ now = g_date_time_new_now_utc ();
+ update_str = g_date_time_format_iso8601 (now);
+ g_date_time_unref (now);
e_book_backend_cache_set_time (bl->priv->cache, update_str);
g_free (update_str);
e_file_cache_thaw_changes (E_FILE_CACHE (bl->priv->cache));
e_book_backend_notify_complete (op->backend);
ldap_op_finished (op);
if (enable_debug) {
- g_get_current_time (&end);
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
+ end = g_get_monotonic_time ();
+ diff = end - start;
printf (
- "generate_cache_handler ... completed in %ld.%03ld seconds\n",
- diff / 1000,diff % 1000);
+ "generate_cache_handler ... completed in %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds\n",
+ diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
}
}
@@ -5081,13 +5072,13 @@ generate_cache (EBookBackendLDAP *book_backend_ldap)
EBookBackendLDAPPrivate *priv;
gint contact_list_msgid;
gint ldap_error;
- GTimeVal start, end;
+ gint64 start = 0, end;
gchar *last_update_str;
- gulong diff;
+ GTimeSpan diff;
if (enable_debug) {
printf ("generating offline cache ... \n");
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
}
priv = book_backend_ldap->priv;
@@ -5111,23 +5102,29 @@ generate_cache (EBookBackendLDAP *book_backend_ldap)
last_update_str = e_book_backend_cache_get_time (priv->cache);
if (last_update_str) {
- GTimeVal now, last_update;
+ GDateTime *last_update;
+
+ last_update = g_date_time_new_from_iso8601 (last_update_str, NULL);
+ g_free (last_update_str);
+ if (last_update) {
+ GDateTime *now;
+ GTimeSpan time_span;
- if (g_time_val_from_iso8601 (last_update_str, &last_update)) {
- g_get_current_time (&now);
+ now = g_date_time_new_now_utc ();
+ time_span = g_date_time_difference (now, last_update);
+ g_date_time_unref (now);
+ g_date_time_unref (last_update);
/* update up to once a week */
- if (now.tv_sec <= last_update.tv_sec + 7 * 24 * 60 * 60) {
+ if (time_span <= 7 * G_TIME_SPAN_DAY) {
g_rec_mutex_unlock (&eds_ldap_handler_lock);
g_free (contact_list_op);
- g_free (last_update_str);
if (enable_debug)
printf ("LDAP generating offline cache skipped: it's not 7 days since the last check yet\n");
return;
}
}
- g_free (last_update_str);
}
priv->generate_cache_in_progress = TRUE;
@@ -5159,10 +5156,9 @@ generate_cache (EBookBackendLDAP *book_backend_ldap)
generate_cache_handler, generate_cache_dtor);
if (enable_debug) {
printf ("generating offline cache invoked generate_cache_handler ");
- g_get_current_time (&end);
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
- printf ("and took %ld.%03ld seconds\n", diff / 1000, diff % 1000);
+ end = g_get_monotonic_time ();
+ diff = end - start;
+ printf ("and took %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds\n", diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
} else {
generate_cache_dtor ((LDAPOp *) contact_list_op);
@@ -5912,8 +5908,8 @@ book_backend_ldap_get_contact (EBookBackend *backend,
gint get_contact_msgid;
EDataBookView *book_view;
gint ldap_error;
- GTimeVal start, end;
- gulong diff;
+ gint64 start = 0, end;
+ GTimeSpan diff;
if (!e_backend_get_online (E_BACKEND (backend))) {
if (bl->priv->marked_for_offline && bl->priv->cache) {
@@ -5939,7 +5935,7 @@ book_backend_ldap_get_contact (EBookBackend *backend,
if (enable_debug) {
printf ("e_book_backend_ldap_get_contact ... \n");
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
}
g_rec_mutex_lock (&eds_ldap_handler_lock);
@@ -5979,12 +5975,11 @@ book_backend_ldap_get_contact (EBookBackend *backend,
if (enable_debug) {
printf ("e_book_backend_ldap_get_contact invoked get_contact_handler\n");
- g_get_current_time (&end);
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
+ end = g_get_monotonic_time ();
+ diff = end - start;
printf (
- "and took %ld.%03ld seconds\n",
- diff / 1000, diff % 1000);
+ "and took %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds\n",
+ diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
} else {
e_data_book_respond_get_contact (
@@ -6009,12 +6004,12 @@ book_backend_ldap_get_contact_list (EBookBackend *backend,
EDataBookView *book_view;
gint ldap_error;
gchar *ldap_query;
- GTimeVal start, end;
- gulong diff;
+ gint64 start = 0, end;
+ GTimeSpan diff;
if (enable_debug) {
printf ("e_book_backend_ldap_get_contact_list ... \n");
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
}
if (!e_backend_get_online (E_BACKEND (backend))) {
@@ -6084,13 +6079,11 @@ book_backend_ldap_get_contact_list (EBookBackend *backend,
book_view, opid, contact_list_msgid,
contact_list_handler, contact_list_dtor);
if (enable_debug) {
- g_get_current_time (&end);
-
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
+ end = g_get_monotonic_time ();
+ diff = end - start;
printf ("e_book_backend_ldap_get_contact_list invoked contact_list_handler ");
- printf ("and took %ld.%03ld seconds\n", diff / 1000, diff % 1000);
+ printf ("and took %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds\n", diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
} else {
e_data_book_respond_get_contact_list (
@@ -6115,12 +6108,12 @@ book_backend_ldap_get_contact_list_uids (EBookBackend *backend,
EDataBookView *book_view;
gint ldap_error;
gchar *ldap_query;
- GTimeVal start, end;
- gulong diff;
+ gint64 start = 0, end;
+ GTimeSpan diff;
if (enable_debug) {
printf ("e_book_backend_ldap_get_contact_list_uids ... \n");
- g_get_current_time (&start);
+ start = g_get_monotonic_time ();
}
if (!e_backend_get_online (E_BACKEND (backend))) {
@@ -6190,13 +6183,11 @@ book_backend_ldap_get_contact_list_uids (EBookBackend *backend,
book_view, opid, contact_list_uids_msgid,
contact_list_uids_handler, contact_list_uids_dtor);
if (enable_debug) {
- g_get_current_time (&end);
-
- diff = end.tv_sec * 1000 + end.tv_usec / 1000;
- diff -= start.tv_sec * 1000 + start.tv_usec / 1000;
+ end = g_get_monotonic_time ();
+ diff = end - start;
printf ("e_book_backend_ldap_get_contact_list_uids invoked contact_list_uids_handler ");
- printf ("and took %ld.%03ld seconds\n", diff / 1000, diff % 1000);
+ printf ("and took %" G_GINT64_FORMAT ".%03" G_GINT64_FORMAT " seconds\n", diff / G_TIME_SPAN_SECOND, diff % G_TIME_SPAN_SECOND);
}
} else {
e_data_book_respond_get_contact_list_uids (book, opid, ldap_error_to_response (ldap_error), NULL);
diff --git a/src/calendar/backends/file/e-cal-backend-file.c b/src/calendar/backends/file/e-cal-backend-file.c
index bcc55e5da..173295eb1 100644
--- a/src/calendar/backends/file/e-cal-backend-file.c
+++ b/src/calendar/backends/file/e-cal-backend-file.c
@@ -392,13 +392,13 @@ get_revision_property (ECalBackendFile *cbfile)
static gchar *
make_revision_string (ECalBackendFile *cbfile)
{
- GTimeVal timeval;
+ GDateTime *dt;
gchar *datestr;
gchar *revision;
- g_get_current_time (&timeval);
-
- datestr = g_time_val_to_iso8601 (&timeval);
+ dt = g_date_time_new_now_utc ();
+ datestr = g_date_time_format_iso8601 (dt);
+ g_date_time_unref (dt);
revision = g_strdup_printf ("%s(%d)", datestr, cbfile->priv->revision_counter++);
g_free (datestr);
diff --git a/src/calendar/libecal/e-reminder-watcher.c b/src/calendar/libecal/e-reminder-watcher.c
index 5087de100..5a0849019 100644
--- a/src/calendar/libecal/e-reminder-watcher.c
+++ b/src/calendar/libecal/e-reminder-watcher.c
@@ -306,14 +306,13 @@ client_data_source_written_cb (GObject *source_object,
}
}
-static time_t
+static gint64
client_get_last_notification_time (ECalClient *client)
{
ESource *source;
ESourceAlarms *alarms_extension;
gchar *last_notified;
- GTimeVal tmval = { 0 };
- time_t value = 0, now;
+ gint64 value = 0;
if (!client)
return -1;
@@ -325,13 +324,25 @@ client_get_last_notification_time (ECalClient *client)
alarms_extension = e_source_get_extension (source, E_SOURCE_EXTENSION_ALARMS);
last_notified = e_source_alarms_dup_last_notified (alarms_extension);
- if (last_notified && *last_notified &&
- g_time_val_from_iso8601 (last_notified, &tmval)) {
- now = time (NULL);
- value = (time_t) tmval.tv_sec;
+ if (last_notified && *last_notified) {
+ GDateTime *dt, *now;
+
+ dt = g_date_time_new_from_iso8601 (last_notified, NULL);
+ if (!dt) {
+ g_free (last_notified);
+ return -1;
+ }
+
+ now = g_date_time_new_now_utc ();
+
+ if (g_date_time_compare (dt, now) > 0) {
+ value = g_date_time_to_unix (now);
+ } else {
+ value = g_date_time_to_unix (dt);
+ }
- if (value > now)
- value = now;
+ g_date_time_unref (dt);
+ g_date_time_unref (now);
}
g_free (last_notified);
@@ -345,9 +356,8 @@ client_set_last_notification_time (ECalClient *client,
{
ESource *source;
ESourceAlarms *alarms_extension;
- GTimeVal tv = { 0 };
+ GDateTime *tt_dt, *now, *last_notified_dt = NULL;
gchar *iso8601;
- time_t now;
g_return_if_fail (client != NULL);
g_return_if_fail (tt > 0);
@@ -360,17 +370,16 @@ client_set_last_notification_time (ECalClient *client,
iso8601 = e_source_alarms_dup_last_notified (alarms_extension);
if (iso8601) {
- if (!g_time_val_from_iso8601 (iso8601, &tv))
- tv.tv_sec = 0;
-
+ last_notified_dt = g_date_time_new_from_iso8601 (iso8601, NULL);
g_free (iso8601);
}
- now = time (NULL);
+ tt_dt = g_date_time_new_from_unix_utc (tt);
+ now = g_date_time_new_now_utc ();
- if (tt > (time_t) tv.tv_sec || (time_t) tv.tv_sec > now) {
- tv.tv_sec = (glong) tt;
- iso8601 = g_time_val_to_iso8601 (&tv);
+ if (last_notified_dt &&
+ (g_date_time_compare (tt_dt, last_notified_dt) > 0 || g_date_time_compare (last_notified_dt, now) > 0)) {
+ iso8601 = g_date_time_format_iso8601 (tt_dt);
e_source_alarms_set_last_notified (alarms_extension, iso8601);
e_reminder_watcher_debug_print ("Changed last-notified for source %s (%s) to %s\n",
@@ -382,6 +391,11 @@ client_set_last_notification_time (ECalClient *client,
e_source_write (source, NULL, client_data_source_written_cb, NULL);
}
+
+ if (last_notified_dt)
+ g_date_time_unref (last_notified_dt);
+ g_date_time_unref (tt_dt);
+ g_date_time_unref (now);
}
static void
@@ -437,7 +451,7 @@ client_data_start_view (ClientData *cd,
GCancellable *cancellable)
{
gchar *iso_start, *iso_end;
- time_t start_tt;
+ gint64 start_tt;
g_return_if_fail (cd != NULL);
g_return_if_fail (cd->client != NULL);
@@ -446,14 +460,14 @@ client_data_start_view (ClientData *cd,
start_tt = client_get_last_notification_time (cd->client) + 1;
if (start_tt <= 0)
- start_tt = time_day_begin (time (NULL));
+ start_tt = (gint64) time_day_begin (time (NULL));
- iso_start = isodate_from_time_t (start_tt);
+ iso_start = isodate_from_time_t ((time_t) start_tt);
iso_end = isodate_from_time_t ((time_t) next_midnight);
if (!iso_start || !iso_end) {
e_reminder_watcher_debug_print ("Failed to convert last notification %" G_GINT64_FORMAT " or next midnight %" G_GINT64_FORMAT " into iso strings for client %s\n",
- (gint64) start_tt, next_midnight, e_source_get_uid (e_client_get_source (E_CLIENT (cd->client))));
+ start_tt, next_midnight, e_source_get_uid (e_client_get_source (E_CLIENT (cd->client))));
} else {
gchar *query;
diff --git a/src/libebackend/e-cache-reaper-utils.c b/src/libebackend/e-cache-reaper-utils.c
index 954d7d1d9..e54b8675b 100644
--- a/src/libebackend/e-cache-reaper-utils.c
+++ b/src/libebackend/e-cache-reaper-utils.c
@@ -79,25 +79,24 @@ e_reap_trash_directory_sync (GFile *trash_directory,
while (file_info != NULL) {
GFileType file_type;
- GTimeVal mtime;
- GDate *date_now;
- GDate *date_mtime;
+ GDateTime *dt_modification;
const gchar *name;
gboolean reap_it;
- gint days_old;
+ gint days_old = 0;
name = g_file_info_get_name (file_info);
file_type = g_file_info_get_file_type (file_info);
- g_file_info_get_modification_time (file_info, &mtime);
+ dt_modification = g_file_info_get_modification_date_time (file_info);
/* Calculate how many days ago the file was modified. */
- date_now = g_date_new ();
- g_date_set_time_t (date_now, time (NULL));
- date_mtime = g_date_new ();
- g_date_set_time_val (date_mtime, &mtime);
- days_old = g_date_days_between (date_mtime, date_now);
- g_date_free (date_mtime);
- g_date_free (date_now);
+ if (dt_modification) {
+ GDateTime *dt_now;
+
+ dt_now = g_date_time_new_now_utc ();
+ days_old = g_date_time_difference (dt_now, dt_modification) / G_TIME_SPAN_DAY;
+ g_date_time_unref (dt_now);
+ g_date_time_unref (dt_modification);
+ }
reap_it =
(file_type == G_FILE_TYPE_DIRECTORY) &&
diff --git a/src/libedataserver/e-source-alarms.c b/src/libedataserver/e-source-alarms.c
index 4c4e400d3..d397b7484 100644
--- a/src/libedataserver/e-source-alarms.c
+++ b/src/libedataserver/e-source-alarms.c
@@ -290,14 +290,17 @@ e_source_alarms_set_last_notified (ESourceAlarms *extension,
last_notified = NULL;
if (last_notified != NULL) {
- GTimeVal time_val;
+ GDateTime *last_notified_time;
- if (!g_time_val_from_iso8601 (last_notified, &time_val)) {
+ last_notified_time = g_date_time_new_from_iso8601 (last_notified, NULL);
+ if (!last_notified_time) {
g_warning (
"%s: Invalid timestamp: '%s'",
G_STRFUNC, last_notified);
return;
}
+
+ g_date_time_unref (last_notified_time);
}
e_source_extension_property_lock (E_SOURCE_EXTENSION (extension));
diff --git a/src/libedataserver/e-webdav-session.c b/src/libedataserver/e-webdav-session.c
index 4ee8414ef..f82f8fcf5 100644
--- a/src/libedataserver/e-webdav-session.c
+++ b/src/libedataserver/e-webdav-session.c
@@ -3389,14 +3389,14 @@ e_webdav_session_extract_uint (xmlNodePtr parent,
return (guint) value;
}
-static glong
+static gint64
e_webdav_session_extract_datetime (xmlNodePtr parent,
const gchar *ns_href,
const gchar *prop,
gboolean is_iso_property)
{
gchar *value;
- GTimeVal tv;
+ gint64 result = -1;
g_return_val_if_fail (parent != NULL, -1);
g_return_val_if_fail (prop != NULL, -1);
@@ -3405,15 +3405,20 @@ e_webdav_session_extract_datetime (xmlNodePtr parent,
if (!value)
return -1;
- if (is_iso_property && !g_time_val_from_iso8601 (value, &tv)) {
- tv.tv_sec = -1;
+ if (is_iso_property) {
+ GDateTime *datetime;
+
+ datetime = g_date_time_new_from_iso8601 (value, NULL);
+ if (datetime) {
+ result = g_date_time_to_unix (datetime);
+ g_date_time_unref (datetime);
+ }
} else if (!is_iso_property) {
- tv.tv_sec = camel_header_decode_date (value, NULL);
+ result = (gint64) camel_header_decode_date (value, NULL);
}
g_free (value);
-
- return tv.tv_sec;
+ return result;
}
static gboolean
@@ -3437,8 +3442,8 @@ e_webdav_session_list_cb (EWebDAVSession *webdav,
gchar *display_name;
gchar *content_type;
gsize content_length;
- glong creation_date;
- glong last_modified;
+ gint64 creation_date;
+ gint64 last_modified;
gchar *description;
gchar *color;
gchar *source_href = NULL;
@@ -3484,8 +3489,8 @@ e_webdav_session_list_cb (EWebDAVSession *webdav,
NULL, /* display_name */
NULL, /* content_type */
content_length,
- creation_date,
- last_modified,
+ (glong) creation_date,
+ (glong) last_modified,
NULL, /* description */
NULL, /* color */
order);
diff --git a/src/libedataserver/e-xml-document.c b/src/libedataserver/e-xml-document.c
index 06af51003..899789b85 100644
--- a/src/libedataserver/e-xml-document.c
+++ b/src/libedataserver/e-xml-document.c
@@ -555,17 +555,16 @@ e_xml_document_add_attribute_time (EXmlDocument *xml,
const gchar *name,
time_t value)
{
- GTimeVal tv;
+ GDateTime *dt;
gchar *strvalue;
g_return_if_fail (E_IS_XML_DOCUMENT (xml));
g_return_if_fail (xml->priv->current_element != NULL);
g_return_if_fail (name != NULL);
- tv.tv_usec = 0;
- tv.tv_sec = value;
-
- strvalue = g_time_val_to_iso8601 (&tv);
+ dt = g_date_time_new_from_unix_utc ((gint64) value);
+ strvalue = g_date_time_format_iso8601 (dt);
+ g_date_time_unref (dt);
e_xml_document_add_attribute (xml, ns_href, name, strvalue);
g_free (strvalue);
}
@@ -695,16 +694,15 @@ void
e_xml_document_write_time (EXmlDocument *xml,
time_t value)
{
- GTimeVal tv;
+ GDateTime *dt;
gchar *strvalue;
g_return_if_fail (E_IS_XML_DOCUMENT (xml));
g_return_if_fail (xml->priv->current_element != NULL);
- tv.tv_usec = 0;
- tv.tv_sec = value;
-
- strvalue = g_time_val_to_iso8601 (&tv);
+ dt = g_date_time_new_from_unix_utc ((gint64) value);
+ strvalue = g_date_time_format_iso8601 (dt);
+ g_date_time_unref (dt);
e_xml_document_write_string (xml, strvalue);
g_free (strvalue);
}
diff --git a/src/modules/google-backend/module-google-backend.c b/src/modules/google-backend/module-google-backend.c
index d82f0f311..76a8e3fdc 100644
--- a/src/modules/google-backend/module-google-backend.c
+++ b/src/modules/google-backend/module-google-backend.c
@@ -725,11 +725,12 @@ google_backend_child_added (ECollectionBackend *backend,
/* To not notify about past reminders. */
alarms_extension = e_source_get_extension (child_source, E_SOURCE_EXTENSION_ALARMS);
if (!e_source_alarms_get_last_notified (alarms_extension)) {
- GTimeVal today_tv;
+ GDateTime *today_dt;
gchar *today;
- g_get_current_time (&today_tv);
- today = g_time_val_to_iso8601 (&today_tv);
+ today_dt = g_date_time_new_now_utc ();
+ today = g_date_time_format_iso8601 (today_dt);
+ g_date_time_unref (today_dt);
e_source_alarms_set_last_notified (alarms_extension, today);
g_free (today);
}