[gnome-software] Support getting cached content from /var/cache and /usr/share



commit bf7f61c5a4719621102c826e071fd2b53f707292
Author: Richard Hughes <richard hughsie com>
Date:   Wed Apr 27 15:39:45 2016 +0100

    Support getting cached content from /var/cache and /usr/share
    
    We only return a system cache filename if we don't need it to be writeable.

 src/Makefile.am                                |    1 +
 src/gs-screenshot-image.c                      |   41 +++++++++++++-------
 src/gs-utils.c                                 |   48 +++++++++++++++++++++---
 src/gs-utils.h                                 |   10 ++++-
 src/plugins/gs-appstream.c                     |    7 ++-
 src/plugins/gs-plugin-fedora-distro-upgrades.c |   11 +++--
 src/plugins/gs-plugin-fwupd.c                  |   43 ++++++++++++---------
 src/plugins/gs-plugin-odrs.c                   |   36 +++++++++++-------
 src/plugins/gs-plugin-shell-extensions.c       |    9 ++--
 src/plugins/gs-plugin-steam.c                  |   25 ++++++++----
 10 files changed, 156 insertions(+), 75 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index dbfc813..52d460c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -16,6 +16,7 @@ AM_CPPFLAGS =                                         \
        -DDATADIR=\"$(datadir)\"                        \
        -DVERSION="\"$(VERSION)\""                      \
        -DLOCALEDIR=\""$(localedir)"\"                  \
+       -DLOCALSTATEDIR=\""$(localstatedir)"\"          \
        -DTESTDATADIR=\""$(top_srcdir)/data"\"          \
        -DGS_DATA=\"$(pkgdatadir)\"
 
