[gnome-software/gnome-3-20] dummy: Use the cancellable delay when checking for updates



commit 8447a2757cf64295706981424c1dedf9056e05dd
Author: Richard Hughes <richard hughsie com>
Date:   Fri Apr 15 17:25:17 2016 +0100

    dummy: Use the cancellable delay when checking for updates

 src/plugins/gs-plugin-dummy.c |  161 +++++++++++++++++++++--------------------
 1 files changed, 82 insertions(+), 79 deletions(-)
---
diff --git a/src/plugins/gs-plugin-dummy.c b/src/plugins/gs-plugin-dummy.c
index 2f883eb..f9ca513 100644
--- a/src/plugins/gs-plugin-dummy.c
+++ b/src/plugins/gs-plugin-dummy.c
@@ -52,6 +52,86 @@ gs_plugin_initialize (GsPlugin *plugin)
        }
 }
 
+typedef struct {
+       GsPlugin        *plugin;
+       GsApp           *app;
+       GMainLoop       *loop;
+       GCancellable    *cancellable;
+       GError          **error;
+       guint            percentage;
+} GsPluginDummyHelper;
+
+/**
+ * gs_plugin_dummy_delay_cb:
+ */
+static gboolean
+gs_plugin_dummy_delay_cb (gpointer user_data)
+{
+       GsPluginDummyHelper *helper = (GsPluginDummyHelper *) user_data;
+       helper->percentage += 10;
+       if (helper->percentage >= 100) {
+               g_main_loop_quit (helper->loop);
+               return FALSE;
+       }
+       if (helper->error != NULL && *(helper->error) != NULL) {
+               g_main_loop_quit (helper->loop);
+               return FALSE;
+       }
+       g_debug ("dummy percentage=%i%%", helper->percentage);
+       if (helper->app != NULL) {
+               gs_app_set_progress (helper->app, helper->percentage);
+               gs_plugin_status_update (helper->plugin,
+                                        helper->app,
+                                        GS_PLUGIN_STATUS_DOWNLOADING);
+       }
+       return TRUE;
+}
+
+/**
+ * gs_plugin_dummy_delay_cancel_cb:
+ */
+static void
+gs_plugin_dummy_delay_cancel_cb (GCancellable *cancellable,
+                                GsPluginDummyHelper *helper)
+{
+       g_debug ("dummy delay cancelled");
+       g_cancellable_set_error_if_cancelled (cancellable, helper->error);
+}
+
+/**
+ * gs_plugin_dummy_delay:
+ */
+static gboolean
+gs_plugin_dummy_delay (GsPlugin *plugin,
+                      GsApp *app,
+                      guint timeout_ms,
+                      GCancellable *cancellable,
+                      GError **error)
+{
+       g_autofree GsPluginDummyHelper *helper = g_new0 (GsPluginDummyHelper, 1);
+       g_autoptr(GMainLoop) loop = g_main_loop_new (NULL, FALSE);
+
+       /* cancel the delay on cancellation */
+       if (cancellable != NULL) {
+               g_cancellable_connect (cancellable,
+                                      G_CALLBACK (gs_plugin_dummy_delay_cancel_cb),
+                                      helper, NULL);
+       }
+
+       /* set up callbacks */
+       helper->app = app;
+       helper->cancellable = cancellable;
+       helper->error = error;
+       helper->loop = loop;
+       helper->percentage = 0;
+       helper->plugin = plugin;
+       g_debug ("dummy waiting for %ims", timeout_ms);
+       g_timeout_add (timeout_ms / 10, gs_plugin_dummy_delay_cb, helper);
+       g_main_loop_run (loop);
+       g_debug ("dummy done");
+       return helper->error != NULL;
+}
+
 /**
  * gs_plugin_add_updates:
  */
@@ -67,7 +147,8 @@ gs_plugin_add_updates (GsPlugin *plugin,
        gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_WAITING);
 
        /* spin */
-       g_usleep (2 * G_USEC_PER_SEC);
+       if (!gs_plugin_dummy_delay (plugin, NULL, 2000, cancellable, error))
+               return FALSE;
 
        /* add a normal application */
        app = gs_app_new ("gnome-boxes");
@@ -260,84 +341,6 @@ gs_plugin_add_distro_upgrades (GsPlugin *plugin,
        return TRUE;
 }
 
-typedef struct {
-       GsPlugin        *plugin;
-       GsApp           *app;
-       GMainLoop       *loop;
-       GCancellable    *cancellable;
-       GError          **error;
-       guint            percentage;
-} GsPluginDummyHelper;
-
-/**
- * gs_plugin_dummy_delay_cb:
- */
-static gboolean
-gs_plugin_dummy_delay_cb (gpointer user_data)
-{
-       GsPluginDummyHelper *helper = (GsPluginDummyHelper *) user_data;
-       helper->percentage += 10;
-       if (helper->percentage >= 100) {
-               g_main_loop_quit (helper->loop);
-               return FALSE;
-       }
-       if (helper->error != NULL && *(helper->error) != NULL) {
-               g_main_loop_quit (helper->loop);
-               return FALSE;
-       }
-       g_debug ("dummy percentage=%i%%", helper->percentage);
-       gs_app_set_progress (helper->app, helper->percentage);
-       gs_plugin_status_update (helper->plugin,
-                                helper->app,
-                                GS_PLUGIN_STATUS_DOWNLOADING);
-       return TRUE;
-}
-
-/**
- * gs_plugin_dummy_delay_cancel_cb:
- */
-static void
-gs_plugin_dummy_delay_cancel_cb (GCancellable *cancellable,
-                                GsPluginDummyHelper *helper)
-{
-       g_debug ("dummy delay cancelled");
-       g_cancellable_set_error_if_cancelled (cancellable, helper->error);
-}
-
-/**
- * gs_plugin_dummy_delay:
- */
-static gboolean
-gs_plugin_dummy_delay (GsPlugin *plugin,
-                      GsApp *app,
-                      guint timeout_ms,
-                      GCancellable *cancellable,
-                      GError **error)
-{
-       g_autofree GsPluginDummyHelper *helper = g_new0 (GsPluginDummyHelper, 1);
-       g_autoptr(GMainLoop) loop = g_main_loop_new (NULL, FALSE);
-
-       /* cancel the delay on cancellation */
-       if (cancellable != NULL) {
-               g_cancellable_connect (cancellable,
-                                      G_CALLBACK (gs_plugin_dummy_delay_cancel_cb),
-                                      helper, NULL);
-       }
-
-       /* set up callbacks */
-       helper->app = app;
-       helper->cancellable = cancellable;
-       helper->error = error;
-       helper->loop = loop;
-       helper->percentage = 0;
-       helper->plugin = plugin;
-       g_debug ("dummy waiting for %ims", timeout_ms);
-       g_timeout_add (timeout_ms / 10, gs_plugin_dummy_delay_cb, helper);
-       g_main_loop_run (loop);
-       g_debug ("dummy done");
-       return helper->error != NULL;
-}
-
 /**
  * gs_plugin_refresh:
  */


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