[gnome-software] Use AppStream files for the popular, featured and extra category data



commit 8084ddadf8122bf7416428f5f498a7e55e92b949
Author: Richard Hughes <richard hughsie com>
Date:   Sun Mar 27 20:25:42 2016 +0100

    Use AppStream files for the popular, featured and extra category data
    
    This avoids having two more parsers and plugins for this functionality.

 Makefile.am                                |    1 +
 configure.ac                               |   13 +-
 contrib/gnome-software.spec.in             |    6 +-
 data/Makefile.am                           |   24 +-
 data/featured.ini.in                       |   70 ----
 data/modulesets/Makefile.am                |    8 -
 data/modulesets/core.xml                   |    6 -
 data/modulesets/featured.xml               |   90 -----
 data/modulesets/popular.xml                |   18 -
 data/modulesets/system.xml                 |   21 --
 data/org.gnome.Software-categories.xml     |  528 ++++++++++++++++++++++++++++
 data/org.gnome.Software-featured.xml       |  124 +++++++
 data/org.gnome.Software-popular.xml        |   96 +++++
 src/Makefile.am                            |    3 +-
 src/gs-feature-tile.c                      |    8 +-
 src/gs-plugin-loader.c                     |   45 ++-
 src/gs-self-test.c                         |   16 -
 src/plugins/Makefile.am                    |   33 --
 src/plugins/gs-appstream.c                 |   27 +-
 src/plugins/gs-moduleset.c                 |  430 ----------------------
 src/plugins/gs-moduleset.h                 |   65 ----
 src/plugins/gs-plugin-appstream.c          |   74 ++++-
 src/plugins/gs-plugin-hardcoded-featured.c |  108 ------
 src/plugins/gs-plugin-moduleset.c          |  354 -------------------
 src/plugins/gs-self-test.c                 |   83 -----
 src/plugins/moduleset-test.xml             |    4 -
 26 files changed, 899 insertions(+), 1356 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index cb21860..eeff83f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -40,6 +40,7 @@ EXTRA_DIST =                                          \
        README
 
 DISTCHECK_CONFIGURE_FLAGS =                            \
+       --disable-tests                                 \
        --disable-dogtail
 
 distclean-local:
diff --git a/configure.ac b/configure.ac
index 24ad5b3..d9387cd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -61,7 +61,7 @@ dnl ---------------------------------------------------------------------------
 dnl - Check library dependencies
 dnl ---------------------------------------------------------------------------
 PKG_CHECK_MODULES(GTK, gtk+-3.0 >= 3.18.2 gio-unix-2.0 gtkspell3-3.0)
-PKG_CHECK_MODULES(APPSTREAM, appstream-glib >= 0.5.11)
+PKG_CHECK_MODULES(APPSTREAM, appstream-glib >= 0.5.12)
 PKG_CHECK_MODULES(GDK_PIXBUF, gdk-pixbuf-2.0 >= 2.31.5)
 PKG_CHECK_MODULES(JSON_GLIB, json-glib-1.0 >= 1.1.1)
 PKG_CHECK_MODULES(SQLITE, sqlite3)
@@ -90,6 +90,12 @@ AC_ARG_ENABLE(dogtail,
               enable_dogtail=yes)
 AM_CONDITIONAL(ENABLE_DOGTAIL, test "$enable_dogtail" != no)
 