diff --git a/src/gs-screenshot-image.c b/src/gs-screenshot-image.c
index b72dda1..5966645 100644
--- a/src/gs-screenshot-image.c
+++ b/src/gs-screenshot-image.c
@@ -347,11 +347,9 @@ gs_screenshot_image_load_async (GsScreenshotImage *ssimg,
        AsImage *im = NULL;
        SoupURI *base_uri = NULL;
        const gchar *url;
-       gint rc;
        g_autofree gchar *basename = NULL;
-       g_autofree gchar *cachedir_full = NULL;
-       g_autofree gchar *cachedir = NULL;
-       g_autofree gchar *cachedir_thumb = NULL;
+       g_autofree gchar *cache_kind = NULL;
+       g_autofree gchar *cachefn_thumb = NULL;
        g_autofree gchar *sizedir = NULL;
 
        g_return_if_fail (GS_IS_SCREENSHOT_IMAGE (ssimg));
@@ -396,10 +394,12 @@ gs_screenshot_image_load_async (GsScreenshotImage *ssimg,
        } else {
                sizedir = g_strdup_printf ("%ux%u", ssimg->width * ssimg->scale, ssimg->height * 
ssimg->scale);
        }
-       cachedir = gs_utils_get_cachedir ("screenshots", NULL);
-       cachedir_full = g_build_filename (cachedir, sizedir, NULL);
-       rc = g_mkdir_with_parents (cachedir_full, 0700);
-       if (rc != 0) {
+       cache_kind = g_build_filename ("screenshots", sizedir, NULL);
+       ssimg->filename = gs_utils_get_cache_filename (cache_kind,
+                                                      basename,
+                                                      GS_UTILS_CACHE_FLAG_NONE,
+                                                      NULL);
+       if (ssimg->filename == NULL) {
                /* TRANSLATORS: this is when we try create the cache directory
                 * but we were out of space or permission was denied */
                gs_screenshot_image_set_error (ssimg, _("Could not create cache"));
@@ -407,7 +407,6 @@ gs_screenshot_image_load_async (GsScreenshotImage *ssimg,
        }
 
        /* does local file already exist */
-       ssimg->filename = g_build_filename (cachedir_full, basename, NULL);
        if (g_file_test (ssimg->filename, G_FILE_TEST_EXISTS)) {
                as_screenshot_show_image (ssimg);
                return;
@@ -416,14 +415,26 @@ gs_screenshot_image_load_async (GsScreenshotImage *ssimg,
        /* can we load a blurred smaller version of this straight away */
        if (ssimg->width > AS_IMAGE_THUMBNAIL_WIDTH &&
            ssimg->height > AS_IMAGE_THUMBNAIL_HEIGHT) {
-               cachedir_thumb = g_build_filename (cachedir,
-                                                  "112x63",
-                                                  basename,
-                                                  NULL);
-               if (g_file_test (cachedir_thumb, G_FILE_TEST_EXISTS))
-                       gs_screenshot_image_show_blurred (ssimg, cachedir_thumb);
+               g_autofree gchar *cache_kind_thumb = NULL;
+               cache_kind_thumb = g_build_filename ("screenshots", "112x63", NULL);
+               cachefn_thumb = gs_utils_get_cache_filename (cache_kind_thumb,
+                                                            basename,
+                                                            GS_UTILS_CACHE_FLAG_NONE,
+                                                            NULL);
+               if (cachefn_thumb == NULL)
+                       return;
+               if (g_file_test (cachefn_thumb, G_FILE_TEST_EXISTS))
+                       gs_screenshot_image_show_blurred (ssimg, cachefn_thumb);
        }
 
+       /* re-request the cache filename, which might be different as it needs
+        * to be writable this time */
+       g_free (ssimg->filename);
+       ssimg->filename = gs_utils_get_cache_filename (cache_kind,
+                                                      basename,
+                                                      GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                                      NULL);
+
        /* download file */
        g_debug ("downloading %s to %s", url, ssimg->filename);
        base_uri = soup_uri_new (url);
diff --git a/src/gs-utils.c b/src/gs-utils.c
index 2f7d050..977f183 100644
--- a/src/gs-utils.c
+++ b/src/gs-utils.c
@@ -480,27 +480,63 @@ gs_user_agent (void)
 }
 
 /**
- * gs_utils_get_cachedir:
+ * gs_utils_get_cache_filename:
+ *
+ * Returns a filename that points into the cache. This may be per-system
+ * or per-user, the latter being more likely when %GS_UTILS_CACHE_FLAG_WRITEABLE
+ * is specified in @flags.
+ *
+ * Returns: The full path and filename, which may or may not exist.
  **/
 gchar *
-gs_utils_get_cachedir (const gchar *kind, GError **error)
+gs_utils_get_cache_filename (const gchar *kind,
+                            const gchar *basename,
+                            GsUtilsCacheFlags flags, /* ignored */
+                            GError **error)
 {
-       g_autofree gchar *vername = NULL;
        g_autofree gchar *cachedir = NULL;
+       g_autofree gchar *vername = NULL;
        g_auto(GStrv) version = g_strsplit (VERSION, ".", 3);
        g_autoptr(GFile) cachedir_file = NULL;
 
+       /* not writable, so try the system cache first */
+       if ((flags & GS_UTILS_CACHE_FLAG_WRITEABLE) == 0) {
+               g_autofree gchar *cachefn = NULL;
+               cachefn = g_build_filename (LOCALSTATEDIR,
+                                           "cache",
+                                           "gnome-software",
+                                           basename,
+                                           NULL);
+               if (g_file_test (cachefn, G_FILE_TEST_EXISTS))
+                       return g_steal_pointer (&cachefn);
+       }
+
+       /* not writable, so try the system cache first */
+       if ((flags & GS_UTILS_CACHE_FLAG_WRITEABLE) == 0) {
+               g_autofree gchar *cachefn = NULL;
+               cachefn = g_build_filename (DATADIR,
+                                           "gnome-software",
+                                           "cache",
+                                           kind,
+                                           basename,
+                                           NULL);
+               if (g_file_test (cachefn, G_FILE_TEST_EXISTS))
+                       return g_steal_pointer (&cachefn);
+       }
+
        /* create the cachedir in a per-release location, creating
         * if it does not already exist */
        vername = g_strdup_printf ("%s.%s", version[0], version[1]);
        cachedir = g_build_filename (g_get_user_cache_dir (),
-                                     "gnome-software", vername, kind, NULL);
+                                    "gnome-software",
+                                    vername,
+                                    kind,
+                                    NULL);
        cachedir_file = g_file_new_for_path (cachedir);
        if (!g_file_query_exists (cachedir_file, NULL) &&
            !g_file_make_directory_with_parents (cachedir_file, NULL, error))
                return NULL;
-
-       return g_steal_pointer (&cachedir);
+       return g_build_filename (cachedir, basename, NULL);
 }
 
 /**
diff --git a/src/gs-utils.h b/src/gs-utils.h
index 2524d44..828a90b 100644
--- a/src/gs-utils.h
+++ b/src/gs-utils.h
@@ -30,6 +30,12 @@
 
 G_BEGIN_DECLS
 
+typedef enum {
+       GS_UTILS_CACHE_FLAG_NONE        = 0,
+       GS_UTILS_CACHE_FLAG_WRITEABLE   = 1 << 0,
+       GS_UTILS_CACHE_FLAG_LAST
+} GsUtilsCacheFlags;
+
 void    gs_start_spinner               (GtkSpinner     *spinner);
 void    gs_stop_spinner                (GtkSpinner     *spinner);
 void    gs_container_remove_all        (GtkContainer   *container);
@@ -61,7 +67,9 @@ void  gs_image_set_from_pixbuf                (GtkImage               *image,
                                                 const GdkPixbuf        *pixbuf);
 const gchar     *gs_user_agent                 (void);
 
-gchar          *gs_utils_get_cachedir          (const gchar    *kind,
+gchar          *gs_utils_get_cache_filename    (const gchar    *kind,
+                                                const gchar    *basename,
+                                                GsUtilsCacheFlags flags,
                                                 GError         **error);
 gchar          *gs_utils_get_user_hash         (GError         **error);
 GPermission    *gs_utils_get_permission        (const gchar    *id);
diff --git a/src/plugins/gs-appstream.c b/src/plugins/gs-appstream.c
index 8101f6f..82451ad 100644
--- a/src/plugins/gs-appstream.c
+++ b/src/plugins/gs-appstream.c
@@ -45,9 +45,12 @@ gs_refine_item_pixbuf (GsPlugin *plugin, GsApp *app, AsApp *item)
        case AS_ICON_KIND_REMOTE:
                gs_app_set_icon (app, icon);
                if (as_icon_get_filename (icon) == NULL) {
-                       cachedir = gs_utils_get_cachedir ("icons", NULL);
-                       fn = g_build_filename (cachedir, as_icon_get_name (icon), NULL);
+                       fn = gs_utils_get_cache_filename ("icons",
+                                                         as_icon_get_name (icon),
+                                                         GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                                         NULL);
                        as_icon_set_filename (icon, fn);
+                       cachedir = g_path_get_basename (fn);
                        as_icon_set_prefix (icon, cachedir);
                }
                if (g_file_test (fn, G_FILE_TEST_EXISTS)) {
diff --git a/src/plugins/gs-plugin-fedora-distro-upgrades.c b/src/plugins/gs-plugin-fedora-distro-upgrades.c
index d29e519..082f824 100644
--- a/src/plugins/gs-plugin-fedora-distro-upgrades.c
+++ b/src/plugins/gs-plugin-fedora-distro-upgrades.c
@@ -98,15 +98,16 @@ gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
 {
        GsPluginData *priv = gs_plugin_get_data (plugin);
        gchar *endptr = NULL;
-       g_autofree gchar *cachedir = NULL;
        g_autofree gchar *verstr = NULL;
        g_autoptr(GFile) file = NULL;
 
-       /* create the cachedir */
-       cachedir = gs_utils_get_cachedir ("upgrades", error);
-       if (cachedir == NULL)
+       /* get the file to cache */
+       priv->cachefn = gs_utils_get_cache_filename ("upgrades",
+                                                    "fedora.json",
+                                                    GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                                    error);
+       if (priv->cachefn == NULL)
                return FALSE;
-       priv->cachefn = g_build_filename (cachedir, "fedora.json", NULL);
 
        /* watch this in case it is changed by the user */
        file = g_file_new_for_path (priv->cachefn);
diff --git a/src/plugins/gs-plugin-fwupd.c b/src/plugins/gs-plugin-fwupd.c
index 0802cf5..8f5a790 100644
--- a/src/plugins/gs-plugin-fwupd.c
+++ b/src/plugins/gs-plugin-fwupd.c
@@ -44,7 +44,6 @@ struct GsPluginData {
        FwupdClient             *client;
        GPtrArray               *to_download;
        GPtrArray               *to_ignore;
-       gchar                   *cachedir;
        gchar                   *lvfs_sig_fn;
        gchar                   *lvfs_sig_hash;
        gchar                   *config_fn;
@@ -78,7 +77,6 @@ void
 gs_plugin_destroy (GsPlugin *plugin)
 {
        GsPluginData *priv = gs_plugin_get_data (plugin);
-       g_free (priv->cachedir);
        g_free (priv->lvfs_sig_fn);
        g_free (priv->lvfs_sig_hash);
        g_free (priv->config_fn);
@@ -116,24 +114,18 @@ gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
        gsize len;
        g_autofree gchar *data = NULL;
 
-       /* already done */
-       if (priv->cachedir != NULL)
-               return TRUE;
-
        /* register D-Bus errors */
        fwupd_error_quark ();
        g_signal_connect (priv->client, "changed",
                          G_CALLBACK (gs_plugin_fwupd_changed_cb), plugin);
 
-       /* create the cache location */
-       priv->cachedir = gs_utils_get_cachedir ("firmware", error);
-       if (priv->cachedir == NULL)
-               return FALSE;
-
        /* get the hash of the previously downloaded file */
-       priv->lvfs_sig_fn = g_build_filename (priv->cachedir,
-                                                     "firmware.xml.gz.asc",
-                                                     NULL);
+       priv->lvfs_sig_fn = gs_utils_get_cache_filename ("firmware",
+                                                        "firmware.xml.gz.asc",
+                                                        GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                                        error);
+       if (priv->lvfs_sig_fn == NULL)
+               return FALSE;
        if (g_file_test (priv->lvfs_sig_fn, G_FILE_TEST_EXISTS)) {
                if (!g_file_get_contents (priv->lvfs_sig_fn,
                                          &data, &len, error))
@@ -276,7 +268,6 @@ gs_plugin_add_update_app (GsPlugin *plugin,
                          FwupdResult *res,
                          GError **error)
 {
-       GsPluginData *priv = gs_plugin_get_data (plugin);
        FwupdDeviceFlags flags = 0;
        const gchar *update_hash;
        const gchar *update_uri;
@@ -339,8 +330,12 @@ gs_plugin_add_update_app (GsPlugin *plugin,
 
                /* does the firmware already exist in the cache? */
                basename = g_path_get_basename (update_uri);
-               filename_cache = g_build_filename (priv->cachedir,
-                                                  basename, NULL);
+               filename_cache = gs_utils_get_cache_filename ("firmware",
+                                                             basename,
+                                                             GS_UTILS_CACHE_FLAG_NONE,
+                                                             error);
+               if (filename_cache == NULL)
+                       return FALSE;
                if (!g_file_test (filename_cache, G_FILE_TEST_EXISTS)) {
                        gs_plugin_fwupd_add_required_location (plugin, update_uri);
                        g_set_error (error,
@@ -539,7 +534,12 @@ gs_plugin_fwupd_check_lvfs_metadata (GsPlugin *plugin,
 
        /* download the payload and save to file */
        basename_data = g_path_get_basename (url_data);
-       cache_fn_data = g_build_filename (priv->cachedir, basename_data, NULL);
+       cache_fn_data = gs_utils_get_cache_filename ("firmware",
+                                                    basename_data,
+                                                    GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                                    error);
+       if (cache_fn_data == NULL)
+               return FALSE;
        g_debug ("saving new LVFS data to %s:", cache_fn_data);
        if (!gs_plugin_download_file (plugin,
                                      app_dl,
@@ -597,7 +597,12 @@ gs_plugin_refresh (GsPlugin *plugin,
 
                tmp = g_ptr_array_index (priv->to_download, i);
                basename = g_path_get_basename (tmp);
-               filename_cache = g_build_filename (priv->cachedir, basename, NULL);
+               filename_cache = gs_utils_get_cache_filename ("firmware",
+                                                             basename,
+                                                             GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                                             error);
+               if (filename_cache == NULL)
+                       return FALSE;
                g_debug ("downloading %s to %s", tmp, filename_cache);
 
                /* set sync request */
diff --git a/src/plugins/gs-plugin-odrs.c b/src/plugins/gs-plugin-odrs.c
index 7260467..1a8a661 100644
--- a/src/plugins/gs-plugin-odrs.c
+++ b/src/plugins/gs-plugin-odrs.c
@@ -403,7 +403,7 @@ gs_plugin_odrs_get_ratings (GsPlugin *plugin, GsApp *app, GError **error)
        GsPluginData *priv = gs_plugin_get_data (plugin);
        GArray *ratings;
        guint status_code;
-       g_autofree gchar *cachedir = NULL;
+       g_autofree gchar *cachefn_basename = NULL;
        g_autofree gchar *cachefn = NULL;
        g_autofree gchar *data = NULL;
        g_autofree gchar *uri = NULL;
@@ -411,10 +411,13 @@ gs_plugin_odrs_get_ratings (GsPlugin *plugin, GsApp *app, GError **error)
        g_autoptr(SoupMessage) msg = NULL;
 
        /* look in the cache */
-       cachedir = gs_utils_get_cachedir ("ratings", error);
-       if (cachedir == NULL)
+       cachefn_basename = g_strdup_printf ("%s.json", gs_app_get_id_no_prefix (app));
+       cachefn = gs_utils_get_cache_filename ("ratings",
+                                              cachefn_basename,
+                                              GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                              error);
+       if (cachefn == NULL)
                return NULL;
-       cachefn = g_strdup_printf ("%s/%s.json", cachedir, gs_app_get_id_no_prefix (app));
        cachefn_file = g_file_new_for_path (cachefn);
        if (gs_utils_get_file_age (cachefn_file) < XDG_APP_REVIEW_CACHE_AGE_MAX) {
                g_autofree gchar *json_data = NULL;
@@ -506,7 +509,7 @@ gs_plugin_odrs_fetch_for_app (GsPlugin *plugin, GsApp *app, GError **error)
        const gchar *version;
        guint karma_min;
        guint status_code;
-       g_autofree gchar *cachedir = NULL;
+       g_autofree gchar *cachefn_basename = NULL;
        g_autofree gchar *cachefn = NULL;
        g_autofree gchar *data = NULL;
        g_autofree gchar *uri = NULL;
@@ -518,10 +521,13 @@ gs_plugin_odrs_fetch_for_app (GsPlugin *plugin, GsApp *app, GError **error)
        g_autoptr(SoupMessage) msg = NULL;
 
        /* look in the cache */
-       cachedir = gs_utils_get_cachedir ("reviews", error);
-       if (cachedir == NULL)
+       cachefn_basename = g_strdup_printf ("%s.json", gs_app_get_id_no_prefix (app));
+       cachefn = gs_utils_get_cache_filename ("reviews",
+                                              cachefn_basename,
+                                              GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                              error);
+       if (cachefn == NULL)
                return NULL;
-       cachefn = g_strdup_printf ("%s/%s.json", cachedir, gs_app_get_id_no_prefix (app));
        cachefn_file = g_file_new_for_path (cachefn);
        if (gs_utils_get_file_age (cachefn_file) < XDG_APP_REVIEW_CACHE_AGE_MAX) {
                g_autofree gchar *json_data = NULL;
@@ -701,17 +707,19 @@ gs_plugin_odrs_sanitize_version (const gchar *version)
 static gboolean
 gs_plugin_odrs_invalidate_cache (GsReview *review, GError **error)
 {
-       g_autofree gchar *cachedir = NULL;
+       g_autofree gchar *cachefn_basename = NULL;
        g_autofree gchar *cachefn = NULL;
        g_autoptr(GFile) cachefn_file = NULL;
 
        /* look in the cache */
-       cachedir = gs_utils_get_cachedir ("reviews", error);
-       if (cachedir == NULL)
+       cachefn_basename = g_strdup_printf ("%s.json",
+                                           gs_review_get_metadata_item (review, "app_id"));
+       cachefn = gs_utils_get_cache_filename ("reviews",
+                                              cachefn_basename,
+                                              GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                              error);
+       if (cachefn == NULL)
                return FALSE;
-       cachefn = g_strdup_printf ("%s/%s.json",
-                                  cachedir,
-                                  gs_review_get_metadata_item (review, "app_id"));
        cachefn_file = g_file_new_for_path (cachefn);
        if (!g_file_query_exists (cachefn_file, NULL))
                return TRUE;
diff --git a/src/plugins/gs-plugin-shell-extensions.c b/src/plugins/gs-plugin-shell-extensions.c
index 12910f6..e66e027 100644
--- a/src/plugins/gs-plugin-shell-extensions.c
+++ b/src/plugins/gs-plugin-shell-extensions.c
@@ -586,7 +586,6 @@ gs_plugin_shell_extensions_get_apps (GsPlugin *plugin,
 {
        GsPluginData *priv = gs_plugin_get_data (plugin);
        GPtrArray *apps;
-       g_autofree gchar *cachedir = NULL;
        g_autofree gchar *cachefn = NULL;
        g_autofree gchar *uri = NULL;
        g_autoptr(GFile) cachefn_file = NULL;
@@ -594,10 +593,12 @@ gs_plugin_shell_extensions_get_apps (GsPlugin *plugin,
        g_autoptr(GsApp) dummy = gs_app_new (gs_plugin_get_name (plugin));
 
        /* look in the cache */
-       cachedir = gs_utils_get_cachedir ("extensions", error);
-       if (cachedir == NULL)
+       cachefn = gs_utils_get_cache_filename ("extensions",
+                                              "gnome.json",
+                                              GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                              error);
+       if (cachefn == NULL)
                return NULL;
-       cachefn = g_strdup_printf ("%s/gnome.json", cachedir);
        cachefn_file = g_file_new_for_path (cachefn);
        if (gs_utils_get_file_age (cachefn_file) < cache_age) {
                g_autofree gchar *json_data = NULL;
diff --git a/src/plugins/gs-plugin-steam.c b/src/plugins/gs-plugin-steam.c
index cbb95ec..58465d5 100644
--- a/src/plugins/gs-plugin-steam.c
+++ b/src/plugins/gs-plugin-steam.c
@@ -399,7 +399,6 @@ gs_plugin_steam_download_icon (GsPlugin *plugin,
 {
        gsize data_len;
        g_autofree gchar *cache_basename = NULL;
-       g_autofree gchar *cachedir = NULL;
        g_autofree gchar *cache_fn = NULL;
        g_autofree gchar *cache_png = NULL;
        g_autofree gchar *data = NULL;
@@ -408,10 +407,12 @@ gs_plugin_steam_download_icon (GsPlugin *plugin,
 
        /* download icons from the cdn */
        cache_basename = g_path_get_basename (uri);
-       cachedir = gs_utils_get_cachedir ("steam", error);
-       if (cachedir == NULL)
+       cache_fn = gs_utils_get_cache_filename ("steam",
+                                               cache_basename,
+                                               GS_UTILS_CACHE_FLAG_NONE,
+                                               error);
+       if (cache_fn == NULL)
                return FALSE;
-       cache_fn = g_build_filename (cachedir, cache_basename, NULL);
        if (g_file_test (cache_fn, G_FILE_TEST_EXISTS)) {
                if (!g_file_get_contents (cache_fn, &data, &data_len, error))
                        return FALSE;
@@ -446,7 +447,12 @@ gs_plugin_steam_download_icon (GsPlugin *plugin,
 
        /* save to cache */
        memcpy (cache_basename + 40, ".png\0", 5);
-       cache_png = g_build_filename (cachedir, cache_basename, NULL);
+       cache_png = gs_utils_get_cache_filename ("steam",
+                                                cache_basename,
+                                                GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                                error);
+       if (cache_png == NULL)
+               return FALSE;
        if (!gdk_pixbuf_save (pb, cache_png, "png", error, NULL))
                return FALSE;
 
@@ -472,7 +478,6 @@ gs_plugin_steam_update_store_app (GsPlugin *plugin,
        guint32 gameid;
        gchar *app_id;
        g_autofree gchar *cache_basename = NULL;
-       g_autofree gchar *cachedir = NULL;
        g_autofree gchar *cache_fn = NULL;
        g_autofree gchar *gameid_str = NULL;
        g_autofree gchar *html = NULL;
@@ -610,10 +615,12 @@ gs_plugin_steam_update_store_app (GsPlugin *plugin,
 
        /* download page from the store */
        cache_basename = g_strdup_printf ("%s.html", gameid_str);
-       cachedir = gs_utils_get_cachedir ("steam", error);
-       if (cachedir == NULL)
+       cache_fn = gs_utils_get_cache_filename ("steam",
+                                               cache_basename,
+                                               GS_UTILS_CACHE_FLAG_WRITEABLE,
+                                               error);
+       if (cache_fn == NULL)
                return FALSE;
-       cache_fn = g_build_filename (cachedir, cache_basename, NULL);
        if (!g_file_test (cache_fn, G_FILE_TEST_EXISTS)) {
                g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (plugin));
                uri = g_strdup_printf ("http://store.steampowered.com/app/%s/";, gameid_str);


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