[gnome-software] Use AsScreenshot from libappstream-glib in the main binary



commit 2cd0b3f62d17efaf279b727e9d4b6478fbddfd85
Author: Richard Hughes <richard hughsie com>
Date:   Tue Jul 1 10:27:13 2014 +0100

    Use AsScreenshot from libappstream-glib in the main binary
    
    There's no point duplicating this to maintain isolation when there's no one
    interested in a libappstore plugin. GNOME Software already depends on lots of
    functionality in libappstream-glib which any replacement would also have to
    provide.
    
    The libappstream (not to be confused with libappstream-glib) also has an
    AsScreenshot class which could be used in place.

 src/Makefile.am                   |    8 +-
 src/gs-app.c                      |   14 ++-
 src/gs-app.h                      |    5 +-
 src/gs-screenshot-image.c         |   28 +++--
 src/gs-screenshot-image.h         |    7 +-
 src/gs-screenshot.c               |  228 -------------------------------------
 src/gs-screenshot.h               |   79 -------------
 src/gs-shell-details.c            |   18 ++--
 src/plugins/gs-plugin-appstream.c |   24 +----
 9 files changed, 43 insertions(+), 368 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 34e8091..3f263ad 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -2,6 +2,7 @@ SUBDIRS =                                               \
        plugins
 
 AM_CPPFLAGS =                                          \
+       $(APPSTREAM_CFLAGS)                             \
        $(GLIB_CFLAGS)                                  \
        $(GTK_CFLAGS)                                   \
        $(SOUP_CFLAGS)                                  \
@@ -70,12 +71,12 @@ gnome_software_cmd_SOURCES =                                \
        gs-utils.c                                      \
        gs-plugin-loader.c                              \
        gs-plugin-loader-sync.c                         \
-       gs-screenshot.c                                 \
        gs-category.c                                   \
        gs-plugin.c                                     \
        gs-profile.c
 
 gnome_software_cmd_LDADD =                             \
+       $(APPSTREAM_LIBS)                               \
        $(GLIB_LIBS)                                    \
        $(GTK_LIBS)
 
@@ -122,8 +123,6 @@ gnome_software_SOURCES =                            \
        gs-profile.h                                    \
        gs-screenshot-image.c                           \
        gs-screenshot-image.h                           \
-       gs-screenshot.c                                 \
-       gs-screenshot.h                                 \
        gs-shell.c                                      \
        gs-shell.h                                      \
        gs-markdown.c                                   \
@@ -167,6 +166,7 @@ gnome_software_SOURCES =                            \
        gs-main.c
 
 gnome_software_LDADD =                                 \
+       $(APPSTREAM_LIBS)                               \
        $(GLIB_LIBS)                                    \
        $(GTK_LIBS)                                     \
        $(SOUP_LIBS)                                    \
@@ -213,11 +213,11 @@ gs_self_test_SOURCES =                                            \
        gs-plugin-loader.c                                      \
        gs-plugin.c                                             \
        gs-profile.c                                            \
-       gs-screenshot.c                                         \
        gs-utils.c                                              \
        gs-self-test.c
 
 gs_self_test_LDADD =                                           \
+       $(APPSTREAM_LIBS)                                       \
        $(GLIB_LIBS)                                            \
        $(GTK_LIBS)
 
