[evolution-data-server] book/cal-meta-backend: Claim error on refresh call in Power Saver mode



commit 0bed245eec73351818336a4afd86c9a96ef4cb96
Author: Milan Crha <mcrha redhat com>
Date:   Thu Jun 2 18:41:22 2022 +0200

    book/cal-meta-backend: Claim error on refresh call in Power Saver mode
    
    Inform the caller that the refresh is disabled when it's invoked
    in a Power Saver mode, thus it knows why the refresh is not done.
    
    Related to https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/383

 .../libedata-book/e-book-meta-backend.c            | 34 +++++++++++++++-------
 src/calendar/libedata-cal/e-cal-meta-backend.c     | 34 +++++++++++++++-------
 2 files changed, 48 insertions(+), 20 deletions(-)
---
diff --git a/src/addressbook/libedata-book/e-book-meta-backend.c 
b/src/addressbook/libedata-book/e-book-meta-backend.c
index fee3aa92d..6c674abbd 100644
--- a/src/addressbook/libedata-book/e-book-meta-backend.c
+++ b/src/addressbook/libedata-book/e-book-meta-backend.c
@@ -128,6 +128,23 @@ static gboolean ebmb_save_contact_wrapper_sync (EBookMetaBackend *meta_backend,
                                                GCancellable *cancellable,
                                                GError **error);
 
+static gboolean
+ebmb_is_power_saver_enabled (void)
+{
+#ifdef HAVE_GPOWERPROFILEMONITOR
+       GPowerProfileMonitor *power_monitor;
+       gboolean enabled;
+
+       power_monitor = g_power_profile_monitor_dup_default ();
+       enabled = power_monitor && g_power_profile_monitor_get_power_saver_enabled (power_monitor);
+       g_clear_object (&power_monitor);
+
+       return enabled;
+#else
+       return FALSE;
+#endif
+}
+
 /**
  * e_book_meta_backend_info_new:
  * @uid: a contact UID; cannot be %NULL
@@ -779,9 +796,6 @@ ebmb_refresh_internal_sync (EBookMetaBackend *meta_backend,
                            GCancellable *cancellable,
                            GError **error)
 {
-#ifdef HAVE_GPOWERPROFILEMONITOR
-       GPowerProfileMonitor *power_monitor;
-#endif
        EBookCache *book_cache;
        gboolean success = FALSE, repeat = TRUE, is_repeat = FALSE;
 
@@ -790,18 +804,12 @@ ebmb_refresh_internal_sync (EBookMetaBackend *meta_backend,
        if (g_cancellable_set_error_if_cancelled (cancellable, error))
                goto done;
 
-#ifdef HAVE_GPOWERPROFILEMONITOR
        /* Silently ignore the refresh request when in the power-saver mode */
-       power_monitor = g_power_profile_monitor_dup_default ();
-       if (power_monitor && g_power_profile_monitor_get_power_saver_enabled (power_monitor)) {
-               g_clear_object (&power_monitor);
+       if (ebmb_is_power_saver_enabled ()) {
                success = TRUE;
                goto done;
        }
 
-       g_clear_object (&power_monitor);
-#endif
-
        e_book_backend_foreach_view_notify_progress (E_BOOK_BACKEND (meta_backend), TRUE, 0, 
_("Refreshing…"));
 
        if (!e_book_meta_backend_ensure_connected_sync (meta_backend, cancellable, with_connection_error ? 
error : NULL) ||
@@ -1320,6 +1328,12 @@ ebmb_refresh_sync (EBookBackendSync *book_backend,
        if (!e_backend_get_online (backend))
                return TRUE;
 
+       if (ebmb_is_power_saver_enabled ()) {
+               g_set_error_literal (error, E_CLIENT_ERROR, E_CLIENT_ERROR_OTHER_ERROR,
+                       _("Refresh skipped due to enabled Power Saver mode. Disable Power Saver mode and 
repeat the action."));
+               return FALSE;
+       }
+
        success = e_book_meta_backend_ensure_connected_sync (meta_backend, cancellable, error);
 
        if (success)
diff --git a/src/calendar/libedata-cal/e-cal-meta-backend.c b/src/calendar/libedata-cal/e-cal-meta-backend.c
index 9270929df..7e6c39067 100644
--- a/src/calendar/libedata-cal/e-cal-meta-backend.c
+++ b/src/calendar/libedata-cal/e-cal-meta-backend.c
@@ -142,6 +142,23 @@ static gboolean ecmb_save_component_wrapper_sync (ECalMetaBackend *meta_backend,
                                                  GCancellable *cancellable,
                                                  GError **error);
 
+static gboolean
+ecmb_is_power_saver_enabled (void)
+{
+#ifdef HAVE_GPOWERPROFILEMONITOR
+       GPowerProfileMonitor *power_monitor;
+       gboolean enabled;
+
+       power_monitor = g_power_profile_monitor_dup_default ();
+       enabled = power_monitor && g_power_profile_monitor_get_power_saver_enabled (power_monitor);
+       g_clear_object (&power_monitor);
+
+       return enabled;
+#else
+       return FALSE;
+#endif
+}
+
 /**
  * e_cal_meta_backend_info_new:
  * @uid: a component UID; cannot be %NULL
@@ -680,9 +697,6 @@ ecmb_refresh_internal_sync (ECalMetaBackend *meta_backend,
                            GCancellable *cancellable,
                            GError **error)
 {
-#ifdef HAVE_GPOWERPROFILEMONITOR
-       GPowerProfileMonitor *power_monitor;
-#endif
        ECalCache *cal_cache;
        gboolean success = FALSE, repeat = TRUE, is_repeat = FALSE;
 
@@ -691,18 +705,12 @@ ecmb_refresh_internal_sync (ECalMetaBackend *meta_backend,
        if (g_cancellable_set_error_if_cancelled (cancellable, error))
                goto done;
 
-#ifdef HAVE_GPOWERPROFILEMONITOR
        /* Silently ignore the refresh request when in the power-saver mode */
-       power_monitor = g_power_profile_monitor_dup_default ();
-       if (power_monitor && g_power_profile_monitor_get_power_saver_enabled (power_monitor)) {
-               g_clear_object (&power_monitor);
+       if (ecmb_is_power_saver_enabled ()) {
                success = TRUE;
                goto done;
        }
 
-       g_clear_object (&power_monitor);
-#endif
-
        e_cal_backend_foreach_view_notify_progress (E_CAL_BACKEND (meta_backend), TRUE, 0, _("Refreshing…"));
 
        if (!e_cal_meta_backend_ensure_connected_sync (meta_backend, cancellable, with_connection_error ? 
error : NULL) ||
@@ -1345,6 +1353,12 @@ ecmb_refresh_sync (ECalBackendSync *sync_backend,
        if (!e_backend_get_online (backend))
                return;
 
+       if (ecmb_is_power_saver_enabled ()) {
+               g_set_error_literal (error, E_CLIENT_ERROR, E_CLIENT_ERROR_OTHER_ERROR,
+                       _("Refresh skipped due to enabled Power Saver mode. Disable Power Saver mode and 
repeat the action."));
+               return;
+       }
+
        if (e_cal_meta_backend_ensure_connected_sync (meta_backend, cancellable, error))
                e_cal_meta_backend_schedule_refresh (meta_backend);
 }


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