[gedit/zbrown/cleanup-recents: 6/6] open-selector: port to GDateTime




commit bd72e09da6a890918ba3568c687b057c4d3f28b5
Author: Zander Brown <zbrown gnome org>
Date:   Sat Apr 10 14:32:48 2021 +0100

    open-selector: port to GDateTime
    
    Based on the proposal at https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1089

 gedit/gedit-open-document-selector-helper.c | 17 ++++++++--------
 gedit/gedit-open-document-selector-helper.h |  2 +-
 gedit/gedit-open-document-selector-store.c  | 31 +++++++++++++++++++++++------
 gedit/gedit-open-document-selector.c        | 12 +----------
 4 files changed, 36 insertions(+), 26 deletions(-)
---
diff --git a/gedit/gedit-open-document-selector-helper.c b/gedit/gedit-open-document-selector-helper.c
index 369d12ea2..0502e9cd6 100644
--- a/gedit/gedit-open-document-selector-helper.c
+++ b/gedit/gedit-open-document-selector-helper.c
@@ -26,23 +26,23 @@ gedit_open_document_selector_debug_print_list (const gchar *title,
 {
        FileItem *item;
        GList *l;
-       glong time_sec;
-       glong time_usec;
+       char *accessed = NULL;
 
        g_print ("%s\n", title);
 
        for (l = fileitem_list; l != NULL; l = l->next)
        {
                item = (FileItem *)l->data;
-               time_sec = item->access_time.tv_sec;
-               time_usec = item->access_time.tv_usec;
 
-               g_print ("%ld:%ld uri:%s (%s %s)\n",
-                        time_sec,
-                        time_usec,
+               accessed = g_date_time_format_iso8601 (item->accessed);
+
+               g_print ("%s uri:%s (%s %s)\n",
+                        accessed,
                         item->uri,
                         item->name,
                         item->path);
+               
+               g_clear_pointer (&accessed, g_free);
        }
 }
 
@@ -62,6 +62,7 @@ gedit_open_document_selector_free_fileitem_item (FileItem *item)
        g_free (item->uri);
        g_free (item->name);
        g_free (item->path);
+       g_clear_pointer (&item->accessed, g_date_time_unref);
 
        g_slice_free (FileItem, item);
 }
@@ -76,7 +77,7 @@ gedit_open_document_selector_copy_fileitem_item (FileItem *item)
        new_item->uri = g_strdup (item->uri);
        new_item->name = g_strdup (item->name);
        new_item->path = g_strdup (item->path);
-       new_item->access_time = item->access_time;
+       new_item->accessed = g_date_time_ref (item->accessed);
 
        return new_item;
 }
diff --git a/gedit/gedit-open-document-selector-helper.h b/gedit/gedit-open-document-selector-helper.h
index 6feb65408..2cbfa9ad0 100644
--- a/gedit/gedit-open-document-selector-helper.h
+++ b/gedit/gedit-open-document-selector-helper.h
@@ -32,7 +32,7 @@ typedef struct
        gchar *uri;
        gchar *name;
        gchar *path;
-       GTimeVal access_time;
+       GDateTime *accessed;
 } FileItem;
 
 typedef enum
diff --git a/gedit/gedit-open-document-selector-store.c b/gedit/gedit-open-document-selector-store.c
index e3454f12c..5fea67530 100644
--- a/gedit/gedit-open-document-selector-store.c
+++ b/gedit/gedit-open-document-selector-store.c
@@ -83,6 +83,28 @@ G_DEFINE_TYPE (GeditOpenDocumentSelectorStore, gedit_open_document_selector_stor
 G_DEFINE_QUARK (gedit-open-document-selector-store-error-quark,
                 gedit_open_document_selector_store_error)
 
+
+static GDateTime *
+_get_date_time (GFileInfo *info)
+{
+  guint32 time;
+  guint32 usecs;
+  GDateTime *dt = NULL, *dt2 = NULL;
+
+  g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+
+  time = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS);
+  dt = g_date_time_new_from_unix_utc (time);
+
+  usecs = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_TIME_ACCESS_USEC);
+  dt2 = g_date_time_add_seconds (dt, usecs / (gdouble) G_USEC_PER_SEC);
+
+  g_date_time_unref (dt);
+
+  return g_steal_pointer (&dt2);
+}
+
+
 static GList *
 get_current_docs_list (GeditOpenDocumentSelectorStore *selector_store G_GNUC_UNUSED,
                        GeditOpenDocumentSelector      *selector)
@@ -119,8 +141,7 @@ get_current_docs_list (GeditOpenDocumentSelectorStore *selector_store G_GNUC_UNU
 
                item = gedit_open_document_selector_create_fileitem_item ();
 
-               item->access_time.tv_sec = g_file_info_get_attribute_uint64 (info, "time::access");
-               item->access_time.tv_usec = g_file_info_get_attribute_uint32 (info, "time::access-usec");
+               item->accessed = _get_date_time (info);
                item->uri = g_file_get_uri (file);
 
                file_items_list = g_list_prepend (file_items_list, item);
@@ -216,8 +237,7 @@ get_children_from_dir (GeditOpenDocumentSelectorStore *selector_store G_GNUC_UNU
                        item = gedit_open_document_selector_create_fileitem_item ();
                        item->uri = g_file_get_uri (file);
 
-                       item->access_time.tv_sec = g_file_info_get_attribute_uint64 (info, "time::access");
-                       item->access_time.tv_usec = g_file_info_get_attribute_uint32 (info, 
"time::access-usec");
+                       item->accessed = _get_date_time (info);
 
                        file_items_list = g_list_prepend (file_items_list, item);
                        g_object_unref (file);
@@ -480,8 +500,7 @@ convert_recent_item_list_to_fileitem_list (GList *uri_list)
                item = gedit_open_document_selector_create_fileitem_item ();
                item->uri = uri;
 
-               item->access_time.tv_sec = gtk_recent_info_get_visited (l->data);
-               item->access_time.tv_usec = 0;
+               item->accessed = g_date_time_new_from_unix_local (gtk_recent_info_get_visited (l->data));
 
                fileitem_list = g_list_prepend (fileitem_list, item);
        }
diff --git a/gedit/gedit-open-document-selector.c b/gedit/gedit-open-document-selector.c
index f67a6ba6d..bc3d0548d 100644
--- a/gedit/gedit-open-document-selector.c
+++ b/gedit/gedit-open-document-selector.c
@@ -310,19 +310,9 @@ sort_items_by_mru (FileItem *a,
                    FileItem *b,
                    gpointer  unused G_GNUC_UNUSED)
 {
-       glong diff;
-
        g_assert (a != NULL && b != NULL);
-       diff = b->access_time.tv_sec - a->access_time.tv_sec;
 
-       if (diff == 0)
-       {
-               return (b->access_time.tv_usec - a->access_time.tv_usec);
-       }
-       else
-       {
-               return diff;
-       }
+       return g_date_time_compare (b, a);
 }
 
 static GList *


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