diff --git a/src/gs-app.c b/src/gs-app.c
index 3b3a5f2..fb8618f 100644
--- a/src/gs-app.c
+++ b/src/gs-app.c
@@ -207,11 +207,12 @@ gs_app_id_kind_to_string (GsAppIdKind id_kind)
 gchar *
 gs_app_to_string (GsApp *app)
 {
+       AsImage *im;
+       AsScreenshot *ss;
        GList *keys;
        GList *l;
        GString *str;
        GsAppPrivate *priv = app->priv;
-       GsScreenshot *ss;
        const gchar *tmp;
        guint i;
 
@@ -276,11 +277,12 @@ gs_app_to_string (GsApp *app)
                g_string_append_printf (str, "\tdescription:\t%s\n", priv->description);
        for (i = 0; i < priv->screenshots->len; i++) {
                ss = g_ptr_array_index (priv->screenshots, i);
-               tmp = gs_screenshot_get_caption (ss);
+               tmp = as_screenshot_get_caption (ss, NULL);
+               im = as_screenshot_get_image (ss, 0, 0);
+               if (im == NULL)
+                       continue;
                g_string_append_printf (str, "\tscreenshot-%02i:\t%s [%s]\n",
-                                       i, gs_screenshot_get_url (ss,
-                                                                 G_MAXUINT,
-                                                                 G_MAXUINT),
+                                       i, as_image_get_url (im),
                                        tmp != NULL ? tmp : "<none>");
        }
        for (i = 0; i < priv->sources->len; i++) {
@@ -1242,7 +1244,7 @@ gs_app_set_origin (GsApp *app, const gchar *origin)
  * gs_app_add_screenshot:
  */
 void
-gs_app_add_screenshot (GsApp *app, GsScreenshot *screenshot)
+gs_app_add_screenshot (GsApp *app, AsScreenshot *screenshot)
 {
        g_return_if_fail (GS_IS_APP (app));
        g_ptr_array_add (app->priv->screenshots, g_object_ref (screenshot));
diff --git a/src/gs-app.h b/src/gs-app.h
index fe73838..6ebebb2 100644
--- a/src/gs-app.h
+++ b/src/gs-app.h
@@ -24,8 +24,7 @@
 
 #include <glib-object.h>
 #include <gdk-pixbuf/gdk-pixbuf.h>
-
-#include "gs-screenshot.h"
+#include <appstream-glib.h>
 
 G_BEGIN_DECLS
 
@@ -208,7 +207,7 @@ void                 gs_app_set_origin              (GsApp          *app,
                                                 const gchar    *origin);
 GPtrArray      *gs_app_get_screenshots         (GsApp          *app);
 void            gs_app_add_screenshot          (GsApp          *app,
-                                                GsScreenshot   *screenshot);
+                                                AsScreenshot   *screenshot);
 const gchar    *gs_app_get_update_version      (GsApp          *app);
 const gchar    *gs_app_get_update_version_ui   (GsApp          *app);
 void            gs_app_set_update_version      (GsApp          *app,
diff --git a/src/gs-screenshot-image.c b/src/gs-screenshot-image.c
index c095588..1eeaaf5 100644
--- a/src/gs-screenshot-image.c
+++ b/src/gs-screenshot-image.c
@@ -29,7 +29,7 @@
 
 struct _GsScreenshotImagePrivate
 {
-       GsScreenshot    *screenshot;
+       AsScreenshot    *screenshot;
        GtkWidget       *stack;
        GtkWidget       *box_error;
        GtkWidget       *image1;
@@ -48,7 +48,7 @@ G_DEFINE_TYPE_WITH_PRIVATE (GsScreenshotImage, gs_screenshot_image, GTK_TYPE_BIN
 /**
  * gs_screenshot_image_get_screenshot:
  **/
-GsScreenshot *
+AsScreenshot *
 gs_screenshot_image_get_screenshot (GsScreenshotImage *ssimg)
 {
        GsScreenshotImagePrivate *priv;
@@ -90,10 +90,10 @@ gs_screenshot_image_set_error (GsScreenshotImage *ssimg, const gchar *message)
 }
 
 /**
- * gs_screenshot_show_image:
+ * as_screenshot_show_image:
  **/
 static void
-gs_screenshot_show_image (GsScreenshotImage *ssimg)
+as_screenshot_show_image (GsScreenshotImage *ssimg)
 {
        GdkPixbuf *pixbuf;
        GsScreenshotImagePrivate *priv;
@@ -162,7 +162,7 @@ gs_screenshot_image_complete_cb (SoupSession *session,
        }
 
        /* got image, so show */
-       gs_screenshot_show_image (ssimg);
+       as_screenshot_show_image (ssimg);
 out:
        g_object_unref (ssimg);
 }
@@ -184,12 +184,12 @@ gs_screenshot_image_set_cachedir (GsScreenshotImage *ssimg, const gchar *cachedi
  **/
 void
 gs_screenshot_image_set_screenshot (GsScreenshotImage *ssimg,
-                                   GsScreenshot *screenshot)
+                                   AsScreenshot *screenshot)
 {
        GsScreenshotImagePrivate *priv;
 
        g_return_if_fail (GS_IS_SCREENSHOT_IMAGE (ssimg));
-       g_return_if_fail (GS_IS_SCREENSHOT (screenshot));
+       g_return_if_fail (AS_IS_SCREENSHOT (screenshot));
 
        priv = gs_screenshot_image_get_instance_private (ssimg);
 
@@ -226,6 +226,7 @@ void
 gs_screenshot_image_load_async (GsScreenshotImage *ssimg,
                                GCancellable *cancellable)
 {
+       AsImage *im;
        GsScreenshotImagePrivate *priv;
        SoupMessage *msg = NULL;
        SoupURI *base_uri = NULL;
@@ -239,20 +240,21 @@ gs_screenshot_image_load_async (GsScreenshotImage *ssimg,
 
        priv = gs_screenshot_image_get_instance_private (ssimg);
 
-       g_return_if_fail (GS_IS_SCREENSHOT (priv->screenshot));
+       g_return_if_fail (AS_IS_SCREENSHOT (priv->screenshot));
        g_return_if_fail (priv->width != 0);
        g_return_if_fail (priv->height != 0);
 
        /* test if size specific cachdir exists */
-       url = gs_screenshot_get_url (priv->screenshot,
-                                    priv->width,
-                                    priv->height);
-       if (url == NULL) {
+       im = as_screenshot_get_image (priv->screenshot,
+                                     priv->width,
+                                     priv->height);
+       if (im == NULL) {
                /* TRANSLATORS: this is when we request a screenshot size that
                 * the generator did not create or the parser did not add */
                gs_screenshot_image_set_error (ssimg, _("Screenshot size not found"));
                goto out;
        }
+       url = as_image_get_url (im);
        basename = g_path_get_basename (url);
        sizedir = g_strdup_printf ("%ux%u", priv->width, priv->height);
        cachedir = g_build_filename (priv->cachedir,
@@ -271,7 +273,7 @@ gs_screenshot_image_load_async (GsScreenshotImage *ssimg,
        /* does local file already exist */
        priv->filename = g_build_filename (cachedir, basename, NULL);
        if (g_file_test (priv->filename, G_FILE_TEST_EXISTS)) {
-               gs_screenshot_show_image (ssimg);
+               as_screenshot_show_image (ssimg);
                goto out;
        }
 
diff --git a/src/gs-screenshot-image.h b/src/gs-screenshot-image.h
index d99bf17..b41175f 100644
--- a/src/gs-screenshot-image.h
+++ b/src/gs-screenshot-image.h
@@ -25,8 +25,7 @@
 
 #include <gtk/gtk.h>
 #include <libsoup/soup.h>
-
-#include "gs-screenshot.h"
+#include <appstream-glib.h>
 
 #define GS_TYPE_SCREENSHOT_IMAGE               (gs_screenshot_image_get_type())
 #define GS_SCREENSHOT_IMAGE(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj), GS_TYPE_SCREENSHOT_IMAGE, 
GsScreenshotImage))
@@ -55,9 +54,9 @@ struct _GsScreenshotImageClass
 GType           gs_screenshot_image_get_type           (void);
 GtkWidget      *gs_screenshot_image_new                (SoupSession            *session);
 
-GsScreenshot   *gs_screenshot_image_get_screenshot     (GsScreenshotImage      *ssimg);
+AsScreenshot   *gs_screenshot_image_get_screenshot     (GsScreenshotImage      *ssimg);
 void            gs_screenshot_image_set_screenshot     (GsScreenshotImage      *ssimg,
-                                                        GsScreenshot           *screenshot);
+                                                        AsScreenshot           *screenshot);
 const gchar    *gs_screenshot_image_get_cachedir       (GsScreenshotImage      *ssimg);
 void            gs_screenshot_image_set_cachedir       (GsScreenshotImage      *ssimg,
                                                         const gchar            *cachedir);
diff --git a/src/gs-shell-details.c b/src/gs-shell-details.c
index 3c8d184..3137f57 100644
--- a/src/gs-shell-details.c
+++ b/src/gs-shell-details.c
@@ -300,7 +300,7 @@ gs_shell_details_screenshot_selected_cb (GtkListBox *list,
        GsShellDetailsPrivate *priv = shell_details->priv;
        GsScreenshotImage *ssmain;
        GsScreenshotImage *ssthumb;
-       GsScreenshot *ss;
+       AsScreenshot *ss;
        GList *children;
 
        if (row == NULL)
@@ -323,7 +323,7 @@ static void
 gs_shell_details_refresh_screenshots (GsShellDetails *shell_details)
 {
        GPtrArray *screenshots;
-       GsScreenshot *ss;
+       AsScreenshot *ss;
        GsShellDetailsPrivate *priv = shell_details->priv;
        GtkWidget *label;
        GtkWidget *list;
@@ -339,7 +339,7 @@ gs_shell_details_refresh_screenshots (GsShellDetails *shell_details)
                        ss = g_ptr_array_index (screenshots, i);
 
                        /* set caption */
-                       label = gtk_label_new (gs_screenshot_get_caption (ss));
+                       label = gtk_label_new (as_screenshot_get_caption (ss, NULL));
                        g_object_set (label,
                                      "xalign", 0.0,
                                      NULL);
@@ -381,12 +381,12 @@ gs_shell_details_refresh_screenshots (GsShellDetails *shell_details)
        /* use a slightly larger screenshot if it's the only screenshot */
        if (screenshots->len == 1) {
                gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg),
-                                             GS_SCREENSHOT_SIZE_MAIN_ONLY_WIDTH,
-                                             GS_SCREENSHOT_SIZE_MAIN_ONLY_HEIGHT);
+                                             AS_IMAGE_LARGE_WIDTH,
+                                             AS_IMAGE_LARGE_HEIGHT);
        } else {
                gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg),
-                                             GS_SCREENSHOT_SIZE_MAIN_WIDTH,
-                                             GS_SCREENSHOT_SIZE_MAIN_HEIGHT);
+                                             AS_IMAGE_NORMAL_WIDTH,
+                                             AS_IMAGE_NORMAL_HEIGHT);
        }
        gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (ssimg), NULL);
        gtk_box_pack_start (GTK_BOX (priv->box_details_screenshot_main), ssimg, FALSE, FALSE, 0);
@@ -408,8 +408,8 @@ gs_shell_details_refresh_screenshots (GsShellDetails *shell_details)
                                                  g_get_user_cache_dir ());
                gs_screenshot_image_set_screenshot (GS_SCREENSHOT_IMAGE (ssimg), ss);
                gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg),
-                                             GS_SCREENSHOT_SIZE_THUMBNAIL_WIDTH,
-                                             GS_SCREENSHOT_SIZE_THUMBNAIL_HEIGHT);
+                                             AS_IMAGE_THUMBNAIL_WIDTH,
+                                             AS_IMAGE_THUMBNAIL_HEIGHT);
                gtk_style_context_add_class (gtk_widget_get_style_context (ssimg),
                                             "screenshot-image-thumb");
                gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (ssimg), NULL);
