[epiphany/wip/sync: 22/22] sync: Show the time of last sync in preferences dialog



commit ff5d6fee505d3f0aa4ef039aa2f7641ccd00ca56
Author: Gabriel Ivascu <ivascu gabriel59 gmail com>
Date:   Thu Jun 8 18:17:45 2017 +0300

    sync: Show the time of last sync in preferences dialog

 data/org.gnome.epiphany.gschema.xml |    5 +++++
 lib/ephy-prefs.h                    |    1 +
 lib/ephy-sync-utils.c               |   13 +++++++++++++
 lib/ephy-sync-utils.h               |    3 +++
 lib/sync/ephy-sync-service.c        |    3 +++
 src/prefs-dialog.c                  |   28 ++++++++++++++++++++++++++++
 src/resources/gtk/prefs-dialog.ui   |   12 ++++++++++++
 7 files changed, 65 insertions(+), 0 deletions(-)
---
diff --git a/data/org.gnome.epiphany.gschema.xml b/data/org.gnome.epiphany.gschema.xml
index f0ccddd..e415d90 100644
--- a/data/org.gnome.epiphany.gschema.xml
+++ b/data/org.gnome.epiphany.gschema.xml
@@ -277,6 +277,11 @@
                        <summary>Currently signed in sync user</summary>
                        <description>The email linked to the Firefox Account used to sync data with Mozilla’s 
servers.</description>
                </key>
+               <key type="x" name="sync-time">
+                       <default>0</default>
+                       <summary>Last sync timestamp</summary>
+                       <description>The UNIX time at which last sync was made in seconds.</description>
+               </key>
                <key type="s" name="sync-device-id">
                        <default>''</default>
                        <summary>Sync device ID</summary>
diff --git a/lib/ephy-prefs.h b/lib/ephy-prefs.h
index 6736296..9fafee4 100644
--- a/lib/ephy-prefs.h
+++ b/lib/ephy-prefs.h
@@ -153,6 +153,7 @@ static const char * const ephy_prefs_web_schema[] = {
 
 #define EPHY_PREFS_SYNC_SCHEMA            "org.gnome.Epiphany.sync"
 #define EPHY_PREFS_SYNC_USER              "sync-user"
+#define EPHY_PREFS_SYNC_TIME              "sync-time"
 #define EPHY_PREFS_SYNC_DEVICE_ID         "sync-device-id"
 #define EPHY_PREFS_SYNC_DEVICE_NAME       "sync-device-name"
 #define EPHY_PREFS_SYNC_FREQUENCY         "sync-frequency"
diff --git a/lib/ephy-sync-utils.c b/lib/ephy-sync-utils.c
index bc4ff58..894d4b8 100644
--- a/lib/ephy-sync-utils.c
+++ b/lib/ephy-sync-utils.c
@@ -305,6 +305,19 @@ ephy_sync_utils_user_is_signed_in (void)
   return FALSE;
 }
 
+void
+ephy_sync_utils_set_sync_time (gint64 time)
+{
+  time = time > 0 ? time : 0;
+  g_settings_set_int64 (EPHY_SETTINGS_SYNC, EPHY_PREFS_SYNC_TIME, time);
+}
+
+gint64
+ephy_sync_utils_get_sync_time (void)
+{
+  return g_settings_get_int64 (EPHY_SETTINGS_SYNC, EPHY_PREFS_SYNC_TIME);
+}
+
 guint
 ephy_sync_utils_get_sync_frequency (void)
 {
diff --git a/lib/ephy-sync-utils.h b/lib/ephy-sync-utils.h
index f741a91..34deea0 100644
--- a/lib/ephy-sync-utils.h
+++ b/lib/ephy-sync-utils.h
@@ -60,6 +60,9 @@ void      ephy_sync_utils_set_sync_user                 (const char *user);
 char     *ephy_sync_utils_get_sync_user                 (void);
 gboolean  ephy_sync_utils_user_is_signed_in             (void);
 
+void      ephy_sync_utils_set_sync_time                 (gint64 time);
+gint64    ephy_sync_utils_get_sync_time                 (void);
+
 guint     ephy_sync_utils_get_sync_frequency            (void);
 gboolean  ephy_sync_utils_sync_with_firefox             (void);
 
diff --git a/lib/sync/ephy-sync-service.c b/lib/sync/ephy-sync-service.c
index e4dad37..e55b4b3 100644
--- a/lib/sync/ephy-sync-service.c
+++ b/lib/sync/ephy-sync-service.c
@@ -1368,6 +1368,8 @@ ephy_sync_service_sync (gpointer user_data)
   for (GSList *l = self->managers; l && l->data; l = l->next)
     ephy_sync_service_sync_collection (self, l->data, ++index == num_managers);
 
+  ephy_sync_utils_set_sync_time (g_get_real_time () / 1000000);
+
   return G_SOURCE_CONTINUE;
 }
 
@@ -2310,6 +2312,7 @@ ephy_sync_service_do_sign_out (EphySyncService *self)
   ephy_sync_utils_set_bookmarks_sync_is_initial (TRUE);
   ephy_sync_utils_set_passwords_sync_is_initial (TRUE);
   ephy_sync_utils_set_history_sync_is_initial (TRUE);
