diff options
Diffstat (limited to 'gnome-control-center-Drop-the-unused-build-dependency-on-Grilo.patch')
-rw-r--r-- | gnome-control-center-Drop-the-unused-build-dependency-on-Grilo.patch | 1385 |
1 files changed, 1385 insertions, 0 deletions
diff --git a/gnome-control-center-Drop-the-unused-build-dependency-on-Grilo.patch b/gnome-control-center-Drop-the-unused-build-dependency-on-Grilo.patch new file mode 100644 index 0000000..2287b1c --- /dev/null +++ b/gnome-control-center-Drop-the-unused-build-dependency-on-Grilo.patch @@ -0,0 +1,1385 @@ +From e2d3f71a37a7e587b0af2a9818377ec1ac098e79 Mon Sep 17 00:00:00 2001 +From: Debarshi Ray <debarshir@gnome.org> +Date: Tue, 20 Apr 2021 23:00:28 +0200 +Subject: [PATCH] background: Drop the unused build dependency on Grilo + +The code that uses Grilo to fetch the user's Flickr photos isn't +actually used by the Background panel, to the extent that the final +binary doesn't even link against Grilo. Getting rid of this unused code +will ensure that distributors aren't needlessly pulling in this +dependency. + +This patch has been customized for RHEL 9 to skip the .gitlab-ci.yml +file, which isn't part of the 'ninja dist' generated tarball. + +https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1345 +--- + build-aux/flatpak/org.gnome.Settings.json | 17 - + panels/background/bg-pictures-source.c | 855 ------------------ + panels/background/bg-pictures-source.h | 46 - + panels/background/cc-background-chooser.c | 1 - + panels/background/cc-background-grilo-miner.c | 315 ------- + panels/background/cc-background-grilo-miner.h | 31 - + panels/background/cc-background-panel.c | 2 - + panels/background/meson.build | 4 - + 8 files changed, 1271 deletions(-) + delete mode 100644 panels/background/bg-pictures-source.c + delete mode 100644 panels/background/bg-pictures-source.h + delete mode 100644 panels/background/cc-background-grilo-miner.c + delete mode 100644 panels/background/cc-background-grilo-miner.h + +diff --git a/build-aux/flatpak/org.gnome.Settings.json b/build-aux/flatpak/org.gnome.Settings.json +index 3e19894b0484..b64b4c2fdbc5 100644 +--- a/build-aux/flatpak/org.gnome.Settings.json ++++ b/build-aux/flatpak/org.gnome.Settings.json +@@ -485,23 +485,6 @@ + } + ] + }, +- { +- "name" : "grilo", +- "buildsystem" : "meson", +- "config-opts" : [ +- "-Denable-grl-pls=false", +- "-Denable-gtk-doc=false", +- "-Denable-introspection=false", +- "-Denable-test-ui=false", +- "-Denable-vala=false" +- ], +- "sources" : [ +- { +- "type" : "git", +- "url" : "https://gitlab.gnome.org/GNOME/grilo.git" +- } +- ] +- }, + { + "name" : "openldap", + "buildsystem" : "autotools", +diff --git a/panels/background/bg-pictures-source.c b/panels/background/bg-pictures-source.c +deleted file mode 100644 +index 3a3027b1391e..000000000000 +--- a/panels/background/bg-pictures-source.c ++++ /dev/null +@@ -1,855 +0,0 @@ +-/* bg-pictures-source.c */ +-/* +- * Copyright (C) 2010 Intel, Inc +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, see <http://www.gnu.org/licenses/>. +- * +- * Author: Thomas Wood <thomas.wood@intel.com> +- * +- */ +- +-#include <config.h> +- +-#include "bg-pictures-source.h" +- +-#include "cc-background-grilo-miner.h" +-#include "cc-background-item.h" +- +-#include <string.h> +-#include <cairo-gobject.h> +-#include <gio/gio.h> +-#include <grilo.h> +-#include <libgnome-desktop/gnome-desktop-thumbnail.h> +-#include <gdesktop-enums.h> +- +-#define ATTRIBUTES G_FILE_ATTRIBUTE_STANDARD_NAME "," \ +- G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE "," \ +- G_FILE_ATTRIBUTE_TIME_MODIFIED +- +-struct _BgPicturesSource +-{ +- BgSource parent_instance; +- +- GCancellable *cancellable; +- +- CcBackgroundGriloMiner *grl_miner; +- +- GFileMonitor *picture_dir_monitor; +- GFileMonitor *cache_dir_monitor; +- +- GHashTable *known_items; +-}; +- +-G_DEFINE_TYPE (BgPicturesSource, bg_pictures_source, BG_TYPE_SOURCE) +- +-const char * const content_types[] = { +- "image/png", +- "image/jp2", +- "image/jpeg", +- "image/bmp", +- "image/svg+xml", +- "image/x-portable-anymap", +- NULL +-}; +- +-const char * const screenshot_types[] = { +- "image/png", +- NULL +-}; +- +-static char *bg_pictures_source_get_unique_filename (const char *uri); +- +-static void picture_opened_for_read (GObject *source_object, GAsyncResult *res, gpointer user_data); +- +-static void +-bg_pictures_source_dispose (GObject *object) +-{ +- BgPicturesSource *source = BG_PICTURES_SOURCE (object); +- +- if (source->cancellable) +- { +- g_cancellable_cancel (source->cancellable); +- g_clear_object (&source->cancellable); +- } +- +- g_clear_object (&source->grl_miner); +- +- G_OBJECT_CLASS (bg_pictures_source_parent_class)->dispose (object); +-} +- +-static void +-bg_pictures_source_finalize (GObject *object) +-{ +- BgPicturesSource *bg_source = BG_PICTURES_SOURCE (object); +- +- g_clear_pointer (&bg_source->known_items, g_hash_table_destroy); +- +- g_clear_object (&bg_source->picture_dir_monitor); +- g_clear_object (&bg_source->cache_dir_monitor); +- +- G_OBJECT_CLASS (bg_pictures_source_parent_class)->finalize (object); +-} +- +-static void +-bg_pictures_source_class_init (BgPicturesSourceClass *klass) +-{ +- GObjectClass *object_class = G_OBJECT_CLASS (klass); +- +- object_class->dispose = bg_pictures_source_dispose; +- object_class->finalize = bg_pictures_source_finalize; +-} +- +-static void +-remove_placeholder (BgPicturesSource *bg_source, +- CcBackgroundItem *item) +-{ +- GListStore *store; +- guint i; +- +- store = bg_source_get_liststore (BG_SOURCE (bg_source)); +- +- for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (store)); i++) +- { +- g_autoptr(CcBackgroundItem) item_n = NULL; +- +- item_n = g_list_model_get_item (G_LIST_MODEL (store), i); +- +- if (item_n == item) +- { +- g_list_store_remove (store, i); +- break; +- } +- } +-} +- +-static gboolean +-picture_needs_rotation (GdkPixbuf *pixbuf) +-{ +- const gchar *str; +- +- str = gdk_pixbuf_get_option (pixbuf, "orientation"); +- if (str == NULL) +- return FALSE; +- +- if (*str == '5' || *str == '6' || *str == '7' || *str == '8') +- return TRUE; +- +- return FALSE; +-} +- +-static GdkPixbuf * +-swap_rotated_pixbuf (GdkPixbuf *pixbuf) +-{ +- GdkPixbuf *tmp_pixbuf; +- +- tmp_pixbuf = gdk_pixbuf_apply_embedded_orientation (pixbuf); +- if (tmp_pixbuf == NULL) +- return pixbuf; +- +- g_object_unref (pixbuf); +- return tmp_pixbuf; +-} +- +-static int +-sort_func (gconstpointer a, +- gconstpointer b, +- gpointer user_data) +-{ +- CcBackgroundItem *item_a; +- CcBackgroundItem *item_b; +- guint64 modified_a; +- guint64 modified_b; +- int retval; +- +- item_a = (CcBackgroundItem *) a; +- item_b = (CcBackgroundItem *) b; +- modified_a = cc_background_item_get_modified (item_a); +- modified_b = cc_background_item_get_modified (item_b); +- +- retval = modified_b - modified_a; +- +- return retval; +-} +- +-static void +-picture_scaled (GObject *source_object, +- GAsyncResult *res, +- gpointer user_data) +-{ +- BgPicturesSource *bg_source; +- CcBackgroundItem *item; +- g_autoptr(GError) error = NULL; +- g_autoptr(GdkPixbuf) pixbuf = NULL; +- const char *software; +- const char *uri; +- GListStore *store; +- cairo_surface_t *surface = NULL; +- int scale_factor; +- gboolean rotation_applied; +- +- item = g_object_get_data (source_object, "item"); +- pixbuf = gdk_pixbuf_new_from_stream_finish (res, &error); +- if (pixbuf == NULL) +- { +- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- { +- g_warning ("Failed to load image: %s", error->message); +- remove_placeholder (BG_PICTURES_SOURCE (user_data), item); +- } +- +- return; +- } +- +- /* since we were not cancelled, we can now cast user_data +- * back to BgPicturesSource. +- */ +- bg_source = BG_PICTURES_SOURCE (user_data); +- store = bg_source_get_liststore (BG_SOURCE (bg_source)); +- uri = cc_background_item_get_uri (item); +- if (uri == NULL) +- uri = cc_background_item_get_source_url (item); +- +- /* Ignore screenshots */ +- software = gdk_pixbuf_get_option (pixbuf, "tEXt::Software"); +- if (software != NULL && +- g_str_equal (software, "gnome-screenshot")) +- { +- g_debug ("Ignored URL '%s' as it's a screenshot from gnome-screenshot", uri); +- remove_placeholder (BG_PICTURES_SOURCE (user_data), item); +- return; +- } +- +- /* Process embedded orientation */ +- rotation_applied = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "rotation-applied")); +- +- if (!rotation_applied && picture_needs_rotation (pixbuf)) +- { +- /* the width and height of pixbuf we requested are wrong for EXIF +- * orientations 5, 6, 7 and 8. the file has to be reloaded. */ +- g_autoptr(GFile) file = NULL; +- +- file = g_file_new_for_uri (uri); +- g_object_set_data (G_OBJECT (item), "needs-rotation", GINT_TO_POINTER (TRUE)); +- g_object_set_data_full (G_OBJECT (file), "item", g_object_ref (item), g_object_unref); +- g_file_read_async (G_FILE (file), G_PRIORITY_DEFAULT, +- bg_source->cancellable, +- picture_opened_for_read, bg_source); +- return; +- } +- +- pixbuf = swap_rotated_pixbuf (pixbuf); +- +- scale_factor = bg_source_get_scale_factor (BG_SOURCE (bg_source)); +- surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale_factor, NULL); +- cc_background_item_load (item, NULL); +- +- /* insert the item into the liststore */ +- g_list_store_insert_sorted (store, item, sort_func, bg_source); +- +- g_hash_table_insert (bg_source->known_items, +- bg_pictures_source_get_unique_filename (uri), +- GINT_TO_POINTER (TRUE)); +- +- g_clear_pointer (&surface, cairo_surface_destroy); +-} +- +-static void +-picture_opened_for_read (GObject *source_object, +- GAsyncResult *res, +- gpointer user_data) +-{ +- BgPicturesSource *bg_source; +- CcBackgroundItem *item; +- g_autoptr(GFileInputStream) stream = NULL; +- g_autoptr(GError) error = NULL; +- gint thumbnail_height; +- gint thumbnail_width; +- gboolean needs_rotation; +- +- item = g_object_get_data (source_object, "item"); +- stream = g_file_read_finish (G_FILE (source_object), res, &error); +- if (stream == NULL) +- { +- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- { +- g_autofree gchar *filename = g_file_get_path (G_FILE (source_object)); +- g_warning ("Failed to load picture '%s': %s", filename, error->message); +- remove_placeholder (BG_PICTURES_SOURCE (user_data), item); +- } +- +- return; +- } +- +- /* since we were not cancelled, we can now cast user_data +- * back to BgPicturesSource. +- */ +- bg_source = BG_PICTURES_SOURCE (user_data); +- +- needs_rotation = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "needs-rotation")); +- if (needs_rotation) +- { +- /* swap width and height for EXIF orientations that need it */ +- thumbnail_width = bg_source_get_thumbnail_height (BG_SOURCE (bg_source)); +- thumbnail_height = bg_source_get_thumbnail_width (BG_SOURCE (bg_source)); +- g_object_set_data (G_OBJECT (item), "rotation-applied", GINT_TO_POINTER (TRUE)); +- } +- else +- { +- thumbnail_width = bg_source_get_thumbnail_width (BG_SOURCE (bg_source)); +- thumbnail_height = bg_source_get_thumbnail_height (BG_SOURCE (bg_source)); +- } +- +- g_object_set_data_full (G_OBJECT (stream), "item", g_object_ref (item), g_object_unref); +- gdk_pixbuf_new_from_stream_at_scale_async (G_INPUT_STREAM (stream), +- thumbnail_width, thumbnail_height, +- TRUE, +- bg_source->cancellable, +- picture_scaled, bg_source); +-} +- +-static void +-picture_copied_for_read (GObject *source_object, +- GAsyncResult *res, +- gpointer user_data) +-{ +- BgPicturesSource *bg_source; +- CcBackgroundItem *item; +- g_autoptr(GError) error = NULL; +- GFile *thumbnail_file = G_FILE (source_object); +- GFile *native_file; +- +- if (!g_file_copy_finish (thumbnail_file, res, &error)) +- { +- if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- return; +- else if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS)) +- { +- g_autofree gchar *uri = NULL; +- +- uri = g_file_get_uri (thumbnail_file); +- g_warning ("Failed to download '%s': %s", uri, error->message); +- return; +- } +- } +- +- bg_source = BG_PICTURES_SOURCE (user_data); +- +- native_file = g_object_get_data (G_OBJECT (thumbnail_file), "native-file"); +- item = g_object_get_data (G_OBJECT (thumbnail_file), "item"); +- g_object_set_data_full (G_OBJECT (native_file), "item", g_object_ref (item), g_object_unref); +- g_file_read_async (native_file, +- G_PRIORITY_DEFAULT, +- bg_source->cancellable, +- picture_opened_for_read, +- bg_source); +-} +- +-static gboolean +-in_content_types (const char *content_type) +-{ +- guint i; +- for (i = 0; content_types[i]; i++) +- if (g_str_equal (content_types[i], content_type)) +- return TRUE; +- return FALSE; +-} +- +-static GFile * +-bg_pictures_source_get_cache_file (void) +-{ +- g_autofree gchar *path = NULL; +- GFile *file; +- +- path = bg_pictures_source_get_cache_path (); +- file = g_file_new_for_path (path); +- +- return file; +-} +- +-static gboolean +-add_single_file (BgPicturesSource *bg_source, +- GFile *file, +- const gchar *content_type, +- guint64 mtime) +-{ +- g_autoptr(CcBackgroundItem) item = NULL; +- CcBackgroundItemFlags flags = 0; +- g_autofree gchar *source_uri = NULL; +- g_autofree gchar *uri = NULL; +- gboolean needs_download; +- gboolean retval = FALSE; +- const gchar *pictures_path; +- g_autoptr(GFile) pictures_dir = NULL; +- g_autoptr(GFile) cache_dir = NULL; +- GrlMedia *media; +- +- /* find png and jpeg files */ +- if (!content_type) +- goto out; +- if (!in_content_types (content_type)) +- goto out; +- +- /* create a new CcBackgroundItem */ +- uri = g_file_get_uri (file); +- +- pictures_path = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES); +- if (pictures_path == NULL) +- pictures_path = g_get_home_dir (); +- pictures_dir = g_file_new_for_path (pictures_path); +- cache_dir = bg_pictures_source_get_cache_file (); +- needs_download = !g_file_has_parent (file, pictures_dir) && +- !g_file_has_parent (file, cache_dir); +- +- if (!needs_download) +- { +- source_uri = g_strdup (uri); +- flags |= CC_BACKGROUND_ITEM_HAS_URI; +- } +- else +- { +- source_uri = g_steal_pointer (&uri); +- } +- +- item = cc_background_item_new (uri); +- flags |= CC_BACKGROUND_ITEM_HAS_SHADING | CC_BACKGROUND_ITEM_HAS_PLACEMENT; +- g_object_set (G_OBJECT (item), +- "flags", flags, +- "shading", G_DESKTOP_BACKGROUND_SHADING_SOLID, +- "placement", G_DESKTOP_BACKGROUND_STYLE_ZOOM, +- "modified", mtime, +- "needs-download", needs_download, +- "source-url", source_uri, +- NULL); +- +- media = g_object_get_data (G_OBJECT (file), "grl-media"); +- if (media == NULL) +- { +- g_object_set_data_full (G_OBJECT (file), "item", g_object_ref (item), g_object_unref); +- g_file_read_async (file, G_PRIORITY_DEFAULT, +- bg_source->cancellable, +- picture_opened_for_read, bg_source); +- } +- else +- { +- g_autoptr(GFile) native_file = NULL; +- g_autoptr(GFile) thumbnail_file = NULL; +- g_autofree gchar *native_dir = NULL; +- g_autofree gchar *native_path = NULL; +- const gchar *title; +- const gchar *thumbnail_uri; +- +- title = grl_media_get_title (media); +- g_object_set (G_OBJECT (item), "name", title, NULL); +- +- thumbnail_uri = grl_media_get_thumbnail (media); +- thumbnail_file = g_file_new_for_uri (thumbnail_uri); +- +- native_path = gnome_desktop_thumbnail_path_for_uri (source_uri, GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE); +- native_file = g_file_new_for_path (native_path); +- +- native_dir = g_path_get_dirname (native_path); +- g_mkdir_with_parents (native_dir, USER_DIR_MODE); +- +- g_object_set_data_full (G_OBJECT (thumbnail_file), "item", g_object_ref (item), g_object_unref); +- g_object_set_data_full (G_OBJECT (thumbnail_file), +- "native-file", +- g_object_ref (native_file), +- g_object_unref); +- g_file_copy_async (thumbnail_file, +- native_file, +- G_FILE_COPY_ALL_METADATA, +- G_PRIORITY_DEFAULT, +- bg_source->cancellable, +- NULL, +- NULL, +- picture_copied_for_read, +- bg_source); +- } +- +- retval = TRUE; +- +- out: +- return retval; +-} +- +-static gboolean +-add_single_file_from_info (BgPicturesSource *bg_source, +- GFile *file, +- GFileInfo *info) +-{ +- const gchar *content_type; +- guint64 mtime; +- +- content_type = g_file_info_get_content_type (info); +- mtime = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED); +- return add_single_file (bg_source, file, content_type, mtime); +-} +- +-static gboolean +-add_single_file_from_media (BgPicturesSource *bg_source, +- GFile *file, +- GrlMedia *media) +-{ +- GDateTime *mtime; +- const gchar *content_type; +- gint64 mtime_unix; +- +- content_type = grl_media_get_mime (media); +- +- /* only GRL_METADATA_KEY_CREATION_DATE is implemented in the Flickr +- * plugin, GRL_METADATA_KEY_MODIFICATION_DATE is not +- */ +- mtime = grl_media_get_creation_date (media); +- if (!mtime) +- mtime = grl_media_get_modification_date (media); +- if (mtime) +- mtime_unix = g_date_time_to_unix (mtime); +- else +- mtime_unix = g_get_real_time () / G_USEC_PER_SEC; +- +- return add_single_file (bg_source, file, content_type, (guint64) mtime_unix); +-} +- +-gboolean +-bg_pictures_source_add (BgPicturesSource *bg_source, +- const char *uri, +- GtkTreeRowReference **ret_row_ref) +-{ +- g_autoptr(GFile) file = NULL; +- GFileInfo *info; +- gboolean retval; +- +- file = g_file_new_for_uri (uri); +- info = g_file_query_info (file, ATTRIBUTES, G_FILE_QUERY_INFO_NONE, NULL, NULL); +- if (info == NULL) +- return FALSE; +- +- retval = add_single_file_from_info (bg_source, file, info); +- +- return retval; +-} +- +-gboolean +-bg_pictures_source_remove (BgPicturesSource *bg_source, +- const char *uri) +-{ +- GListStore *store; +- gboolean retval; +- guint i; +- +- retval = FALSE; +- store = bg_source_get_liststore (BG_SOURCE (bg_source)); +- +- for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (store)); i++) +- { +- g_autoptr(CcBackgroundItem) tmp_item = NULL; +- const char *tmp_uri; +- +- tmp_item = g_list_model_get_item (G_LIST_MODEL (store), i); +- tmp_uri = cc_background_item_get_uri (tmp_item); +- if (g_str_equal (tmp_uri, uri)) +- { +- char *uuid; +- uuid = bg_pictures_source_get_unique_filename (uri); +- g_hash_table_insert (bg_source->known_items, +- uuid, NULL); +- +- g_list_store_remove (store, i); +- retval = TRUE; +- break; +- } +- } +- return retval; +-} +- +-static int +-file_sort_func (gconstpointer a, +- gconstpointer b) +-{ +- GFileInfo *file_a = G_FILE_INFO (a); +- GFileInfo *file_b = G_FILE_INFO (b); +- guint64 modified_a, modified_b; +- +- modified_a = g_file_info_get_attribute_uint64 (file_a, G_FILE_ATTRIBUTE_TIME_MODIFIED); +- +- modified_b = g_file_info_get_attribute_uint64 (file_b, G_FILE_ATTRIBUTE_TIME_MODIFIED); +- +- return modified_b - modified_a; +-} +- +-static void +-file_info_async_ready (GObject *source, +- GAsyncResult *res, +- gpointer user_data) +-{ +- BgPicturesSource *bg_source; +- GList *files, *l; +- g_autoptr(GError) err = NULL; +- GFile *parent; +- +- files = g_file_enumerator_next_files_finish (G_FILE_ENUMERATOR (source), +- res, +- &err); +- if (err) +- { +- if (!g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- g_warning ("Could not get pictures file information: %s", err->message); +- +- g_list_foreach (files, (GFunc) g_object_unref, NULL); +- g_list_free (files); +- return; +- } +- +- bg_source = BG_PICTURES_SOURCE (user_data); +- +- parent = g_file_enumerator_get_container (G_FILE_ENUMERATOR (source)); +- +- files = g_list_sort (files, file_sort_func); +- +- /* iterate over the available files */ +- for (l = files; l; l = g_list_next (l)) +- { +- GFileInfo *info = l->data; +- g_autoptr(GFile) file = NULL; +- +- file = g_file_get_child (parent, g_file_info_get_name (info)); +- +- add_single_file_from_info (bg_source, file, info); +- } +- +- g_list_foreach (files, (GFunc) g_object_unref, NULL); +- g_list_free (files); +-} +- +-static void +-dir_enum_async_ready (GObject *s, +- GAsyncResult *res, +- gpointer user_data) +-{ +- BgPicturesSource *source = (BgPicturesSource *) user_data; +- g_autoptr(GFileEnumerator) enumerator = NULL; +- g_autoptr(GError) err = NULL; +- +- enumerator = g_file_enumerate_children_finish (G_FILE (s), res, &err); +- +- if (err) +- { +- if (!g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- g_warning ("Could not fill pictures source: %s", err->message); +- return; +- } +- +- /* get the files */ +- g_file_enumerator_next_files_async (enumerator, +- G_MAXINT, +- G_PRIORITY_LOW, +- source->cancellable, +- file_info_async_ready, +- user_data); +-} +- +-char * +-bg_pictures_source_get_cache_path (void) +-{ +- return g_build_filename (g_get_user_cache_dir (), +- "gnome-control-center", +- "backgrounds", +- NULL); +-} +- +-static char * +-bg_pictures_source_get_unique_filename (const char *uri) +-{ +- g_autoptr(GChecksum) csum = NULL; +- char *ret; +- +- csum = g_checksum_new (G_CHECKSUM_SHA256); +- g_checksum_update (csum, (guchar *) uri, -1); +- ret = g_strdup (g_checksum_get_string (csum)); +- +- return ret; +-} +- +-char * +-bg_pictures_source_get_unique_path (const char *uri) +-{ +- g_autoptr(GFile) parent = NULL; +- g_autoptr(GFile) file = NULL; +- g_autofree gchar *cache_path = NULL; +- g_autofree gchar *filename = NULL; +- +- cache_path = bg_pictures_source_get_cache_path (); +- parent = g_file_new_for_path (cache_path); +- +- filename = bg_pictures_source_get_unique_filename (uri); +- file = g_file_get_child (parent, filename); +- +- return g_file_get_path (file); +-} +- +-gboolean +-bg_pictures_source_is_known (BgPicturesSource *bg_source, +- const char *uri) +-{ +- g_autofree gchar *uuid = NULL; +- +- uuid = bg_pictures_source_get_unique_filename (uri); +- +- return GPOINTER_TO_INT (g_hash_table_lookup (bg_source->known_items, uuid)); +-} +- +-static void +-file_info_ready (GObject *object, +- GAsyncResult *res, +- gpointer user_data) +-{ +- GFileInfo *info; +- GError *error = NULL; +- GFile *file = G_FILE (object); +- +- info = g_file_query_info_finish (file, res, &error); +- +- if (!info) +- { +- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- g_warning ("Problem looking up file info: %s", error->message); +- g_clear_error (&error); +- return; +- } +- +- add_single_file_from_info (BG_PICTURES_SOURCE (user_data), file, info); +-} +- +-static void +-file_added (GFile *file, +- BgPicturesSource *self) +-{ +- g_autofree gchar *uri = NULL; +- uri = g_file_get_uri (file); +- +- if (!bg_pictures_source_is_known (self, uri)) +- { +- g_file_query_info_async (file, +- ATTRIBUTES, +- G_FILE_QUERY_INFO_NONE, +- G_PRIORITY_LOW, +- NULL, +- file_info_ready, +- self); +- } +-} +- +-static void +-files_changed_cb (BgPicturesSource *self, +- GFile *file, +- GFile *other_file, +- GFileMonitorEvent event_type) +-{ +- g_autofree gchar *uri = NULL; +- +- switch (event_type) +- { +- case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT: +- file_added (file, self); +- break; +- +- case G_FILE_MONITOR_EVENT_DELETED: +- uri = g_file_get_uri (file); +- bg_pictures_source_remove (self, uri); +- break; +- +- default: +- return; +- } +-} +- +-static GFileMonitor * +-monitor_path (BgPicturesSource *self, +- const char *path) +-{ +- GFileMonitor *monitor; +- g_autoptr(GFile) dir = NULL; +- +- g_mkdir_with_parents (path, USER_DIR_MODE); +- +- dir = g_file_new_for_path (path); +- g_file_enumerate_children_async (dir, +- ATTRIBUTES, +- G_FILE_QUERY_INFO_NONE, +- G_PRIORITY_LOW, self->cancellable, +- dir_enum_async_ready, self); +- +- monitor = g_file_monitor_directory (dir, +- G_FILE_MONITOR_NONE, +- self->cancellable, +- NULL); +- +- if (monitor) +- g_signal_connect_object (monitor, +- "changed", +- G_CALLBACK (files_changed_cb), +- self, G_CONNECT_SWAPPED); +- +- return monitor; +-} +- +-static void +-media_found_cb (BgPicturesSource *self, GrlMedia *media) +-{ +- g_autoptr(GFile) file = NULL; +- const gchar *uri; +- +- uri = grl_media_get_url (media); +- file = g_file_new_for_uri (uri); +- g_object_set_data_full (G_OBJECT (file), "grl-media", g_object_ref (media), g_object_unref); +- add_single_file_from_media (self, file, media); +-} +- +-static void +-bg_pictures_source_init (BgPicturesSource *self) +-{ +- const gchar *pictures_path; +- g_autofree gchar *cache_path = NULL; +- +- self->cancellable = g_cancellable_new (); +- self->known_items = g_hash_table_new_full (g_str_hash, +- g_str_equal, +- (GDestroyNotify) g_free, +- NULL); +- +- pictures_path = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES); +- if (pictures_path == NULL) +- pictures_path = g_get_home_dir (); +- +- self->picture_dir_monitor = monitor_path (self, pictures_path); +- +- cache_path = bg_pictures_source_get_cache_path (); +- self->cache_dir_monitor = monitor_path (self, cache_path); +- +- self->grl_miner = cc_background_grilo_miner_new (); +- g_signal_connect_object (self->grl_miner, "media-found", G_CALLBACK (media_found_cb), self, G_CONNECT_SWAPPED); +- cc_background_grilo_miner_start (self->grl_miner); +-} +- +-BgPicturesSource * +-bg_pictures_source_new (GtkWidget *widget) +-{ +- return g_object_new (BG_TYPE_PICTURES_SOURCE, "widget", widget, NULL); +-} +- +-const char * const * +-bg_pictures_get_support_content_types (void) +-{ +- return content_types; +-} +diff --git a/panels/background/bg-pictures-source.h b/panels/background/bg-pictures-source.h +deleted file mode 100644 +index f62cbe532e26..000000000000 +--- a/panels/background/bg-pictures-source.h ++++ /dev/null +@@ -1,46 +0,0 @@ +-/* bg-pictures-source.h */ +-/* +- * Copyright (C) 2010 Intel, Inc +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, see <http://www.gnu.org/licenses/>. +- * +- * Author: Thomas Wood <thomas.wood@intel.com> +- * +- */ +- +-#pragma once +- +-#include <gtk/gtk.h> +-#include "bg-source.h" +-#include "cc-background-item.h" +- +-G_BEGIN_DECLS +- +-#define BG_TYPE_PICTURES_SOURCE (bg_pictures_source_get_type ()) +-G_DECLARE_FINAL_TYPE (BgPicturesSource, bg_pictures_source, BG, PICTURES_SOURCE, BgSource) +- +-BgPicturesSource *bg_pictures_source_new (GtkWidget *widget); +-char *bg_pictures_source_get_cache_path (void); +-char *bg_pictures_source_get_unique_path(const char *uri); +-gboolean bg_pictures_source_add (BgPicturesSource *bg_source, +- const char *uri, +- GtkTreeRowReference **ret_row_ref); +-gboolean bg_pictures_source_remove (BgPicturesSource *bg_source, +- const char *uri); +-gboolean bg_pictures_source_is_known (BgPicturesSource *bg_source, +- const char *uri); +- +-const char * const * bg_pictures_get_support_content_types (void); +- +-G_END_DECLS +diff --git a/panels/background/cc-background-chooser.c b/panels/background/cc-background-chooser.c +index 6c8f56136271..04fd85c477aa 100644 +--- a/panels/background/cc-background-chooser.c ++++ b/panels/background/cc-background-chooser.c +@@ -25,7 +25,6 @@ + #include <libgnome-desktop/gnome-desktop-thumbnail.h> + + #include "bg-colors-source.h" +-#include "bg-pictures-source.h" + #include "bg-recent-source.h" + #include "bg-wallpapers-source.h" + #include "cc-background-chooser.h" +diff --git a/panels/background/cc-background-grilo-miner.c b/panels/background/cc-background-grilo-miner.c +deleted file mode 100644 +index 85c09daf6928..000000000000 +--- a/panels/background/cc-background-grilo-miner.c ++++ /dev/null +@@ -1,315 +0,0 @@ +-/* +- * Copyright (C) 2014 Red Hat, Inc. +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, see <http://www.gnu.org/licenses/>. +- */ +- +-#include <config.h> +- +-#include <gio/gio.h> +-#include <grilo.h> +- +-#define GOA_API_IS_SUBJECT_TO_CHANGE +-#include <goa/goa.h> +- +-#include "bg-pictures-source.h" +-#include "cc-background-grilo-miner.h" +- +-struct _CcBackgroundGriloMiner +-{ +- GObject parent_instance; +- +- GCancellable *cancellable; +- GList *accounts; +-}; +- +-G_DEFINE_TYPE (CcBackgroundGriloMiner, cc_background_grilo_miner, G_TYPE_OBJECT) +- +-enum +-{ +- MEDIA_FOUND, +- LAST_SIGNAL +-}; +- +-static guint signals[LAST_SIGNAL] = { 0 }; +- +-#define REMOTE_ITEM_COUNT 50 +- +-static gchar * +-get_grilo_id (GoaObject *goa_object) +-{ +- GoaAccount *account; +- +- account = goa_object_peek_account (goa_object); +- return g_strdup_printf ("grl-flickr-%s", goa_account_get_id (account)); +-} +- +-static void +-is_online_data_cached (GObject *object, +- GAsyncResult *res, +- gpointer user_data) +-{ +- CcBackgroundGriloMiner *self; +- GError *error = NULL; +- GFileInfo *info = NULL; +- GFile *cache_file = G_FILE (object); +- GrlMedia *media; +- const gchar *uri; +- +- info = g_file_query_info_finish (cache_file, res, &error); +- if (info == NULL) +- { +- if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- goto out; +- } +- +- self = CC_BACKGROUND_GRILO_MINER (user_data); +- +- media = g_object_get_data (G_OBJECT (cache_file), "grl-media"); +- uri = grl_media_get_url (media); +- +- if (info != NULL) +- { +- g_debug ("Ignored URL '%s' as it is already in the cache", uri); +- goto out; +- } +- +- g_signal_emit (self, signals[MEDIA_FOUND], 0, media); +- +- out: +- g_clear_object (&info); +- g_clear_error (&error); +-} +- +-static void +-searched_online_source (GrlSource *source, +- guint operation_id, +- GrlMedia *media, +- guint remaining, +- gpointer user_data, +- const GError *error) +-{ +- CcBackgroundGriloMiner *self = CC_BACKGROUND_GRILO_MINER (user_data); +- g_autoptr(GFile) cache_file = NULL; +- const gchar *uri; +- g_autofree gchar *cache_path = NULL; +- +- if (error != NULL) +- { +- const gchar *source_id; +- +- source_id = grl_source_get_id (source); +- g_warning ("Error searching %s: %s", source_id, error->message); +- grl_operation_cancel (operation_id); +- remaining = 0; +- goto out; +- } +- +- uri = grl_media_get_url (media); +- cache_path = bg_pictures_source_get_unique_path (uri); +- cache_file = g_file_new_for_path (cache_path); +- g_object_set_data_full (G_OBJECT (cache_file), "grl-media", media, g_object_unref); +- g_file_query_info_async (cache_file, +- G_FILE_ATTRIBUTE_STANDARD_TYPE, +- G_FILE_QUERY_INFO_NONE, +- G_PRIORITY_DEFAULT, +- self->cancellable, +- is_online_data_cached, +- self); +- +- out: +- if (remaining == 0) +- g_object_unref (self); +-} +- +-static void +-query_online_source (CcBackgroundGriloMiner *self, GrlSource *source) +-{ +- const GList *keys; +- GrlCaps *caps; +- GrlOperationOptions *options; +- +- keys = grl_source_supported_keys (source); +- caps = grl_source_get_caps (source, GRL_OP_BROWSE); +- options = grl_operation_options_new (caps); +- grl_operation_options_set_count (options, REMOTE_ITEM_COUNT); +- grl_operation_options_set_resolution_flags (options, GRL_RESOLVE_FAST_ONLY); +- grl_operation_options_set_type_filter (options, GRL_TYPE_FILTER_IMAGE); +- +- grl_source_search (source, NULL, keys, options, searched_online_source, g_object_ref (self)); +- g_object_unref (options); +-} +- +-static void +-add_online_source_cb (CcBackgroundGriloMiner *self, +- GrlSource *source) +-{ +- GList *l; +- gboolean found = FALSE; +- const gchar *source_id; +- +- source_id = grl_source_get_id (source); +- for (l = self->accounts; l != NULL && !found; l = l->next) +- { +- GoaObject *goa_object = GOA_OBJECT (l->data); +- g_autofree gchar *account_id = NULL; +- +- account_id = get_grilo_id (goa_object); +- if (g_strcmp0 (source_id, account_id) == 0) +- { +- query_online_source (self, source); +- found = TRUE; +- } +- } +-} +- +-static void +-client_async_ready (GObject *source, +- GAsyncResult *res, +- gpointer user_data) +-{ +- CcBackgroundGriloMiner *self; +- g_autoptr(GError) error = NULL; +- GList *accounts = NULL; +- GList *photo_accounts = NULL; +- GList *l; +- GoaClient *client = NULL; +- GrlRegistry *registry; +- +- client = goa_client_new_finish (res, &error); +- if (client == NULL) +- { +- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) +- g_warning ("Failed to create GoaClient: %s", error->message); +- goto out; +- } +- +- self = CC_BACKGROUND_GRILO_MINER (user_data); +- +- accounts = goa_client_get_accounts (client); +- for (l = accounts; l != NULL; l = l->next) +- { +- GoaObject *goa_object = GOA_OBJECT (l->data); +- GoaAccount *account; +- GoaPhotos *photos; +- const gchar *provider_type; +- +- account = goa_object_peek_account (goa_object); +- provider_type = goa_account_get_provider_type (account); +- +- photos = goa_object_peek_photos (goa_object); +- if (photos != NULL && g_strcmp0 (provider_type, "flickr") == 0) +- photo_accounts = g_list_prepend (photo_accounts, g_object_ref (goa_object)); +- } +- +- if (photo_accounts == NULL) +- goto out; +- +- registry = grl_registry_get_default (); +- +- for (l = photo_accounts; l != NULL; l = l->next) +- { +- GoaObject *goa_object = GOA_OBJECT (l->data); +- GrlSource *source; +- g_autofree gchar *account_id = NULL; +- +- account_id = get_grilo_id (goa_object); +- source = grl_registry_lookup_source (registry, account_id); +- if (source != NULL) +- query_online_source (self, source); +- } +- +- self->accounts = photo_accounts; +- photo_accounts = NULL; +- +- g_signal_connect_object (registry, "source-added", G_CALLBACK (add_online_source_cb), self, G_CONNECT_SWAPPED); +- +- out: +- g_list_free_full (photo_accounts, g_object_unref); +- g_list_free_full (accounts, g_object_unref); +- g_clear_object (&client); +-} +- +-static void +-setup_online_accounts (CcBackgroundGriloMiner *self) +-{ +- goa_client_new (self->cancellable, client_async_ready, self); +-} +- +-static void +-cc_background_grilo_miner_dispose (GObject *object) +-{ +- CcBackgroundGriloMiner *self = CC_BACKGROUND_GRILO_MINER (object); +- +- if (self->cancellable) +- { +- g_cancellable_cancel (self->cancellable); +- g_clear_object (&self->cancellable); +- } +- +- if (self->accounts) +- { +- g_list_free_full (self->accounts, g_object_unref); +- self->accounts = NULL; +- } +- +- G_OBJECT_CLASS (cc_background_grilo_miner_parent_class)->dispose (object); +-} +- +-static void +-cc_background_grilo_miner_init (CcBackgroundGriloMiner *self) +-{ +- self->cancellable = g_cancellable_new (); +-} +- +-static void +-cc_background_grilo_miner_class_init (CcBackgroundGriloMinerClass *klass) +-{ +- g_autoptr(GError) error = NULL; +- GObjectClass *object_class = G_OBJECT_CLASS (klass); +- GrlRegistry *registry; +- +- object_class->dispose = cc_background_grilo_miner_dispose; +- +- signals[MEDIA_FOUND] = g_signal_new ("media-found", +- G_TYPE_FROM_CLASS (klass), +- G_SIGNAL_RUN_LAST, +- 0, /* class_offset */ +- NULL, /* accumulator */ +- NULL, /* accu_data */ +- g_cclosure_marshal_VOID__OBJECT, +- G_TYPE_NONE, +- 1, +- GRL_TYPE_MEDIA); +- +- grl_init (NULL, NULL); +- registry = grl_registry_get_default (); +- +- error = NULL; +- if (!grl_registry_load_all_plugins (registry, FALSE, &error) || +- !grl_registry_activate_plugin_by_id (registry, "grl-flickr", &error)) +- g_warning ("%s", error->message); +-} +- +-CcBackgroundGriloMiner * +-cc_background_grilo_miner_new (void) +-{ +- return g_object_new (CC_TYPE_BACKGROUND_GRILO_MINER, NULL); +-} +- +-void +-cc_background_grilo_miner_start (CcBackgroundGriloMiner *self) +-{ +- setup_online_accounts (self); +-} +diff --git a/panels/background/cc-background-grilo-miner.h b/panels/background/cc-background-grilo-miner.h +deleted file mode 100644 +index b018129aeba5..000000000000 +--- a/panels/background/cc-background-grilo-miner.h ++++ /dev/null +@@ -1,31 +0,0 @@ +-/* +- * Copyright (C) 2014 Red Hat, Inc. +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, see <http://www.gnu.org/licenses/>. +- */ +- +-#pragma once +- +-#include <glib-object.h> +- +-G_BEGIN_DECLS +- +-#define CC_TYPE_BACKGROUND_GRILO_MINER (cc_background_grilo_miner_get_type ()) +-G_DECLARE_FINAL_TYPE (CcBackgroundGriloMiner, cc_background_grilo_miner, CC, BACKGROUND_GRILO_MINER, GObject); +- +-CcBackgroundGriloMiner *cc_background_grilo_miner_new (void); +- +-void cc_background_grilo_miner_start (CcBackgroundGriloMiner *self); +- +-G_END_DECLS +diff --git a/panels/background/cc-background-panel.c b/panels/background/cc-background-panel.c +index 29dedf1653ad..3e50f506b514 100644 +--- a/panels/background/cc-background-panel.c ++++ b/panels/background/cc-background-panel.c +@@ -35,8 +35,6 @@ + #include "cc-background-resources.h" + #include "cc-background-xml.h" + +-#include "bg-pictures-source.h" +- + #define WP_PATH_ID "org.gnome.desktop.background" + #define WP_LOCK_PATH_ID "org.gnome.desktop.screensaver" + #define WP_URI_KEY "picture-uri" +diff --git a/panels/background/meson.build b/panels/background/meson.build +index e9fa398d4ceb..eb5e9ec84625 100644 +--- a/panels/background/meson.build ++++ b/panels/background/meson.build +@@ -76,12 +76,10 @@ common_sources += gnome.compile_resources( + + sources = common_sources + files( + 'bg-colors-source.c', +- 'bg-pictures-source.c', + 'bg-recent-source.c', + 'bg-source.c', + 'bg-wallpapers-source.c', + 'cc-background-chooser.c', +- 'cc-background-grilo-miner.c', + 'cc-background-item.c', + 'cc-background-panel.c', + 'cc-background-preview.c', +@@ -91,10 +89,8 @@ sources = common_sources + files( + deps = common_deps + [ + gdk_pixbuf_dep, + gnome_desktop_dep, +- goa_dep, + libxml_dep, + dependency('cairo-gobject'), +- dependency('grilo-0.3', version: '>= 0.3.0') + ] + + cflags += [ +-- +2.30.2 + |