+AC_ARG_ENABLE(tests,
+              [AS_HELP_STRING([--enable-tests],
+                              [test using tests [default=yes]])],,
+              enable_tests=yes)
+AM_CONDITIONAL(ENABLE_TESTS, test "$enable_tests" != no)
+
 # PackageKit
 AC_ARG_ENABLE(packagekit,
               [AS_HELP_STRING([--enable-packagekit],
@@ -282,7 +288,7 @@ AC_DEFINE(HAVE_UBUNTU_REVIEWS,1,[Build Ubuntu reviews])
 
 # this refers to the gnome-software plugin API version
 # this is not in any way related to a package or soname version
-GS_PLUGIN_API_VERSION=9
+GS_PLUGIN_API_VERSION=10
 AC_SUBST(GS_PLUGIN_API_VERSION)
 AC_DEFINE_UNQUOTED([GS_PLUGIN_API_VERSION], "$GS_PLUGIN_API_VERSION", [the plugin API version])
 
@@ -295,9 +301,7 @@ AC_CONFIG_FILES([
 Makefile
 po/Makefile.in
 data/appdata/Makefile
-data/featured.ini
 data/Makefile
-data/modulesets/Makefile
 data/icons/Makefile
 data/icons/hicolor/Makefile
 data/icons/hicolor/16x16/Makefile
@@ -324,6 +328,7 @@ echo "
         cflags:                    ${CFLAGS}
         cppflags:                  ${CPPFLAGS}
         Dogtail:                   ${enable_dogtail}
+        Self tests:                ${enable_tests}
         PackageKit support:        ${have_packagekit}
         PolicyKit support:         ${have_polkit}
         Firmware support:          ${have_firmware}
diff --git a/contrib/gnome-software.spec.in b/contrib/gnome-software.spec.in
index 03e98b1..89e1ced 100644
--- a/contrib/gnome-software.spec.in
+++ b/contrib/gnome-software.spec.in
@@ -35,7 +35,7 @@ BuildRequires: json-glib-devel
 BuildRequires: rpm-devel
 
 # this is not a library version
-%define gs_plugin_version               9
+%define gs_plugin_version               10
 
 %description
 gnome-software is an application that makes it easy to add, remove
@@ -91,9 +91,9 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
 %dir %{_datadir}/gnome-software
 %{_datadir}/gnome-software/*.png
 %{_datadir}/appdata/*.appdata.xml
+%{_datadir}/app-info/xmls/*.xml.gz
 %{_mandir}/man1/gnome-software.1.gz
 %{_datadir}/icons/hicolor/*/apps/*
-%{_datadir}/gnome-software/featured.ini
 %{_datadir}/gnome-software/featured-*.svg
 %{_datadir}/gnome-software/featured-*.jpg
 %dir %{_libdir}/gs-plugins-%{gs_plugin_version}
@@ -104,8 +104,6 @@ glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
 %{_datadir}/gnome-shell/search-providers/org.gnome.Software-search-provider.ini
 %{_datadir}/glib-2.0/schemas/org.gnome.software.gschema.xml
 %{_datadir}/glib-2.0/schemas/org.gnome.software-fedora.gschema.override
-%dir %{_datadir}/gnome-software/modulesets.d
-%{_datadir}/gnome-software/modulesets.d/*.xml
 
 %changelog
 * #LONGDATE# Richard Hughes <richard hughsie com> #VERSION#-0.#BUILD##ALPHATAG#
diff --git a/data/Makefile.am b/data/Makefile.am
index cd2902f..e5a45f1 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,8 +1,17 @@
 SUBDIRS =                                              \
        appdata                                         \
-       modulesets                                      \
        icons
 
+appstreamdir = $(datadir)/app-info/xmls
+appstream_DATA = org.gnome.Software.xml.gz
+appstream_files =                                      \
+       org.gnome.Software-categories.xml               \
+       org.gnome.Software-featured.xml                 \
+       org.gnome.Software-popular.xml
+org.gnome.Software.xml.gz: $(appstream_files)
+       $(AM_V_GEN) appstream-util merge-appstream $@   \
+       $(srcdir)/org.gnome.Software-*.xml
+
 resourcesdir = $(datadir)/gnome-software
 dist_resources_DATA =                                  \
        featured-ardour.png                             \
@@ -21,8 +30,7 @@ dist_resources_DATA =                                 \
        featured-polari.svg                             \
        featured-transmission.png                       \
        featured-weather.png                            \
-       featured-weather-bg.png                         \
-       featured.ini
+       featured-weather-bg.png
 
 @GSETTINGS_RULES@
 gsettings_SCHEMAS = org.gnome.software.gschema.xml
@@ -39,9 +47,15 @@ install-sample-data:
        rm fedora-20-icons.tar.gz; \
        cd -
 
+BUILT_SOURCES =                                                \
+       org.gnome.Software.xml.gz
+
+CLEANFILES =                                           \
+       $(BUILT_SOURCES)
+
 EXTRA_DIST =                                           \
-       $(gsettings_SCHEMAS)                            \
-       featured.ini.in
+       $(appstream_files)                              \
+       $(gsettings_SCHEMAS)
 
 MAINTAINERCLEANFILES =                                 \
        *~                                              \
diff --git a/data/org.gnome.Software-categories.xml b/data/org.gnome.Software-categories.xml
new file mode 100644
index 0000000..f9916f1
--- /dev/null
+++ b/data/org.gnome.Software-categories.xml
@@ -0,0 +1,528 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<components version="0.9" origin="gnome-software">
+
+  <!-- Apps that show up as featured in their respective categories -->
+  <component type="desktop">
+    <id>amarok.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>ardour4.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>audacity.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>banshee.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>brasero.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>easytag.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gnome-music.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>rhythmbox.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>rosegarden.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>sound-juicer.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>anjuta.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>devassistant.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>devhelp.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>d-feet.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>eclipse.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gitg.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>glade.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>monodevelop.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>org.gnome.gedit.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>celestia.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>0ad.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>btanks.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>frozen-bubble.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gnome-chess.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gnome-mahjongg.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gnome-mines.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gnome-sudoku.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gnome-tetravex.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>iagno.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>lightsoff.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>neverball.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>openarena.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>quadrapassel.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>redeclipse.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>sol.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>supertuxkart.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>swell-foop.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>tremulous.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>wesnoth.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>xonotic.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>blender.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>darktable.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gimp.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>inkscape.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>libreoffice-draw.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>mypaint.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>org.gnome.font-viewer.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>scribus.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>shotwell.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>simple-scan.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>chromium-browser.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>epiphany.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>firefox.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>geary.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>mozilla-thunderbird.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>org.gnome.Polari.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>pidgin.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>transmission-gtk.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>vinagre.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>abiword.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>evolution.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>geary.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gnucash.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gnumeric.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gramps.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>libreoffice-calc.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>libreoffice-impress.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>libreoffice-writer.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>lyx.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>octave.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>saoimage.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>stellarium.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gnome-disks.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>gparted.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>org.gnome.Boxes.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>virt-manager.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>bijiben.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>org.gnome.clocks.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>org.gnome.Documents.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>org.gnome.Photos.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>workrave.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>openshot.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>org.gnome.Cheese.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>org.gnome.Totem.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>pitivi.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>vlc.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+  <component type="desktop">
+    <id>org.gnome.Builder.desktop</id>
+    <categories>
+      <category>featured</category>
+    </categories>
+  </component>
+
+</components>
diff --git a/data/org.gnome.Software-featured.xml b/data/org.gnome.Software-featured.xml
new file mode 100644
index 0000000..7fe9fe1
--- /dev/null
+++ b/data/org.gnome.Software-featured.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<components version="0.9" origin="gnome-software">
+
+  <!-- spotlighted applications -->
+  <component type="desktop">
+    <id>ardour2.desktop</id>
+    <metadata>
+      <value key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-ardour.png') 
30% 49% / 33% no-repeat, url('@datadir@/gnome-software/featured-ardour-bg.png') center center / 100% auto 
no-repeat, linear-gradient(to bottom, #373936, #60625e)</value>
+      <value key="GnomeSoftware::featured-stroke-color">#333333</value>
+      <value key="GnomeSoftware::featured-text-color">#ffffff</value>
+      <value key="GnomeSoftware::featured-text-shadow">0 1px 1px rgba(0,0,0,0.5)</value>
+    </metadata>
+  </component>
+
+  <component type="desktop">
+    <id>blender.desktop</id>
+    <metadata>
+      <value key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-blender.png') 
10% 40% / 50% auto no-repeat, -gtk-gradient (radial, center bottom, 0, center center, 1, from(#fcbf83), 
to(#c06105))</value>
+      <value key="GnomeSoftware::featured-stroke-color">#783d03</value>
+      <value key="GnomeSoftware::featured-text-color">#ffffff</value>
+      <value key="GnomeSoftware::featured-text-shadow">0 1px 1px rgba(0,0,0,0.5)</value>
+    </metadata>
+  </component>
+
+  <component type="desktop">
+    <id>gnome-chess.desktop</id>
+    <metadata>
+      <value key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-chess.png') 10% 
center / 40% auto no-repeat, linear-gradient(to bottom, #555753, #888a85)</value>
+      <value key="GnomeSoftware::featured-stroke-color">#2e3436</value>
+      <value key="GnomeSoftware::featured-text-color">#ffffff</value>
+      <value key="GnomeSoftware::featured-text-shadow">0 1px 1px rgba(0,0,0,0.5)</value>
+    </metadata>
+  </component>
+
+  <component type="desktop">
+    <id>firefox.desktop</id>
+    <metadata>
+      <value key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-firefox.png') 
10% center / 40% auto no-repeat, linear-gradient(to bottom, #d3d7cf, #eeeeec)</value>
+      <value key="GnomeSoftware::featured-stroke-color">#babdb6</value>
+      <value key="GnomeSoftware::featured-text-color">#888a85</value>
+      <value key="GnomeSoftware::featured-text-shadow">0 1px 1px rgba(255,255,255,0.7)</value>
+    </metadata>
+  </component>
+
+  <component type="desktop">
+    <id>gimp.desktop</id>
+    <metadata>
+      <value key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-gimp.png') left 
50% / 50% auto no-repeat, linear-gradient(to bottom, #8ac674, #cbddc3)</value>
+      <value key="GnomeSoftware::featured-stroke-color">#2a6c10</value>
+      <value key="GnomeSoftware::featured-text-color">#333</value>
+      <value key="GnomeSoftware::featured-text-shadow">0 1px 1px rgba(255,255,255,0.7)</value>
+    </metadata>
+  </component>
+
+  <component type="desktop">
+    <id>inkscape.desktop</id>
+    <metadata>
+      <value key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-inkscape.png') 
20% / 60% auto no-repeat, linear-gradient(to bottom, #ccd6c3, #a7b797)</value>
+      <value key="GnomeSoftware::featured-stroke-color">#819a6b</value>
+      <value key="GnomeSoftware::featured-text-color">#ffffff</value>
+      <value key="GnomeSoftware::featured-text-shadow">0 1px 3px rgba(0,0,0,0.9),0 1px 2px 
rgba(0,0,0,0.7)</value>
+    </metadata>
+  </component>
+
+  <component type="desktop">
+    <id>mypaint.desktop</id>
+    <metadata>
+      <value key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-mypaint.png') 
left 67% / 50% auto no-repeat, linear-gradient(to bottom, #8fa5d9, #d8e0ef)</value>
+      <value key="GnomeSoftware::featured-stroke-color">#4c52aa</value>
+      <value key="GnomeSoftware::featured-text-color">#362d89</value>
+    </metadata>
+  </component>
+
+  <component type="desktop">
+    <id>org.gnome.Polari.desktop</id>
+    <metadata>
+      <value key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-polari.svg') 
70% 80% / 120% auto no-repeat, #43a570</value>
+      <value key="GnomeSoftware::featured-stroke-color">#4e9a06</value>
+      <value key="GnomeSoftware::featured-text-color">#a8c74f</value>
+      <value key="GnomeSoftware::featured-text-shadow">0 2px #418e64</value>
+    </metadata>
+  </component>
+
+  <component type="desktop">
+    <id>org.gnome.Weather.Application.desktop</id>
+    <metadata>
+      <value key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-weather.png') 
left 80% / 50% auto no-repeat, url('@datadir@/gnome-software/featured-weather-bg.png'), linear-gradient(to 
bottom, #25486d, #6693ce)</value>
+      <value key="GnomeSoftware::featured-stroke-color">#d8e0ef</value>
+      <value key="GnomeSoftware::featured-text-color">#ffffff</value>
+      <value key="GnomeSoftware::featured-text-shadow">0 1px 1px rgba(0,0,0,0.5)</value>
+    </metadata>
+  </component>
+
+  <component type="desktop">
+    <id>transmission-gtk.desktop</id>
+    <metadata>
+      <value 
key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-transmission.png') 10% 20% / 
427px auto no-repeat, -gtk-gradient (radial, center bottom, 0, center center, 0.8, from(#ffc124), 
to(#b75200))</value>
+      <value key="GnomeSoftware::featured-stroke-color">#a40000</value>
+      <value key="GnomeSoftware::featured-text-color">#ffffff</value>
+      <value key="GnomeSoftware::featured-text-shadow">0 1px 1px rgba(0,0,0,0.5)</value>
+    </metadata>
+  </component>
+
+  <component type="desktop">
+    <id>org.gnome.Builder.desktop</id>
+    <metadata>
+      <value key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-builder.png') 
left center / 100% auto no-repeat, url('@datadir@/gnome-software/featured-builder-bg.jpg') center / cover 
no-repeat</value>
+      <value key="GnomeSoftware::featured-stroke-color">#000000</value>
+      <value key="GnomeSoftware::featured-text-color">#ffffff</value>
+      <value key="GnomeSoftware::featured-text-shadow">0 1px 1px rgba(0,0,0,0.5)</value>
+    </metadata>
+  </component>
+
+  <component type="desktop">
+    <id>org.gnome.Maps.desktop</id>
+    <metadata>
+      <value key="GnomeSoftware::featured-background">url('@datadir@/gnome-software/featured-maps.png') left 
-10px / 352px auto no-repeat, url('@datadir@/gnome-software/featured-maps-bg.png') bottom center / contain 
no-repeat</value>
+      <value key="GnomeSoftware::featured-stroke-color">#ff0000</value>
+      <value key="GnomeSoftware::featured-text-color">#000000</value>
+      <value key="GnomeSoftware::featured-text-shadow">0 1px 1px rgba(255,255,255,0.5)</value>
+    </metadata>
+  </component>
+
+</components>
diff --git a/data/org.gnome.Software-popular.xml b/data/org.gnome.Software-popular.xml
new file mode 100644
index 0000000..ca80015
--- /dev/null
+++ b/data/org.gnome.Software-popular.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<components version="0.9" origin="gnome-software">
+
+  <!-- Apps for the "Editor's Picks" list -->
+  <component type="desktop">
+    <id>bijiben.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>calibre-gui.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>geary.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>gnucash.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>gtg.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>inkscape.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>mozilla-thunderbird.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>musique.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>org.gnome.Maps.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>pdfmod.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>scribus.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>shutter.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>simple-scan.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>stellarium.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+  <component type="desktop">
+    <id>transmission-gtk.desktop</id>
+    <kudos>
+      <kudo>GnomeSoftware::popular</kudo>
+    </kudos>
+  </component>
+
+</components>
diff --git a/src/Makefile.am b/src/Makefile.am
index 8b8e127..d18bc7b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -11,7 +11,6 @@ AM_CPPFLAGS =                                         \
        $(POLKIT_CFLAGS)                                \
        -DG_LOG_DOMAIN=\"Gs\"                           \
        -DI_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE  \
-       -DGS_MODULESETDIR=\"$(datadir)/gnome-software/modulesets.d\" \
        -DLIBDIR=\"$(libdir)\"                          \
        -DBINDIR=\"$(bindir)\"                          \
        -DDATADIR=\"$(datadir)\"                        \
@@ -279,6 +278,7 @@ TESTS_ENVIRONMENT =                                         \
        --leak-check=full                                       \
        --show-possibly-lost=no
 
+if ENABLE_TESTS
 check_PROGRAMS =                                               \
        gs-self-test
 
@@ -304,6 +304,7 @@ gs_self_test_LDADD =                                                \
 gs_self_test_CFLAGS = $(WARN_CFLAGS)
 
 TESTS = gs-self-test
+endif
 
 EXTRA_DIST =                                           \
        shell-search-provider-dbus-interfaces.xml       \
diff --git a/src/gs-feature-tile.c b/src/gs-feature-tile.c
index 96f7120..3ea7254 100644
--- a/src/gs-feature-tile.c
+++ b/src/gs-feature-tile.c
@@ -117,7 +117,7 @@ gs_feature_tile_set_app (GsFeatureTile *tile, GsApp *app)
        gtk_label_set_label (GTK_LABEL (tile->subtitle), gs_app_get_summary (app));
 
        /* check the app has the featured data */
-       text_color = gs_app_get_metadata_item (app, "Featured::text-color");
+       text_color = gs_app_get_metadata_item (app, "GnomeSoftware::featured-text-color");
        if (text_color == NULL) {
                g_autofree gchar *tmp = NULL;
                tmp = gs_app_to_string (app);
@@ -125,9 +125,9 @@ gs_feature_tile_set_app (GsFeatureTile *tile, GsApp *app)
                           gs_app_get_id (app), tmp);
                return;
        }
-       background = gs_app_get_metadata_item (app, "Featured::background");
-       stroke_color = gs_app_get_metadata_item (app, "Featured::stroke-color");
-       text_shadow = gs_app_get_metadata_item (app, "Featured::text-shadow");
+       background = gs_app_get_metadata_item (app, "GnomeSoftware::featured-background");
+       stroke_color = gs_app_get_metadata_item (app, "GnomeSoftware::featured-stroke-color");
+       text_shadow = gs_app_get_metadata_item (app, "GnomeSoftware::featured-text-shadow");
 
        data = g_string_sized_new (1024);
        g_string_append (data, ".featured-tile {\n");
diff --git a/src/gs-plugin-loader.c b/src/gs-plugin-loader.c
index 4176e10..c7ec345 100644
--- a/src/gs-plugin-loader.c
+++ b/src/gs-plugin-loader.c
@@ -1183,17 +1183,35 @@ gs_plugin_loader_get_popular_thread_cb (GTask *task,
 {
        GsPluginLoader *plugin_loader = GS_PLUGIN_LOADER (object);
        GsPluginLoaderAsyncState *state = (GsPluginLoaderAsyncState *) task_data;
+       GsPluginLoaderPrivate *priv = gs_plugin_loader_get_instance_private (plugin_loader);
        GError *error = NULL;
-
-       /* do things that would block */
-       state->list = gs_plugin_loader_run_results (plugin_loader,
-                                                   "gs_plugin_add_popular",
-                                                   state->flags,
-                                                   cancellable,
-                                                   &error);
-       if (error != NULL) {
-               g_task_return_error (task, error);
-               return;
+       g_auto(GStrv) apps = NULL;
+
+       /* debugging only */
+       if (g_getenv ("GNOME_SOFTWARE_POPULAR"))
+               apps = g_strsplit (g_getenv ("GNOME_SOFTWARE_POPULAR"), ",", 0);
+
+       /* are we using a corporate build */
+       if (apps == NULL)
+               apps = g_settings_get_strv (priv->settings, "popular-overrides");
+       if (apps != NULL && g_strv_length (apps) > 0) {
+               guint i;
+               for (i = 0; apps[i] != NULL; i++) {
+                       g_autoptr(GsApp) app = gs_app_new (apps[i]);
+                       gs_app_add_quirk (app, AS_APP_QUIRK_MATCH_ANY_PREFIX);
+                       gs_plugin_add_app (&state->list, app);
+               }
+       } else {
+               /* do things that would block */
+               state->list = gs_plugin_loader_run_results (plugin_loader,
+                                                           "gs_plugin_add_popular",
+                                                           state->flags,
+                                                           cancellable,
+                                                           &error);
+               if (error != NULL) {
+                       g_task_return_error (task, error);
+                       return;
+               }
        }
 
        /* filter package list */
@@ -1997,6 +2015,13 @@ gs_plugin_loader_get_categories_thread_cb (GTask *task,
                        /* this is probably valid... */
                        gs_category_set_size (child, gs_category_get_size (parent));
                }
+               if (gs_category_find_child (parent, "featured") == NULL) {
+                       g_autoptr(GsCategory) child = NULL;
+                       child = gs_category_new (parent, "featured", NULL);
+                       gs_category_add_subcategory (parent, child);
+                       /* this is probably valid... */
+                       gs_category_set_size (child, 5);
+               }
        }
 
        /* sort by name */
diff --git a/src/gs-self-test.c b/src/gs-self-test.c
index 41ec61b..a246c94 100644
--- a/src/gs-self-test.c
+++ b/src/gs-self-test.c
@@ -334,10 +334,6 @@ gs_plugin_loader_func (void)
        GsApp *app;
        g_autoptr(GsPluginLoader) loader = NULL;
 
-       /* not avaiable in make distcheck */
-       if (!g_file_test (GS_MODULESETDIR, G_FILE_TEST_EXISTS))
-               return;
-
        loader = gs_plugin_loader_new ();
        g_assert (GS_IS_PLUGIN_LOADER (loader));
        g_signal_connect (loader, "status-changed",
@@ -476,10 +472,6 @@ gs_plugin_loader_refine_func (void)
        g_autoptr(GsApp) app = NULL;
        g_autoptr(GsPluginLoader) loader = NULL;
 
-       /* not avaiable in make distcheck */
-       if (!g_file_test (GS_MODULESETDIR, G_FILE_TEST_EXISTS))
-               return;
-
        /* load the plugins */
        loader = gs_plugin_loader_new ();
        gs_plugin_loader_set_location (loader, "./plugins/.libs");
@@ -525,10 +517,6 @@ gs_plugin_loader_empty_func (void)
        g_autoptr(GsAppList) list = NULL;
        g_autoptr(GsPluginLoader) loader = NULL;
 
-       /* not avaiable in make distcheck */
-       if (!g_file_test (GS_MODULESETDIR, G_FILE_TEST_EXISTS))
-               return;
-
        /* load the plugins */
        loader = gs_plugin_loader_new ();
        gs_plugin_loader_set_location (loader, "./plugins/.libs");
@@ -607,10 +595,6 @@ gs_plugin_loader_webapps_func (void)
        g_autoptr(GsApp) app = NULL;
        g_autoptr(GsPluginLoader) loader = NULL;
 
-       /* not avaiable in make distcheck */
-       if (!g_file_test (GS_MODULESETDIR, G_FILE_TEST_EXISTS))
-               return;
-
        /* load the plugins */
        loader = gs_plugin_loader_new ();
        gs_plugin_loader_set_location (loader, "./plugins/.libs");
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
index d5b63b5..32d2605 100644
--- a/src/plugins/Makefile.am
+++ b/src/plugins/Makefile.am
@@ -17,7 +17,6 @@ AM_CPPFLAGS =                                         \
        $(RPM_CFLAGS)                                   \
        -DBINDIR=\"$(bindir)\"                          \
        -DDATADIR=\"$(datadir)\"                        \
-       -DGS_MODULESETDIR=\"$(datadir)/gnome-software/modulesets.d\" \
        -DG_LOG_DOMAIN=\"GsPlugin\"                     \
        -DLIBDIR=\""$(libdir)"\"                        \
        -DLOCALSTATEDIR=\""$(localstatedir)"\"          \
@@ -33,9 +32,7 @@ plugindir = $(libdir)/gs-plugins-${GS_PLUGIN_API_VERSION}
 plugin_LTLIBRARIES =                                   \
        libgs_plugin_appstream.la                       \
        libgs_plugin_dummy.la                           \
-       libgs_plugin_hardcoded-featured.la              \
        libgs_plugin_hardcoded-blacklist.la             \
-       libgs_plugin_moduleset.la                       \
        libgs_plugin_menu-spec-categories.la            \
        libgs_plugin_menu-spec-refine.la                \
        libgs_plugin_fedora_distro_upgrades.la          \
@@ -184,14 +181,6 @@ libgs_plugin_steam_la_LDFLAGS = -module -avoid-version
 libgs_plugin_steam_la_CFLAGS = $(GS_PLUGIN_CFLAGS) $(WARN_CFLAGS)
 endif
 
-libgs_plugin_moduleset_la_SOURCES =                    \
-       gs-moduleset.c                                  \
-       gs-moduleset.h                                  \
-       gs-plugin-moduleset.c
-libgs_plugin_moduleset_la_LIBADD = $(GS_PLUGIN_LIBS)
-libgs_plugin_moduleset_la_LDFLAGS = -module -avoid-version
-libgs_plugin_moduleset_la_CFLAGS = $(GS_PLUGIN_CFLAGS) $(WARN_CFLAGS)
-
 libgs_plugin_menu_spec_categories_la_SOURCES =         \
        gs-plugin-menu-spec-categories.c                \
        menu-spec-common.c                              \
@@ -208,11 +197,6 @@ libgs_plugin_menu_spec_refine_la_LIBADD = $(GS_PLUGIN_LIBS)
 libgs_plugin_menu_spec_refine_la_LDFLAGS = -module -avoid-version
 libgs_plugin_menu_spec_refine_la_CFLAGS = $(GS_PLUGIN_CFLAGS) $(WARN_CFLAGS)
 
-libgs_plugin_hardcoded_featured_la_SOURCES = gs-plugin-hardcoded-featured.c
-libgs_plugin_hardcoded_featured_la_LIBADD = $(GS_PLUGIN_LIBS)
-libgs_plugin_hardcoded_featured_la_LDFLAGS = -module -avoid-version
-libgs_plugin_hardcoded_featured_la_CFLAGS = $(GS_PLUGIN_CFLAGS) $(WARN_CFLAGS)
-
 libgs_plugin_hardcoded_blacklist_la_SOURCES = gs-plugin-hardcoded-blacklist.c
 libgs_plugin_hardcoded_blacklist_la_LIBADD = $(GS_PLUGIN_LIBS)
 libgs_plugin_hardcoded_blacklist_la_LDFLAGS = -module -avoid-version
@@ -282,21 +266,4 @@ libgs_plugin_packagekit_proxy_la_LIBADD = $(GS_PLUGIN_LIBS)
 libgs_plugin_packagekit_proxy_la_LDFLAGS = -module -avoid-version
 libgs_plugin_packagekit_proxy_la_CFLAGS = $(GS_PLUGIN_CFLAGS) $(WARN_CFLAGS)
 
-check_PROGRAMS =                                       \
-       gs-self-test
-
-gs_self_test_SOURCES =                                 \
-       gs-moduleset.c                                  \
-       gs-self-test.c
-
-gs_self_test_LDADD =                                   \
-       $(GLIB_LIBS)                                    \
-       $(GTK_LIBS)
-
-gs_self_test_CFLAGS = $(WARN_CFLAGS)
-
-TESTS = gs-self-test
-
-EXTRA_DIST = moduleset-test.xml
-
 -include $(top_srcdir)/git.mk
diff --git a/src/plugins/gs-appstream.c b/src/plugins/gs-appstream.c
index 146b819..05fca84 100644
--- a/src/plugins/gs-appstream.c
+++ b/src/plugins/gs-appstream.c
@@ -29,25 +29,6 @@
 #define        GS_APPSTREAM_MAX_SCREENSHOTS    5
 
 /**
- * _as_app_has_compulsory_for_desktop:
- */
-static gboolean
-_as_app_has_compulsory_for_desktop (AsApp *app, const gchar *compulsory_for_desktop)
-{
-       GPtrArray *compulsory_for_desktops;
-       const gchar *tmp;
-       guint i;
-
-       compulsory_for_desktops = as_app_get_compulsory_for_desktops (app);
-       for (i = 0; i < compulsory_for_desktops->len; i++) {
-               tmp = g_ptr_array_index (compulsory_for_desktops, i);
-               if (g_strcmp0 (tmp, compulsory_for_desktop) == 0)
-                       return TRUE;
-       }
-       return FALSE;
-}
-
-/**
  * gs_refine_item_pixbuf:
  */
 static void
@@ -489,7 +470,7 @@ gs_appstream_refine_app (GsPlugin *plugin,
                gs_app_set_project_group (app, as_app_get_project_group (item));
 
        /* this is a core application for the desktop and cannot be removed */
-       if (_as_app_has_compulsory_for_desktop (item, "GNOME") &&
+       if (as_app_has_compulsory_for_desktop (item, "GNOME") &&
            gs_app_get_kind (app) == AS_APP_KIND_DESKTOP)
                gs_app_add_quirk (app, AS_APP_QUIRK_COMPULSORY);
 
@@ -523,6 +504,12 @@ gs_appstream_refine_app (GsPlugin *plugin,
        if (as_app_get_language (item, plugin->locale) > 50)
                gs_app_add_kudo (app, GS_APP_KUDO_MY_LANGUAGE);
 
+       /* add a kudo to featured and popular apps */
+       if (as_app_has_kudo (item, "GnomeSoftware::popular"))
+               gs_app_add_kudo (app, GS_APP_KUDO_FEATURED_RECOMMENDED);
+       if (as_app_has_category (item, "featured"))
+               gs_app_add_kudo (app, GS_APP_KUDO_FEATURED_RECOMMENDED);
+
        /* add new-style kudos */
        kudos = as_app_get_kudos (item);
        for (i = 0; i < kudos->len; i++) {
diff --git a/src/plugins/gs-plugin-appstream.c b/src/plugins/gs-plugin-appstream.c
index c287986..ea90dd0 100644
--- a/src/plugins/gs-plugin-appstream.c
+++ b/src/plugins/gs-plugin-appstream.c
@@ -265,14 +265,12 @@ gs_plugin_refine_from_id (GsPlugin *plugin,
        if (id == NULL)
                return TRUE;
        item = as_store_get_app_by_id (plugin->priv->store, id);
-#if AS_CHECK_VERSION(0,5,12)
        if (item == NULL &&
            gs_app_has_quirk (app, AS_APP_QUIRK_MATCH_ANY_PREFIX)) {
                item = as_store_get_app_by_id_ignore_prefix (plugin->priv->store, id);
                if (item != NULL)
                        g_debug ("found %s for wildcard %s", as_app_get_id (item), id);
        }
-#endif
        if (item == NULL)
                return TRUE;
 
@@ -630,3 +628,75 @@ gs_plugin_add_categories (GsPlugin *plugin,
        }
        return TRUE;
 }
+
+/**
+ * gs_plugin_add_popular:
+ */
+gboolean
+gs_plugin_add_popular (GsPlugin *plugin,
+                      GList **list,
+                      GCancellable *cancellable,
+                      GError **error)
+{
+       AsApp *item;
+       GPtrArray *array;
+       guint i;
+       g_autoptr(AsProfileTask) ptask = NULL;
+       g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&plugin->priv->store_mutex);
+
+       /* load XML files */
+       if (!gs_plugin_appstream_startup (plugin, error))
+               return FALSE;
+
+       /* find out how many packages are in each category */
+       ptask = as_profile_start_literal (plugin->profile, "appstream::add-popular");
+       array = as_store_get_apps (plugin->priv->store);
+       for (i = 0; i < array->len; i++) {
+               g_autoptr(GsApp) app = NULL;
+               item = g_ptr_array_index (array, i);
+               if (as_app_get_id (item) == NULL)
+                       continue;
+               if (!as_app_has_kudo (item, "GnomeSoftware::popular"))
+                       continue;
+               app = gs_app_new (as_app_get_id_no_prefix (item));
+               gs_app_add_quirk (app, AS_APP_QUIRK_MATCH_ANY_PREFIX);
+               gs_plugin_add_app (list, app);
+       }
+       return TRUE;
+}
+
+/**
+ * gs_plugin_add_featured:
+ */
+gboolean
+gs_plugin_add_featured (GsPlugin *plugin,
+                       GList **list,
+                       GCancellable *cancellable,
+                       GError **error)
+{
+       AsApp *item;
+       GPtrArray *array;
+       guint i;
+       g_autoptr(AsProfileTask) ptask = NULL;
+       g_autoptr(GMutexLocker) locker = g_mutex_locker_new (&plugin->priv->store_mutex);
+
+       /* load XML files */
+       if (!gs_plugin_appstream_startup (plugin, error))
+               return FALSE;
+
+       /* find out how many packages are in each category */
+       ptask = as_profile_start_literal (plugin->profile, "appstream::add-featured");
+       array = as_store_get_apps (plugin->priv->store);
+       for (i = 0; i < array->len; i++) {
+               g_autoptr(GsApp) app = NULL;
+               item = g_ptr_array_index (array, i);
+               if (as_app_get_id (item) == NULL)
+                       continue;
+               if (as_app_get_metadata_item (item, "GnomeSoftware::featured-background") == NULL)
+                       continue;
+               app = gs_app_new (as_app_get_id_no_prefix (item));
+               gs_app_add_quirk (app, AS_APP_QUIRK_MATCH_ANY_PREFIX);
+               gs_plugin_add_app (list, app);
+       }
+       return TRUE;
+}



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