diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4a2aeed1b..86e6b27d6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -31,7 +31,6 @@ variables:
gnome-desktop3-devel
gnome-online-accounts-devel
gnome-settings-daemon-devel
- grilo-devel
gsettings-desktop-schemas-devel
gsound-devel
gtk3-devel ibus-devel
diff --git a/build-aux/flatpak/org.gnome.Settings.json b/build-aux/flatpak/org.gnome.Settings.json
index 3e19894b0..b64b4c2fd 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 3a3027b13..000000000
--- 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 .
- *
- * Author: Thomas Wood
- *
- */
-
-#include
-
-#include "bg-pictures-source.h"
-
-#include "cc-background-grilo-miner.h"
-#include "cc-background-item.h"
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#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 f62cbe532..000000000
--- 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 .
- *
- * Author: Thomas Wood
- *
- */
-
-#pragma once
-
-#include
-#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 6c8f56136..04fd85c47 100644
--- a/panels/background/cc-background-chooser.c
+++ b/panels/background/cc-background-chooser.c
@@ -25,7 +25,6 @@
#include
#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 85c09daf6..000000000
--- 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 .
- */
-
-#include
-
-#include
-#include
-
-#define GOA_API_IS_SUBJECT_TO_CHANGE
-#include
-
-#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 b018129ae..000000000
--- 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 .
- */
-
-#pragma once
-
-#include
-
-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 29dedf165..3e50f506b 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 e9fa398d4..eb5e9ec84 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 += [