static void gs_plugin_packagekit_progress_cb (PkProgress *progress, PkProgressType type, gpointer user_data) { ProgressData *data = (ProgressData *) user_data; GsPlugin *plugin = data->plugin; if (type == PK_PROGRESS_TYPE_STATUS) { GsPluginStatus plugin_status; PkStatusEnum status; g_object_get (progress, "status", &status, NULL); /* profile */ if (status == PK_STATUS_ENUM_SETUP) { data->ptask = as_profile_start_literal (gs_plugin_get_profile (plugin), "packagekit-refine::transaction"); } else if (status == PK_STATUS_ENUM_FINISHED) { g_clear_pointer (&data->ptask, as_profile_task_free); } plugin_status = packagekit_status_enum_to_plugin_status (status); if (plugin_status != GS_PLUGIN_STATUS_UNKNOWN) gs_plugin_status_update (plugin, data->app, plugin_status); } else if (type == PK_PROGRESS_TYPE_PERCENTAGE) { gint percentage = pk_progress_get_percentage (progress); if (data->app != NULL && percentage >= 0 && percentage <= 100) gs_app_set_progress (data->app, (guint) percentage); } }
static void progress_cb (JsonObject *result, gpointer user_data) { GsApp *app = user_data; JsonArray *tasks; GList *task_list, *l; gint64 done = 0, total = 0; tasks = json_object_get_array_member (result, "tasks"); task_list = json_array_get_elements (tasks); for (l = task_list; l != NULL; l = l->next) { JsonObject *task, *progress; gint64 task_done, task_total; task = json_node_get_object (l->data); progress = json_object_get_object_member (task, "progress"); task_done = json_object_get_int_member (progress, "done"); task_total = json_object_get_int_member (progress, "total"); done += task_done; total += task_total; } gs_app_set_progress (app, (guint) (100 * done / total)); g_list_free (task_list); }
/** * gs_plugin_xdg_app_progress_cb: */ static void gs_plugin_xdg_app_progress_cb (const gchar *status, guint progress, gboolean estimating, gpointer user_data) { GsApp *app = GS_APP (user_data); gs_app_set_progress (app, progress); }
static void gs_plugin_manager_progress_cb (LiManager *mgr, guint percentage, const gchar *id, gpointer user_data) { GsPluginHelper *helper = (GsPluginHelper *) user_data; if (helper->app == NULL) return; /* we only catch the main progress */ if (id != NULL) return; gs_app_set_progress (helper->app, percentage); }
static void progress_cb (SnapdClient *client, SnapdChange *change, gpointer deprecated, gpointer user_data) { GsApp *app = user_data; GPtrArray *tasks; guint i; gint64 done = 0, total = 0; tasks = snapd_change_get_tasks (change); for (i = 0; i < tasks->len; i++) { SnapdTask *task = tasks->pdata[i]; done += snapd_task_get_progress_done (task); total += snapd_task_get_progress_total (task); } gs_app_set_progress (app, (guint) (100 * done / total)); }
/** * gs_plugin_packagekit_progress_cb: **/ static void gs_plugin_packagekit_progress_cb (PkProgress *progress, PkProgressType type, gpointer user_data) { ProgressData *data = (ProgressData *) user_data; GsPlugin *plugin = data->plugin; if (type == PK_PROGRESS_TYPE_STATUS) { GsPluginStatus plugin_status; PkStatusEnum status = pk_progress_get_status (progress); plugin_status = packagekit_status_enum_to_plugin_status (status); if (plugin_status != GS_PLUGIN_STATUS_UNKNOWN) gs_plugin_status_update (plugin, NULL, plugin_status); } else if (type == PK_PROGRESS_TYPE_PERCENTAGE) { gint percentage = pk_progress_get_percentage (progress); if (percentage >= 0 && percentage <= 100) gs_app_set_progress (data->app, percentage); } }
static void gs_plugin_fwupd_notify_percentage_cb (GObject *object, GParamSpec *pspec, GsPlugin *plugin) { GsPluginData *priv = gs_plugin_get_data (plugin); /* nothing in progress */ if (priv->app_current == NULL) { g_debug ("fwupd percentage: %u%%", fwupd_client_get_percentage (priv->client)); return; } g_debug ("fwupd percentage for %s: %u%%", gs_app_get_unique_id (priv->app_current), fwupd_client_get_percentage (priv->client)); gs_app_set_progress (priv->app_current, fwupd_client_get_percentage (priv->client)); }
static gboolean gs_plugin_steam_update_store (GsPlugin *plugin, AsStore *store, GPtrArray *apps, GError **error) { guint i; gdouble pc; GHashTable *app; g_autoptr(GsApp) dummy = gs_app_new (NULL); for (i = 0; i < apps->len; i++) { app = g_ptr_array_index (apps, i); if (!gs_plugin_steam_update_store_app (plugin, store, app, error)) return FALSE; /* update progress */ pc = (gdouble) i * 100.f / (gdouble) apps->len; gs_app_set_progress (dummy, (guint) pc); gs_plugin_status_update (plugin, dummy, GS_PLUGIN_STATUS_DOWNLOADING); } return TRUE; }