diff --git a/src/fu-pending.c b/src/fu-pending.c index 5f7ce39ad..6c3b941c3 100644 --- a/src/fu-pending.c +++ b/src/fu-pending.c @@ -185,6 +185,35 @@ out: return ret; } +gboolean +fu_pending_remove_all (FuPending *pending, GError **error) +{ + FuPendingPrivate *priv = GET_PRIVATE (pending); + char *error_msg = NULL; + gint rc; + + g_return_val_if_fail (FU_IS_PENDING (pending), FALSE); + + /* lazy load */ + if (priv->db == NULL) { + if (!fu_pending_load (pending, error)) + return FALSE; + } + + /* remove entries */ + g_debug ("FuPending: removing all devices"); + rc = sqlite3_exec (priv->db, "DELETE FROM pending;", NULL, NULL, &error_msg); + if (rc != SQLITE_OK) { + g_set_error (error, + FWUPD_ERROR, + FWUPD_ERROR_WRITE, + "SQL error: %s", error_msg); + sqlite3_free (error_msg); + return FALSE; + } + return TRUE; +} + gboolean fu_pending_remove_device (FuPending *pending, FwupdResult *res, GError **error) { diff --git a/src/fu-pending.h b/src/fu-pending.h index 45f5b75dc..fedc73f54 100644 --- a/src/fu-pending.h +++ b/src/fu-pending.h @@ -52,6 +52,8 @@ gboolean fu_pending_set_error_msg (FuPending *pending, gboolean fu_pending_remove_device (FuPending *pending, FwupdResult *res, GError **error); +gboolean fu_pending_remove_all (FuPending *pending, + GError **error); FwupdResult *fu_pending_get_device (FuPending *pending, const gchar *device_id, GError **error); diff --git a/src/fu-util.c b/src/fu-util.c index 2839f82a6..998320cb0 100644 --- a/src/fu-util.c +++ b/src/fu-util.c @@ -557,6 +557,13 @@ fu_util_clear_results (FuUtilPrivate *priv, gchar **values, GError **error) return fwupd_client_clear_results (priv->client, values[0], NULL, error); } +static gboolean +fu_util_clear_offline (FuUtilPrivate *priv, gchar **values, GError **error) +{ + g_autoptr(FuPending) pending = fu_pending_new (); + return fu_pending_remove_all (pending, error); +} + static gboolean fu_util_verify_update_all (FuUtilPrivate *priv, GError **error) { @@ -1705,6 +1712,12 @@ main (int argc, char *argv[]) /* TRANSLATORS: command description */ _("Clears the results from the last update"), fu_util_clear_results); + fu_util_add (priv->cmd_array, + "clear-offline", + NULL, + /* TRANSLATORS: command description */ + _("Clears any updates scheduled to be updated offline"), + fu_util_clear_offline); fu_util_add (priv->cmd_array, "get-results", NULL,