diff --git a/src/plugins/gs-plugin-appstream.c b/src/plugins/gs-plugin-appstream.c
index ae66a65..1278cbb 100644
--- a/src/plugins/gs-plugin-appstream.c
+++ b/src/plugins/gs-plugin-appstream.c
@@ -322,14 +322,10 @@ gs_plugin_refine_add_addons (GsPlugin *plugin, GsApp *app, AsApp *item)
 static void
 gs_plugin_refine_add_screenshots (GsApp *app, AsApp *item)
 {
-       AsImage *im;
        AsScreenshot *ss;
-       AsScreenshotKind ss_kind;
        GPtrArray *images_as;
        GPtrArray *screenshots_as;
-       GsScreenshot *screenshot;
        guint i;
-       guint j;
 
        /* do we have any to add */
        screenshots_as = as_app_get_screenshots (item);
@@ -348,25 +344,9 @@ gs_plugin_refine_add_screenshots (GsApp *app, AsApp *item)
                images_as = as_screenshot_get_images (ss);
                if (images_as->len == 0)
                        continue;
-               ss_kind = as_screenshot_get_kind (ss);
-               if (ss_kind == AS_SCREENSHOT_KIND_UNKNOWN)
+               if (as_screenshot_get_kind (ss) == AS_SCREENSHOT_KIND_UNKNOWN)
                        continue;
-
-               /* create a new application screenshot and add each image */
-               screenshot = gs_screenshot_new ();
-               gs_screenshot_set_is_default (screenshot,
-                                             ss_kind == AS_SCREENSHOT_KIND_DEFAULT);
-               gs_screenshot_set_caption (screenshot,
-                                          as_screenshot_get_caption (ss, NULL));
-               for (j = 0; j < images_as->len; j++) {
-                       im = g_ptr_array_index (images_as, j);
-                       gs_screenshot_add_image (screenshot,
-                                                as_image_get_url (im),
-                                                as_image_get_width (im),
-                                                as_image_get_height (im));
-               }
-               gs_app_add_screenshot (app, screenshot);
-               g_object_unref (screenshot);
+               gs_app_add_screenshot (app, ss);
        }
 }
 


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