+  ephy_sync_utils_set_sync_time (0);
 }
 
 void
diff --git a/src/prefs-dialog.c b/src/prefs-dialog.c
index 607eb04..49b7019 100644
--- a/src/prefs-dialog.c
+++ b/src/prefs-dialog.c
@@ -40,6 +40,7 @@
 #include "ephy-string.h"
 #include "ephy-sync-service.h"
 #include "ephy-sync-utils.h"
+#include "ephy-time-helpers.h"
 #include "ephy-uri-tester-shared.h"
 #include "clear-data-dialog.h"
 #include "cookies-dialog.h"
@@ -138,6 +139,8 @@ struct _PrefsDialog {
   GtkWidget *sync_device_name_change_button;
   GtkWidget *sync_device_name_save_button;
   GtkWidget *sync_device_name_cancel_button;
+  GtkWidget *sync_last_sync_time_box;
+  GtkWidget *sync_last_sync_time_label;
   gboolean sync_was_signed_in;
 
   WebKitWebView *fxa_web_view;
@@ -227,6 +230,26 @@ sync_with_firefox_toggled_cb (GtkToggleButton *button,
 }
 
 static void
+sync_set_last_sync_time (PrefsDialog *dialog)
+{
+  gint64 sync_time = ephy_sync_utils_get_sync_time ();
+
+  if (sync_time) {
+    char *time = ephy_time_helpers_utf_friendly_time (sync_time);
+    /* Translators: the %s refers to the time at which the last sync was made.
+     * For example: Today 04:34 PM, Sun 11:25 AM, May 31 06:41 PM.
+     */
+    char *text = g_strdup_printf (_("Last synchronized: %s"), time);
+
+    gtk_label_set_text (GTK_LABEL (dialog->sync_last_sync_time_label), text);
+    gtk_widget_set_visible (dialog->sync_last_sync_time_box, TRUE);
+
+    g_free (text);
+    g_free (time);
+  }
+}
+
+static void
 sync_finished_cb (EphySyncService *service,
                   PrefsDialog     *dialog)
 {
@@ -234,6 +257,7 @@ sync_finished_cb (EphySyncService *service,
   g_assert (EPHY_IS_PREFS_DIALOG (dialog));
 
   gtk_widget_set_sensitive (dialog->sync_now_button, TRUE);
+  sync_set_last_sync_time (dialog);
 }
 
 static void
@@ -548,6 +572,7 @@ on_sync_sign_out_button_clicked (GtkWidget   *button,
   gtk_box_pack_start (GTK_BOX (dialog->sync_page_box),
                       dialog->sync_firefox_iframe_box,
                       FALSE, FALSE, 0);
+  gtk_widget_set_visible (dialog->sync_last_sync_time_box, FALSE);
 
   dialog->sync_was_signed_in = FALSE;
 }
@@ -734,6 +759,8 @@ prefs_dialog_class_init (PrefsDialogClass *klass)
   gtk_widget_class_bind_template_child (widget_class, PrefsDialog, sync_device_name_change_button);
   gtk_widget_class_bind_template_child (widget_class, PrefsDialog, sync_device_name_save_button);
   gtk_widget_class_bind_template_child (widget_class, PrefsDialog, sync_device_name_cancel_button);
+  gtk_widget_class_bind_template_child (widget_class, PrefsDialog, sync_last_sync_time_box);
+  gtk_widget_class_bind_template_child (widget_class, PrefsDialog, sync_last_sync_time_label);
 
   gtk_widget_class_bind_template_callback (widget_class, on_manage_cookies_button_clicked);
   gtk_widget_class_bind_template_callback (widget_class, on_manage_passwords_button_clicked);
@@ -1765,6 +1792,7 @@ setup_sync_page (PrefsDialog *dialog)
     /* Translators: the %s refers to the email of the currently logged in user. */
     char *text = g_strdup_printf (_("Logged in as %s"), email);
 
+    sync_set_last_sync_time (dialog);
     gtk_label_set_markup (GTK_LABEL (dialog->sync_firefox_account_label), text);
     gtk_container_remove (GTK_CONTAINER (dialog->sync_page_box),
                           dialog->sync_firefox_iframe_box);
diff --git a/src/resources/gtk/prefs-dialog.ui b/src/resources/gtk/prefs-dialog.ui
index 2dd7ed8..ad606ea 100644
--- a/src/resources/gtk/prefs-dialog.ui
+++ b/src/resources/gtk/prefs-dialog.ui
@@ -1023,6 +1023,18 @@
                                 </child>
                               </object>
                             </child>
+                            <child>
+                              <object class="GtkBox" id="sync_last_sync_time_box">
+                                <property name="visible">True</property>
+                                <child>
+                                  <object class="GtkLabel" id="sync_last_sync_time_label">
+                                    <property name="visible">True</property>
+                                    <property name="halign">start</property>
+                                    <property name="hexpand">True</property>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
                           </object>
                         </child>
                         <child>


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