[gnome-software/wip/hughsie/fwupd] Support installing .cab files



commit 30467bf0606bd5e184df6043f7c692afb8bd5ab7
Author: Richard Hughes <richard hughsie com>
Date:   Wed Mar 11 20:47:20 2015 +0000

    Support installing .cab files

 src/plugins/gs-plugin-fwupd.c |   75 +++++++++++++++++++++++++++++++++++------
 1 files changed, 64 insertions(+), 11 deletions(-)
---
diff --git a/src/plugins/gs-plugin-fwupd.c b/src/plugins/gs-plugin-fwupd.c
index 4d4d549..2cfe27d 100644
--- a/src/plugins/gs-plugin-fwupd.c
+++ b/src/plugins/gs-plugin-fwupd.c
@@ -445,18 +445,17 @@ gs_plugin_refresh (GsPlugin *plugin,
 }
 
 /**
- * gs_plugin_app_upgrade:
+ * gs_plugin_fwupd_upgrade:
  */
-gboolean
-gs_plugin_app_upgrade (GsPlugin *plugin,
-                      GsApp *app,
-                      GCancellable *cancellable,
-                      GError **error)
+static gboolean
+gs_plugin_fwupd_upgrade (GsPlugin *plugin,
+                        const gchar *filename,
+                        const gchar *device_id,
+                        GCancellable *cancellable,
+                        GError **error)
 {
        GVariant *body;
        GVariantBuilder builder;
-       const gchar *device_id;
-       const gchar *filename;
        gint fd;
        gint retval;
        _cleanup_object_unref_ GDBusConnection *conn = NULL;
@@ -472,7 +471,6 @@ gs_plugin_app_upgrade (GsPlugin *plugin,
        g_variant_builder_init (&builder, G_VARIANT_TYPE_ARRAY);
        g_variant_builder_add (&builder, "{sv}",
                               "reason", g_variant_new_string ("system-update"));
-       filename = gs_app_get_source_id_default (app);
        g_variant_builder_add (&builder, "{sv}",
                               "filename", g_variant_new_string (filename));
        g_variant_builder_add (&builder, "{sv}",
@@ -503,7 +501,6 @@ gs_plugin_app_upgrade (GsPlugin *plugin,
        close (fd);
 
        /* send message */
-       device_id = gs_app_get_metadata_item (app, "fwupd::DeviceID");
        body = g_variant_new ("(sha{sv})", device_id, fd > -1 ? 0 : -1, &builder);
        g_dbus_message_set_body (request, body);
        message = g_dbus_connection_send_message_with_reply_sync (conn,
@@ -526,6 +523,62 @@ gs_plugin_app_upgrade (GsPlugin *plugin,
 }
 
 /**
+ * gs_plugin_app_upgrade:
+ */
+gboolean
+gs_plugin_app_upgrade (GsPlugin *plugin,
+                      GsApp *app,
+                      GCancellable *cancellable,
+                      GError **error)
+{
+       const gchar *device_id;
+       const gchar *filename;
+
+       filename = gs_app_get_source_id_default (app);
+       device_id = gs_app_get_metadata_item (app, "fwupd::DeviceID");
+       if (filename == NULL || device_id == NULL) {
+               g_set_error (error,
+                            GS_PLUGIN_ERROR,
+                            GS_PLUGIN_ERROR_FAILED,
+                            "not enough data for fwupd %s:%s",
+                            filename, device_id);
+               return FALSE;
+       }
+       return gs_plugin_fwupd_upgrade (plugin,
+                                       filename,
+                                       device_id,
+                                       cancellable,
+                                       error);
+}
+
+/**
+ * gs_plugin_app_install:
+ */
+gboolean
+gs_plugin_app_install (GsPlugin *plugin,
+                      GsApp *app,
+                      GCancellable *cancellable,
+                      GError **error)
+{
+       const gchar *filename;
+
+       filename = gs_app_get_source_id_default (app);
+       if (filename == NULL) {
+               g_set_error (error,
+                            GS_PLUGIN_ERROR,
+                            GS_PLUGIN_ERROR_FAILED,
+                            "not enough data for fwupd %s",
+                            filename);
+               return FALSE;
+       }
+       return gs_plugin_fwupd_upgrade (plugin,
+                                       filename,
+                                       "*",
+                                       cancellable,
+                                       error);
+}
+
+/**
  * gs_plugin_fwupd_content_type_matches:
  */
 static gboolean
@@ -656,9 +709,9 @@ gs_plugin_filename_to_app (GsPlugin *plugin,
        gs_app_set_management_plugin (app, "fwupd");
        gs_app_set_kind (app, GS_APP_KIND_PACKAGE);
        gs_app_set_state (app, AS_APP_STATE_AVAILABLE_LOCAL);
+       gs_app_add_source_id (app, filename);
 //     gs_app_set_description (app, GS_APP_QUALITY_LOWEST, "FIXME");   //FIXME
 //     gs_app_add_source (app, "XXX"); //FIXME
-//     gs_app_add_source_id (app, "YYY");      //FIXME
 //     gs_app_set_url (app, AS_URL_KIND_HOMEPAGE, "http://fixme.com";); //FIXME
 //     gs_app_set_size (app, 999);
 //     gs_app_set_licence (app, "NONFREE");


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