summaryrefslogtreecommitdiff
path: root/0001-Remove-Facebook-Flickr-and-Google-support.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-Remove-Facebook-Flickr-and-Google-support.patch')
-rw-r--r--0001-Remove-Facebook-Flickr-and-Google-support.patch1987
1 files changed, 1987 insertions, 0 deletions
diff --git a/0001-Remove-Facebook-Flickr-and-Google-support.patch b/0001-Remove-Facebook-Flickr-and-Google-support.patch
new file mode 100644
index 0000000..8c6f104
--- /dev/null
+++ b/0001-Remove-Facebook-Flickr-and-Google-support.patch
@@ -0,0 +1,1987 @@
+From ec6ed17f9e55b73e7bf42cf9e119d6c2504e58ba Mon Sep 17 00:00:00 2001
+From: Debarshi Ray <debarshir@gnome.org>
+Date: Fri, 23 Apr 2021 02:54:59 +0200
+Subject: [PATCH] Remove Facebook, Flickr and Google support
+
+In theory, support for Facebook, Flickr and Google is still desired.
+However, right now Facebook and Google are completely broken, and the
+Grilo code used for Flickr support has code quality issues.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=1913641
+---
+ meson.build | 3 -
+ src/meson.build | 7 -
+ src/photos-application.c | 24 --
+ src/photos-facebook-item.c | 339 ---------------------
+ src/photos-facebook-item.h | 36 ---
+ src/photos-flickr-item.c | 407 -------------------------
+ src/photos-flickr-item.h | 35 ---
+ src/photos-google-item.c | 349 ---------------------
+ src/photos-google-item.h | 36 ---
+ src/photos-share-point-google.c | 516 --------------------------------
+ src/photos-share-point-google.h | 35 ---
+ src/photos-utils.c | 8 -
+ 12 files changed, 1795 deletions(-)
+ delete mode 100644 src/photos-facebook-item.c
+ delete mode 100644 src/photos-facebook-item.h
+ delete mode 100644 src/photos-flickr-item.c
+ delete mode 100644 src/photos-flickr-item.h
+ delete mode 100644 src/photos-google-item.c
+ delete mode 100644 src/photos-google-item.h
+ delete mode 100644 src/photos-share-point-google.c
+ delete mode 100644 src/photos-share-point-google.h
+
+diff --git a/meson.build b/meson.build
+index ee1ca0dd3080..0d8ca768da1d 100644
+--- a/meson.build
++++ b/meson.build
+@@ -166,13 +166,10 @@ goa_dep = dependency('goa-1.0', version: '>= 3.8.0')
+ config_h.set('GOA_API_IS_SUBJECT_TO_CHANGE', true)
+
+ gobject_dep = dependency('gobject-2.0')
+-grilo_dep = dependency('grilo-0.3', version: '>= 0.3.5')
+ gsettings_desktop_schemas_dep = dependency('gsettings-desktop-schemas')
+ gtk_dep = dependency('gtk+-3.0', version: '>= 3.22.16')
+ gtk_unix_print_dep = dependency('gtk+-unix-print-3.0')
+ libdazzle_dep = dependency('libdazzle-1.0', version: '>= 3.26.0')
+-libgdata_dep = dependency('libgdata', version: '>= 0.17.13')
+-libgfgraph_dep = dependency('libgfbgraph-0.2', version: '>= 0.2.1')
+ libhandy_dep = dependency ('libhandy-1', version: '>= 1.1.90')
+ libjpeg_dep = dependency('libjpeg')
+ libpng_dep = dependency('libpng16')
+diff --git a/src/meson.build b/src/meson.build
+index 154f7d528814..becaa9cb480f 100644
+--- a/src/meson.build
++++ b/src/meson.build
+@@ -130,15 +130,12 @@ sources = common_sources + files(
+ 'photos-embed.c',
+ 'photos-empty-results-box.c',
+ 'photos-error-box.c',
+- 'photos-facebook-item.c',
+ 'photos-fetch-collection-state-job.c',
+ 'photos-fetch-collections-job.c',
+ 'photos-fetch-ids-job.c',
+ 'photos-fetch-metas-job.c',
+ 'photos-filterable.c',
+- 'photos-flickr-item.c',
+ 'photos-gesture-zoom.c',
+- 'photos-google-item.c',
+ 'photos-image-view.c',
+ 'photos-image-view-helper.c',
+ 'photos-import-dialog.c',
+@@ -188,7 +185,6 @@ sources = common_sources + files(
+ 'photos-share-notification.c',
+ 'photos-share-point.c',
+ 'photos-share-point-email.c',
+- 'photos-share-point-google.c',
+ 'photos-share-point-manager.c',
+ 'photos-share-point-online.c',
+ 'photos-single-item-job.c',
+@@ -387,13 +383,10 @@ deps = common_deps + [
+ geocode_glib_dep,
+ gexiv_dep,
+ goa_dep,
+- grilo_dep,
+ gsettings_desktop_schemas_dep,
+ gtk_dep,
+ gtk_unix_print_dep,
+ libgd_dep,
+- libgdata_dep,
+- libgfgraph_dep,
+ libhandy_dep,
+ m_dep,
+ tracker_sparql_dep,
+diff --git a/src/photos-application.c b/src/photos-application.c
+index 9017fd3ef621..83ec1ad65916 100644
+--- a/src/photos-application.c
++++ b/src/photos-application.c
+@@ -35,7 +35,6 @@
+ #include <gio/gio.h>
+ #include <glib.h>
+ #include <glib/gi18n.h>
+-#include <grilo.h>
+ #include <handy.h>
+ #include <tracker-sparql.h>
+
+@@ -2586,11 +2585,9 @@ static void
+ photos_application_startup (GApplication *application)
+ {
+ PhotosApplication *self = PHOTOS_APPLICATION (application);
+- GrlRegistry *registry;
+ GtkIconTheme *icon_theme;
+ GtkSettings *settings;
+ GVariant *state;
+- gboolean grl_plugins_loaded;
+ const gchar *delete_accels[3] = {"Delete", "KP_Delete", NULL};
+ const gchar *edit_accels[2] = {"<Primary>e", NULL};
+ const gchar *fullscreen_accels[2] = {"F11", NULL};
+@@ -2613,27 +2610,6 @@ photos_application_startup (GApplication *application)
+
+ photos_gegl_init ();
+
+- grl_init (NULL, NULL);
+- registry = grl_registry_get_default ();
+-
+- {
+- g_autoptr (GError) error = NULL;
+-
+- grl_plugins_loaded = grl_registry_load_all_plugins (registry, FALSE, &error);
+- if (error != NULL)
+- g_warning ("Unable to load Grilo plugins: %s", error->message);
+- }
+-
+- if (grl_plugins_loaded)
+- {
+- {
+- g_autoptr (GError) error = NULL;
+-
+- if (!grl_registry_activate_plugin_by_id (registry, "grl-flickr", &error))
+- g_warning ("Unable to activate Grilo's Flickr plugin: %s", error->message);
+- }
+- }
+-
+ self->create_window_cancellable = g_cancellable_new ();
+ self->refresh_miner_ids = g_hash_table_new (g_direct_hash, g_direct_equal);
+
+diff --git a/src/photos-facebook-item.c b/src/photos-facebook-item.c
+deleted file mode 100644
+index 9053550a0409..000000000000
+--- a/src/photos-facebook-item.c
++++ /dev/null
+@@ -1,339 +0,0 @@
+-/*
+- * Photos - access, organize and share your photos on GNOME
+- * Copyright © 2013 Álvaro Peña
+- * Copyright © 2014 – 2019 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 3 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/>.
+- */
+-
+-/* Based on code from:
+- * + Documents
+- */
+-
+-
+-#include "config.h"
+-
+-#include <gfbgraph/gfbgraph.h>
+-#include <gfbgraph/gfbgraph-goa-authorizer.h>
+-#include <gio/gio.h>
+-#include <glib.h>
+-#include <glib/gi18n.h>
+-#include <goa/goa.h>
+-
+-#include "photos-base-manager.h"
+-#include "photos-debug.h"
+-#include "photos-error.h"
+-#include "photos-facebook-item.h"
+-#include "photos-search-context.h"
+-#include "photos-source.h"
+-#include "photos-utils.h"
+-
+-
+-struct _PhotosFacebookItem
+-{
+- PhotosBaseItem parent_instance;
+- PhotosBaseManager *src_mngr;
+-};
+-
+-
+-G_DEFINE_TYPE_WITH_CODE (PhotosFacebookItem, photos_facebook_item, PHOTOS_TYPE_BASE_ITEM,
+- photos_utils_ensure_extension_points ();
+- g_io_extension_point_implement (PHOTOS_BASE_ITEM_EXTENSION_POINT_NAME,
+- g_define_type_id,
+- "facebook",
+- 0));
+-
+-
+-static gchar *
+-photos_facebook_item_create_filename_fallback (PhotosBaseItem *item)
+-{
+- const gchar *const facebook_prefix = "facebook:";
+- const gchar *identifier;
+- const gchar *mime_type;
+- g_autofree gchar *extension = NULL;
+- gchar *ret_val;
+- gsize prefix_len;
+-
+- prefix_len = strlen (facebook_prefix);
+- identifier = photos_base_item_get_identifier (item) + prefix_len;
+- mime_type = photos_base_item_get_mime_type (item);
+- extension = photos_utils_get_extension_from_mime_type (mime_type);
+- if (extension == NULL)
+- extension = g_strdup ("tmp");
+-
+- ret_val = g_strdup_printf ("%s.%s", identifier, extension);
+-
+- return ret_val;
+-}
+-
+-
+-static gchar *
+-photos_facebook_item_create_name_fallback (PhotosBaseItem *item)
+-{
+- PhotosFacebookItem *self = PHOTOS_FACEBOOK_ITEM (item);
+- g_autoptr (GDateTime) date_modified = NULL;
+- const gchar *provider_name;
+- g_autofree gchar *date_modified_str = NULL;
+- gchar *ret_val;
+- gint64 mtime;
+-
+- provider_name = photos_utils_get_provider_name (self->src_mngr, item);
+-
+- mtime = photos_base_item_get_mtime (item);
+- date_modified = g_date_time_new_from_unix_local (mtime);
+- date_modified_str = g_date_time_format (date_modified, "%x");
+-
+- /* Translators: this is the fallback title in the form
+- * "Facebook — 2nd January 2013".
+- */
+- ret_val = g_strdup_printf (_("%s — %s"), provider_name, date_modified_str);
+-
+- return ret_val;
+-}
+-
+-
+-static GFBGraphPhoto *
+-photos_facebook_get_gfbgraph_photo (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
+-{
+- PhotosFacebookItem *self = PHOTOS_FACEBOOK_ITEM (item);
+- GFBGraphGoaAuthorizer *authorizer = NULL; /* TODO: use g_autoptr */
+- GFBGraphPhoto *photo = NULL;
+- GoaObject *object;
+- PhotosSource *source;
+- const gchar *const facebook_prefix = "facebook:";
+- const gchar *identifier;
+- const gchar *resource_urn;
+- gsize prefix_len;
+-
+- resource_urn = photos_base_item_get_resource_urn (item);
+- source = PHOTOS_SOURCE (photos_base_manager_get_object_by_id (self->src_mngr, resource_urn));
+- object = photos_source_get_goa_object (source);
+- authorizer = gfbgraph_goa_authorizer_new (object);
+-
+- if (!gfbgraph_authorizer_refresh_authorization (GFBGRAPH_AUTHORIZER (authorizer), cancellable, error))
+- goto out;
+-
+- prefix_len = strlen (facebook_prefix);
+- identifier = photos_base_item_get_identifier (item) + prefix_len;
+- photo = gfbgraph_photo_new_from_id (GFBGRAPH_AUTHORIZER (authorizer), identifier, error);
+-
+- out:
+- g_clear_object (&authorizer);
+- return photo;
+-}
+-
+-
+-static gboolean
+-photos_facebook_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
+-{
+- g_autoptr (GFile) local_file = NULL;
+- g_autoptr (GFile) remote_file = NULL;
+- GFBGraphPhoto *photo = NULL; /* TODO: use g_autoptr */
+- const GFBGraphPhotoImage *thumbnail_image;
+- gboolean ret_val = FALSE;
+- const gchar *uri;
+- g_autofree gchar *local_dir = NULL;
+- g_autofree gchar *local_path = NULL;
+- gint64 height;
+- gint64 width;
+- guint size;
+-
+- photo = photos_facebook_get_gfbgraph_photo (item, cancellable, error);
+- if (photo == NULL)
+- goto out;
+-
+- size = (guint) photos_utils_get_icon_size ();
+- thumbnail_image = gfbgraph_photo_get_image_near_width (photo, size);
+- if (thumbnail_image == NULL)
+- {
+- g_set_error (error, PHOTOS_ERROR, 0, "Failed to find an image for the thumbnail");
+- goto out;
+- }
+-
+- remote_file = g_file_new_for_uri (thumbnail_image->source);
+-
+- local_path = photos_base_item_create_thumbnail_path (item);
+- local_file = g_file_new_for_path (local_path);
+- local_dir = g_path_get_dirname (local_path);
+- g_mkdir_with_parents (local_dir, 0700);
+-
+- uri = photos_base_item_get_uri (item);
+-
+- height = photos_base_item_get_height (item);
+- width = photos_base_item_get_width (item);
+-
+- photos_debug (PHOTOS_DEBUG_NETWORK, "Downloading %s from Facebook to %s", thumbnail_image->source, local_path);
+- if (!photos_utils_file_copy_as_thumbnail (remote_file,
+- local_file,
+- uri,
+- height,
+- width,
+- cancellable,
+- error))
+- goto out;
+-
+- ret_val = TRUE;
+-
+- out:
+- g_clear_object (&photo);
+- return ret_val;
+-}
+-
+-
+-static GFile *
+-photos_facebook_item_download (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
+-{
+- GFile *ret_val = NULL;
+- g_autoptr (GFile) local_file = NULL;
+- g_autoptr (GFile) remote_file = NULL;
+- GFBGraphPhoto *photo = NULL; /* TODO: use g_autoptr */
+- const GFBGraphPhotoImage *higher_image;
+- const gchar *cache_dir;
+- const gchar *local_filename;
+- g_autofree gchar *local_dir = NULL;
+- g_autofree gchar *local_path = NULL;
+-
+- cache_dir = g_get_user_cache_dir ();
+- local_dir = g_build_filename (cache_dir, PACKAGE_TARNAME, "facebook", NULL);
+- g_mkdir_with_parents (local_dir, 0700);
+-
+- local_filename = photos_base_item_get_filename (item);
+- local_path = g_build_filename (local_dir, local_filename, NULL);
+- local_file = g_file_new_for_path (local_path);
+- if (g_file_test (local_path, G_FILE_TEST_EXISTS))
+- goto end;
+-
+- photo = photos_facebook_get_gfbgraph_photo (item, cancellable, error);
+- if (photo == NULL)
+- goto out;
+-
+- higher_image = gfbgraph_photo_get_image_hires (photo);
+- if (higher_image == NULL)
+- {
+- g_set_error (error, PHOTOS_ERROR, 0, "Failed to find a high resolution image");
+- goto out;
+- }
+-
+- remote_file = g_file_new_for_uri (higher_image->source);
+-
+- photos_debug (PHOTOS_DEBUG_NETWORK, "Downloading %s from Facebook to %s", higher_image->source, local_path);
+- if (!g_file_copy (remote_file,
+- local_file,
+- G_FILE_COPY_ALL_METADATA | G_FILE_COPY_OVERWRITE,
+- cancellable,
+- NULL,
+- NULL,
+- error))
+- {
+- g_file_delete (local_file, NULL, NULL);
+- goto out;
+- }
+-
+- end:
+- ret_val = g_object_ref (local_file);
+-
+- out:
+- g_clear_object (&photo);
+- return ret_val;
+-}
+-
+-
+-static GtkWidget *
+-photos_facebook_item_get_source_widget (PhotosBaseItem *item)
+-{
+- PhotosFacebookItem *self = PHOTOS_FACEBOOK_ITEM (item);
+- GtkWidget *source_widget;
+- const gchar *name;
+-
+- name = photos_utils_get_provider_name (self->src_mngr, item);
+- source_widget = gtk_link_button_new_with_label ("https://www.facebook.com/", name);
+- gtk_widget_set_halign (source_widget, GTK_ALIGN_START);
+-
+- return source_widget;
+-}
+-
+-
+-/* TODO */
+-static void
+-photos_facebook_item_open (PhotosBaseItem *item, GtkWindow *parent, guint32 timestamp)
+-{
+- const gchar *facebook_uri;
+-
+- facebook_uri = photos_base_item_get_uri (item);
+-
+- {
+- g_autoptr (GError) error = NULL;
+-
+- gtk_show_uri_on_window (parent, facebook_uri, timestamp, &error);
+- if (error != NULL)
+- g_warning ("Unable to show URI %s: %s", facebook_uri, error->message);
+- }
+-}
+-
+-
+-static void
+-photos_facebook_item_constructed (GObject *object)
+-{
+- PhotosFacebookItem *self = PHOTOS_FACEBOOK_ITEM (object);
+- const gchar *name;
+-
+- G_OBJECT_CLASS (photos_facebook_item_parent_class)->constructed (object);
+-
+- name = photos_utils_get_provider_name (self->src_mngr, PHOTOS_BASE_ITEM (self));
+- photos_base_item_set_default_app_name (PHOTOS_BASE_ITEM (self), name);
+-}
+-
+-
+-static void
+-photos_facebook_item_dispose (GObject *object)
+-{
+- PhotosFacebookItem *self = PHOTOS_FACEBOOK_ITEM (object);
+-
+- g_clear_object (&self->src_mngr);
+-
+- G_OBJECT_CLASS (photos_facebook_item_parent_class)->dispose (object);
+-}
+-
+-
+-static void
+-photos_facebook_item_init (PhotosFacebookItem *self)
+-{
+- GApplication *app;
+- PhotosSearchContextState *state;
+-
+- app = g_application_get_default ();
+- state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app));
+-
+- self->src_mngr = g_object_ref (state->src_mngr);
+-}
+-
+-
+-static void
+-photos_facebook_item_class_init (PhotosFacebookItemClass *class)
+-{
+- GObjectClass *object_class = G_OBJECT_CLASS (class);
+- PhotosBaseItemClass *base_item_class = PHOTOS_BASE_ITEM_CLASS (class);
+-
+- base_item_class->miner_name = "org.gnome.OnlineMiners.Facebook";
+- base_item_class->miner_object_path = "/org/gnome/OnlineMiners/Facebook";
+-
+- object_class->constructed = photos_facebook_item_constructed;
+- object_class->dispose = photos_facebook_item_dispose;
+- base_item_class->create_filename_fallback = photos_facebook_item_create_filename_fallback;
+- base_item_class->create_name_fallback = photos_facebook_item_create_name_fallback;
+- base_item_class->create_thumbnail = photos_facebook_item_create_thumbnail;
+- base_item_class->download = photos_facebook_item_download;
+- base_item_class->get_source_widget = photos_facebook_item_get_source_widget;
+- base_item_class->open = photos_facebook_item_open;
+-}
+diff --git a/src/photos-facebook-item.h b/src/photos-facebook-item.h
+deleted file mode 100644
+index 7d4a4924769b..000000000000
+--- a/src/photos-facebook-item.h
++++ /dev/null
+@@ -1,36 +0,0 @@
+-/*
+- * Photos - access, organize and share your photos on GNOME
+- * Copyright © 2013 Álvaro Peña
+- * Copyright © 2016 – 2019 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 3 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/>.
+- */
+-
+-/* Based on code from:
+- * + Documents
+- */
+-
+-#ifndef PHOTOS_FACEBOOK_ITEM_H
+-#define PHOTOS_FACEBOOK_ITEM_H
+-
+-#include "photos-base-item.h"
+-
+-G_BEGIN_DECLS
+-
+-#define PHOTOS_TYPE_FACEBOOK_ITEM (photos_facebook_item_get_type ())
+-G_DECLARE_FINAL_TYPE (PhotosFacebookItem, photos_facebook_item, PHOTOS, FACEBOOK_ITEM, PhotosBaseItem);
+-
+-G_END_DECLS
+-
+-#endif /* PHOTOS_FACEBOOK_ITEM_H */
+diff --git a/src/photos-flickr-item.c b/src/photos-flickr-item.c
+deleted file mode 100644
+index b9f81d7c04c5..000000000000
+--- a/src/photos-flickr-item.c
++++ /dev/null
+@@ -1,407 +0,0 @@
+-/*
+- * Photos - access, organize and share your photos on GNOME
+- * Copyright © 2013 – 2019 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 3 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/>.
+- */
+-
+-/* Based on code from:
+- * + Documents
+- */
+-
+-
+-#include "config.h"
+-
+-#include <string.h>
+-
+-#include <gio/gio.h>
+-#include <glib.h>
+-#include <glib/gi18n.h>
+-#include <goa/goa.h>
+-#include <grilo.h>
+-
+-#include "photos-base-manager.h"
+-#include "photos-debug.h"
+-#include "photos-error.h"
+-#include "photos-flickr-item.h"
+-#include "photos-search-context.h"
+-#include "photos-source.h"
+-#include "photos-utils.h"
+-
+-
+-struct _PhotosFlickrItem
+-{
+- PhotosBaseItem parent_instance;
+- PhotosBaseManager *src_mngr;
+-};
+-
+-
+-G_DEFINE_TYPE_WITH_CODE (PhotosFlickrItem, photos_flickr_item, PHOTOS_TYPE_BASE_ITEM,
+- photos_utils_ensure_extension_points ();
+- g_io_extension_point_implement (PHOTOS_BASE_ITEM_EXTENSION_POINT_NAME,
+- g_define_type_id,
+- "flickr",
+- 0));
+-
+-
+-typedef struct _PhotosFlickrItemSyncData PhotosFlickrItemSyncData;
+-
+-struct _PhotosFlickrItemSyncData
+-{
+- GError **error;
+- GMainLoop *loop;
+- gboolean op_res;
+-};
+-
+-
+-static gchar *
+-photos_flickr_item_create_filename_fallback (PhotosBaseItem *item)
+-{
+- g_autoptr (GFile) file = NULL;
+- const gchar *uri;
+- gchar *ret_val;
+-
+- uri = photos_base_item_get_uri (item);
+- file = g_file_new_for_uri (uri);
+- ret_val = g_file_get_basename (file);
+-
+- return ret_val;
+-}
+-
+-
+-static gchar *
+-photos_flickr_item_create_name_fallback (PhotosBaseItem *item)
+-{
+- PhotosFlickrItem *self = PHOTOS_FLICKR_ITEM (item);
+- g_autoptr (GDateTime) date_modified = NULL;
+- const gchar *provider_name;
+- g_autofree gchar *date_modified_str = NULL;
+- gchar *ret_val;
+- gint64 mtime;
+-
+- provider_name = photos_utils_get_provider_name (self->src_mngr, item);
+-
+- mtime = photos_base_item_get_mtime (item);
+- date_modified = g_date_time_new_from_unix_local (mtime);
+- date_modified_str = g_date_time_format (date_modified, "%x");
+-
+- /* Translators: this is the fallback title in the form
+- * "Facebook — 2nd January 2013".
+- */
+- ret_val = g_strdup_printf (_("%s — %s"), provider_name, date_modified_str);
+-
+- return ret_val;
+-}
+-
+-
+-static GrlOperationOptions *
+-photos_flickr_item_get_grl_options (GrlSource *source)
+-{
+- GrlCaps *caps;
+- GrlOperationOptions *options;
+-
+- caps = grl_source_get_caps (source, GRL_OP_RESOLVE);
+- options = grl_operation_options_new (caps);
+- return options;
+-}
+-
+-
+-static void
+-photos_flickr_item_source_resolve (GrlSource *source,
+- guint operation_id,
+- GrlMedia *media,
+- gpointer user_data,
+- const GError *error)
+-{
+- PhotosFlickrItemSyncData *data = (PhotosFlickrItemSyncData *) user_data;
+-
+- if (error != NULL)
+- {
+- if (data->error != NULL)
+- *(data->error) = g_error_copy (error);
+- data->op_res = FALSE;
+- }
+- else
+- data->op_res = TRUE;
+-
+- g_main_loop_quit (data->loop);
+-}
+-
+-
+-static gboolean
+-photos_flickr_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
+-{
+- PhotosFlickrItemSyncData data;
+- g_autoptr (GFile) local_file = NULL;
+- g_autoptr (GFile) remote_file = NULL;
+- g_autoptr (GList) keys = NULL;
+- g_autoptr (GMainContext) context = NULL;
+- g_autoptr (GrlMedia) media = NULL;
+- g_autoptr (GrlOperationOptions) options = NULL;
+- GrlRegistry *registry;
+- GrlSource *source;
+- gboolean ret_val = FALSE;
+- const gchar *const flickr_prefix = "flickr:";
+- const gchar *const resource_prefix = "gd:goa-account:";
+- const gchar *flickr_id;
+- const gchar *goa_id;
+- const gchar *identifier;
+- const gchar *resource_urn;
+- const gchar *thumbnail_uri;
+- const gchar *uri;
+- g_autofree gchar *grilo_id = NULL;
+- g_autofree gchar *local_dir = NULL;
+- g_autofree gchar *local_path = NULL;
+- gint64 height;
+- gint64 width;
+- gsize prefix_len;
+-
+- data.error = error;
+- data.loop = NULL;
+-
+- prefix_len = strlen (flickr_prefix);
+- identifier = photos_base_item_get_identifier (item);
+- if (strlen (identifier) <= prefix_len || !g_str_has_prefix (identifier, flickr_prefix))
+- {
+- g_set_error (error,
+- PHOTOS_ERROR,
+- 0,
+- "Invalid nao:identifier for Flickr item %s",
+- identifier);
+- goto out;
+- }
+- flickr_id = identifier + prefix_len;
+-
+- prefix_len = strlen (resource_prefix);
+- resource_urn = photos_base_item_get_resource_urn (item);
+- if (strlen (resource_urn) <= prefix_len || !g_str_has_prefix (resource_urn, resource_prefix))
+- {
+- g_set_error (error,
+- PHOTOS_ERROR,
+- 0,
+- "Invalid nie:dataSource for Flickr item %s",
+- resource_urn);
+- goto out;
+- }
+- goa_id = resource_urn + prefix_len;
+-
+- grilo_id = g_strdup_printf ("grl-flickr-%s", goa_id);
+- registry = grl_registry_get_default ();
+- source = grl_registry_lookup_source (registry, grilo_id);
+- if (source == NULL)
+- {
+- g_set_error (error,
+- PHOTOS_ERROR,
+- 0,
+- "Failed to find a GrlSource for %s",
+- grilo_id);
+- goto out;
+- }
+-
+- media = grl_media_new ();
+- grl_media_set_id (media, flickr_id);
+-
+- keys = grl_metadata_key_list_new (GRL_METADATA_KEY_THUMBNAIL, GRL_METADATA_KEY_INVALID);
+- options = photos_flickr_item_get_grl_options (source);
+-
+- context = g_main_context_new ();
+- g_main_context_push_thread_default (context);
+- data.loop = g_main_loop_new (context, FALSE);
+-
+- grl_source_resolve (source, media, keys, options, photos_flickr_item_source_resolve, &data);
+- g_main_loop_run (data.loop);
+- g_main_context_pop_thread_default (context);
+-
+- if (!data.op_res)
+- goto out;
+-
+- thumbnail_uri = grl_media_get_thumbnail (media);
+- remote_file = g_file_new_for_uri (thumbnail_uri);
+-
+- local_path = photos_base_item_create_thumbnail_path (item);
+- local_file = g_file_new_for_path (local_path);
+- local_dir = g_path_get_dirname (local_path);
+- g_mkdir_with_parents (local_dir, 0700);
+-
+- uri = photos_base_item_get_uri (item);
+-
+- height = photos_base_item_get_height (item);
+- width = photos_base_item_get_width (item);
+-
+- photos_debug (PHOTOS_DEBUG_NETWORK, "Downloading %s from Flickr to %s", thumbnail_uri, local_path);
+- if (!photos_utils_file_copy_as_thumbnail (remote_file,
+- local_file,
+- uri,
+- height,
+- width,
+- cancellable,
+- error))
+- goto out;
+-
+- ret_val = TRUE;
+-
+- out:
+- if (data.loop != NULL)
+- g_main_loop_unref (data.loop);
+- return ret_val;
+-}
+-
+-
+-static GFile *
+-photos_flickr_item_download (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
+-{
+- GFile *ret_val = NULL;
+- g_autoptr (GFile) local_file = NULL;
+- g_autoptr (GFile) remote_file = NULL;
+- const gchar *cache_dir;
+- const gchar *local_filename;
+- const gchar *uri;
+- g_autofree gchar *local_dir = NULL;
+- g_autofree gchar *local_path = NULL;
+-
+- uri = photos_base_item_get_uri (item);
+- remote_file = g_file_new_for_uri (uri);
+- cache_dir = g_get_user_cache_dir ();
+-
+- local_dir = g_build_filename (cache_dir, PACKAGE_TARNAME, "flickr", NULL);
+- g_mkdir_with_parents (local_dir, 0700);
+-
+- local_filename = photos_base_item_get_filename (item);
+- local_path = g_build_filename (local_dir, local_filename, NULL);
+- local_file = g_file_new_for_path (local_path);
+-
+- if (!g_file_test (local_path, G_FILE_TEST_EXISTS))
+- {
+- photos_debug (PHOTOS_DEBUG_NETWORK, "Downloading %s from Flickr to %s", uri, local_path);
+- if (!g_file_copy (remote_file,
+- local_file,
+- G_FILE_COPY_ALL_METADATA | G_FILE_COPY_OVERWRITE,
+- cancellable,
+- NULL,
+- NULL,
+- error))
+- {
+- g_file_delete (local_file, NULL, NULL);
+- goto out;
+- }
+- }
+-
+- ret_val = g_object_ref (local_file);
+-
+- out:
+- return ret_val;
+-}
+-
+-
+-static GtkWidget *
+-photos_flickr_item_get_source_widget (PhotosBaseItem *item)
+-{
+- PhotosFlickrItem *self = PHOTOS_FLICKR_ITEM (item);
+- GtkWidget *source_widget;
+- const gchar *name;
+-
+- name = photos_utils_get_provider_name (self->src_mngr, item);
+- source_widget = gtk_link_button_new_with_label ("https://www.flickr.com/", name);
+- gtk_widget_set_halign (source_widget, GTK_ALIGN_START);
+-
+- return source_widget;
+-}
+-
+-
+-static void
+-photos_flickr_item_open (PhotosBaseItem *item, GtkWindow *parent, guint32 timestamp)
+-{
+- PhotosFlickrItem *self = PHOTOS_FLICKR_ITEM (item);
+- GoaAccount *account;
+- GoaObject *object;
+- PhotosSource *source;
+- const gchar *identifier;
+- const gchar *identity;
+- const gchar *resource_urn;
+- g_autofree gchar *flickr_uri = NULL;
+-
+- identifier = photos_base_item_get_identifier (item) + strlen ("flickr:");
+-
+- resource_urn = photos_base_item_get_resource_urn (item);
+- source = PHOTOS_SOURCE (photos_base_manager_get_object_by_id (self->src_mngr, resource_urn));
+- object = photos_source_get_goa_object (source);
+- account = goa_object_peek_account (object);
+- identity = goa_account_get_identity (account);
+-
+- flickr_uri = g_strdup_printf ("https://www.flickr.com/photos/%s/%s", identity, identifier);
+-
+- {
+- g_autoptr (GError) error = NULL;
+-
+- if (!gtk_show_uri_on_window (parent, flickr_uri, timestamp, &error))
+- g_warning ("Unable to show URI %s: %s", flickr_uri, error->message);
+- }
+-}
+-
+-
+-static void
+-photos_flickr_item_constructed (GObject *object)
+-{
+- PhotosFlickrItem *self = PHOTOS_FLICKR_ITEM (object);
+- const gchar *name;
+-
+- G_OBJECT_CLASS (photos_flickr_item_parent_class)->constructed (object);
+-
+- name = photos_utils_get_provider_name (self->src_mngr, PHOTOS_BASE_ITEM (self));
+- photos_base_item_set_default_app_name (PHOTOS_BASE_ITEM (self), name);
+-}
+-
+-
+-static void
+-photos_flickr_item_dispose (GObject *object)
+-{
+- PhotosFlickrItem *self = PHOTOS_FLICKR_ITEM (object);
+-
+- g_clear_object (&self->src_mngr);
+-
+- G_OBJECT_CLASS (photos_flickr_item_parent_class)->dispose (object);
+-}
+-
+-
+-static void
+-photos_flickr_item_init (PhotosFlickrItem *self)
+-{
+- GApplication *app;
+- PhotosSearchContextState *state;
+-
+- app = g_application_get_default ();
+- state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app));
+-
+- self->src_mngr = g_object_ref (state->src_mngr);
+-}
+-
+-
+-static void
+-photos_flickr_item_class_init (PhotosFlickrItemClass *class)
+-{
+- GObjectClass *object_class = G_OBJECT_CLASS (class);
+- PhotosBaseItemClass *base_item_class = PHOTOS_BASE_ITEM_CLASS (class);
+-
+- base_item_class->miner_name = "org.gnome.OnlineMiners.Flickr";
+- base_item_class->miner_object_path = "/org/gnome/OnlineMiners/Flickr";
+-
+- object_class->constructed = photos_flickr_item_constructed;
+- object_class->dispose = photos_flickr_item_dispose;
+- base_item_class->create_filename_fallback = photos_flickr_item_create_filename_fallback;
+- base_item_class->create_name_fallback = photos_flickr_item_create_name_fallback;
+- base_item_class->create_thumbnail = photos_flickr_item_create_thumbnail;
+- base_item_class->download = photos_flickr_item_download;
+- base_item_class->get_source_widget = photos_flickr_item_get_source_widget;
+- base_item_class->open = photos_flickr_item_open;
+-}
+diff --git a/src/photos-flickr-item.h b/src/photos-flickr-item.h
+deleted file mode 100644
+index cd130844bce2..000000000000
+--- a/src/photos-flickr-item.h
++++ /dev/null
+@@ -1,35 +0,0 @@
+-/*
+- * Photos - access, organize and share your photos on GNOME
+- * Copyright © 2012 – 2019 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 3 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/>.
+- */
+-
+-/* Based on code from:
+- * + Documents
+- */
+-
+-#ifndef PHOTOS_FLICKR_ITEM_H
+-#define PHOTOS_FLICKR_ITEM_H
+-
+-#include "photos-base-item.h"
+-
+-G_BEGIN_DECLS
+-
+-#define PHOTOS_TYPE_FLICKR_ITEM (photos_flickr_item_get_type ())
+-G_DECLARE_FINAL_TYPE (PhotosFlickrItem, photos_flickr_item, PHOTOS, FLICKR_ITEM, PhotosBaseItem);
+-
+-G_END_DECLS
+-
+-#endif /* PHOTOS_LOCAL_ITEM_H */
+diff --git a/src/photos-google-item.c b/src/photos-google-item.c
+deleted file mode 100644
+index 5737f958b7a5..000000000000
+--- a/src/photos-google-item.c
++++ /dev/null
+@@ -1,349 +0,0 @@
+-/*
+- * Photos - access, organize and share your photos on GNOME
+- * Copyright © 2014 – 2019 Red Hat, Inc.
+- * Copyright © 2014 Saurav Agarwalla
+- *
+- * 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 3 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/>.
+- */
+-
+-/* Based on code from:
+- * + Documents
+- */
+-
+-
+-#include "config.h"
+-
+-#include <gdata/gdata.h>
+-#include <gio/gio.h>
+-#include <glib.h>
+-#include <glib/gi18n.h>
+-
+-#include "photos-base-manager.h"
+-#include "photos-debug.h"
+-#include "photos-error.h"
+-#include "photos-google-item.h"
+-#include "photos-search-context.h"
+-#include "photos-source.h"
+-#include "photos-utils.h"
+-
+-
+-struct _PhotosGoogleItem
+-{
+- PhotosBaseItem parent_instance;
+- PhotosBaseManager *src_mngr;
+-};
+-
+-
+-G_DEFINE_TYPE_WITH_CODE (PhotosGoogleItem, photos_google_item, PHOTOS_TYPE_BASE_ITEM,
+- photos_utils_ensure_extension_points ();
+- g_io_extension_point_implement (PHOTOS_BASE_ITEM_EXTENSION_POINT_NAME,
+- g_define_type_id,
+- "google",
+- 0));
+-
+-
+-static gchar *
+-photos_google_item_create_filename_fallback (PhotosBaseItem *item)
+-{
+- const gchar *identifier;
+- const gchar *mime_type;
+- gchar *ret_val;
+- g_autofree gchar *extension = NULL;
+- g_autofree gchar *identifier_hash = NULL;
+-
+- identifier = photos_base_item_get_identifier (item);
+- identifier_hash = g_compute_checksum_for_string (G_CHECKSUM_SHA1, identifier, -1);
+-
+- mime_type = photos_base_item_get_mime_type (item);
+- extension = photos_utils_get_extension_from_mime_type (mime_type);
+- if (extension == NULL)
+- extension = g_strdup ("tmp");
+-
+- ret_val = g_strdup_printf ("%s.%s", identifier_hash, extension);
+-
+- return ret_val;
+-}
+-
+-
+-static gchar *
+-photos_google_item_create_name_fallback (PhotosBaseItem *item)
+-{
+- PhotosGoogleItem *self = PHOTOS_GOOGLE_ITEM (item);
+- g_autoptr (GDateTime) date_modified = NULL;
+- const gchar *provider_name;
+- gchar *ret_val;
+- g_autofree gchar *date_modified_str = NULL;
+- gint64 mtime;
+-
+- provider_name = photos_utils_get_provider_name (self->src_mngr, item);
+-
+- mtime = photos_base_item_get_mtime (item);
+- date_modified = g_date_time_new_from_unix_local (mtime);
+- date_modified_str = g_date_time_format (date_modified, "%x");
+-
+- /* Translators: this is the fallback title in the form
+- * "Facebook — 2nd January 2013".
+- */
+- ret_val = g_strdup_printf (_("%s — %s"), provider_name, date_modified_str);
+-
+- return ret_val;
+-}
+-
+-
+-static GDataEntry *
+-photos_google_get_picasaweb_file (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
+-{
+- PhotosGoogleItem *self = PHOTOS_GOOGLE_ITEM (item);
+- PhotosSource *source;
+- GDataAuthorizationDomain *authorization_domain;
+- GDataEntry *entry;
+- g_autoptr (GDataGoaAuthorizer) authorizer = NULL;
+- g_autoptr (GDataPicasaWebQuery) query = NULL;
+- g_autoptr (GDataPicasaWebService) service = NULL;
+- const gchar *identifier;
+- const gchar *resource_urn;
+-
+- resource_urn = photos_base_item_get_resource_urn (item);
+- source = PHOTOS_SOURCE (photos_base_manager_get_object_by_id (self->src_mngr, resource_urn));
+- authorizer = gdata_goa_authorizer_new (photos_source_get_goa_object (source));
+- identifier = photos_base_item_get_identifier (item) + strlen ("google:picasaweb:");
+- service = gdata_picasaweb_service_new (GDATA_AUTHORIZER (authorizer));
+- authorization_domain = gdata_picasaweb_service_get_primary_authorization_domain ();
+-
+- query = gdata_picasaweb_query_new (NULL);
+- gdata_picasaweb_query_set_image_size (query, "d");
+-
+- entry = gdata_service_query_single_entry (GDATA_SERVICE (service),
+- authorization_domain,
+- identifier,
+- GDATA_QUERY (query),
+- GDATA_TYPE_PICASAWEB_FILE,
+- cancellable,
+- error);
+-
+- return entry;
+-}
+-
+-
+-static gboolean
+-photos_google_item_create_thumbnail (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
+-{
+- g_autoptr (GFile) local_file = NULL;
+- g_autoptr (GFile) remote_file = NULL;
+- GList *l;
+- GList *thumbnails;
+- g_autoptr (GDataEntry) entry = NULL;
+- GDataMediaThumbnail *thumbnail = NULL;
+- gboolean ret_val = FALSE;
+- const gchar *thumbnail_uri;
+- const gchar *uri;
+- g_autofree gchar *local_dir = NULL;
+- g_autofree gchar *local_path = NULL;
+- gint64 height;
+- gint64 width;
+- guint max_width = 0;
+- guint current_width;
+-
+- entry = photos_google_get_picasaweb_file (item, cancellable, error);
+- if (entry == NULL)
+- goto out;
+-
+- thumbnails = gdata_picasaweb_file_get_thumbnails (GDATA_PICASAWEB_FILE (entry));
+- if (thumbnails == NULL)
+- {
+- g_set_error (error, PHOTOS_ERROR, 0, "Failed to find an image for the thumbnail");
+- goto out;
+- }
+-
+- for (l = thumbnails; l != NULL; l = l->next)
+- {
+- current_width = gdata_media_thumbnail_get_width (GDATA_MEDIA_THUMBNAIL (l->data));
+- if (current_width > max_width)
+- {
+- max_width = current_width;
+- thumbnail = GDATA_MEDIA_THUMBNAIL (l->data);
+- }
+- }
+-
+- thumbnail_uri = gdata_media_thumbnail_get_uri (thumbnail);
+- remote_file = g_file_new_for_uri (thumbnail_uri);
+-
+- local_path = photos_base_item_create_thumbnail_path (item);
+- local_file = g_file_new_for_path (local_path);
+- local_dir = g_path_get_dirname (local_path);
+- g_mkdir_with_parents (local_dir, 0700);
+-
+- uri = photos_base_item_get_uri (item);
+-
+- height = photos_base_item_get_height (item);
+- width = photos_base_item_get_width (item);
+-
+- photos_debug (PHOTOS_DEBUG_NETWORK, "Downloading %s from Google to %s", thumbnail_uri, local_path);
+- if (!photos_utils_file_copy_as_thumbnail (remote_file,
+- local_file,
+- uri,
+- height,
+- width,
+- cancellable,
+- error))
+- goto out;
+-
+- ret_val = TRUE;
+-
+- out:
+- return ret_val;
+-}
+-
+-
+-static GFile *
+-photos_google_item_download (PhotosBaseItem *item, GCancellable *cancellable, GError **error)
+-{
+- GFile *ret_val = NULL;
+- g_autoptr (GFile) local_file = NULL;
+- g_autoptr (GFile) remote_file = NULL;
+- g_autoptr (GDataEntry) entry = NULL;
+- const gchar *cache_dir;
+- const gchar *local_filename;
+- const gchar *uri;
+- g_autofree gchar *local_dir = NULL;
+- g_autofree gchar *local_path = NULL;
+-
+- cache_dir = g_get_user_cache_dir ();
+- local_dir = g_build_filename (cache_dir, PACKAGE_TARNAME, "google", NULL);
+- g_mkdir_with_parents (local_dir, 0700);
+-
+- local_filename = photos_base_item_get_filename (item);
+- local_path = g_build_filename (local_dir, local_filename, NULL);
+- local_file = g_file_new_for_path (local_path);
+- if (g_file_test (local_path, G_FILE_TEST_EXISTS))
+- goto end;
+-
+- entry = photos_google_get_picasaweb_file (item, cancellable, error);
+- if (entry == NULL)
+- goto out;
+-
+- uri = gdata_entry_get_content_uri (entry);
+- remote_file = g_file_new_for_uri (uri);
+-
+- photos_debug (PHOTOS_DEBUG_NETWORK, "Downloading %s from Google to %s", uri, local_path);
+- if (!g_file_copy (remote_file,
+- local_file,
+- G_FILE_COPY_ALL_METADATA | G_FILE_COPY_OVERWRITE,
+- cancellable,
+- NULL,
+- NULL,
+- error))
+- {
+- g_file_delete (local_file, NULL, NULL);
+- goto out;
+- }
+-
+- end:
+- ret_val = g_object_ref (local_file);
+-
+- out:
+- return ret_val;
+-}
+-
+-
+-static GtkWidget *
+-photos_google_item_get_source_widget (PhotosBaseItem *item)
+-{
+- PhotosGoogleItem *self = PHOTOS_GOOGLE_ITEM (item);
+- GtkWidget *source_widget;
+- const gchar *name;
+-
+- name = photos_utils_get_provider_name (self->src_mngr, item);
+- source_widget = gtk_link_button_new_with_label ("https://photos.google.com/", name);
+- gtk_widget_set_halign (source_widget, GTK_ALIGN_START);
+-
+- return source_widget;
+-}
+-
+-
+-/* NOTE: For private photos, opening the URI in a browser results in a
+- * 'Sorry, that page was not found.' if the user is not logged in with the respective account
+- */
+-static void
+-photos_google_item_open (PhotosBaseItem *item, GtkWindow *parent, guint32 timestamp)
+-{
+- const gchar *google_uri;
+-
+- google_uri = photos_base_item_get_uri (item);
+-
+- {
+- g_autoptr (GError) error = NULL;
+-
+- gtk_show_uri_on_window (parent, google_uri, timestamp, &error);
+- if (error != NULL)
+- g_warning ("Unable to show URI %s: %s", google_uri, error->message);
+- }
+-}
+-
+-
+-static void
+-photos_google_item_constructed (GObject *object)
+-{
+- PhotosGoogleItem *self = PHOTOS_GOOGLE_ITEM (object);
+- const gchar *name;
+-
+- G_OBJECT_CLASS (photos_google_item_parent_class)->constructed (object);
+-
+- name = photos_utils_get_provider_name (self->src_mngr, PHOTOS_BASE_ITEM (self));
+- photos_base_item_set_default_app_name (PHOTOS_BASE_ITEM (self), name);
+-}
+-
+-
+-static void
+-photos_google_item_dispose (GObject *object)
+-{
+- PhotosGoogleItem *self = PHOTOS_GOOGLE_ITEM (object);
+-
+- g_clear_object (&self->src_mngr);
+-
+- G_OBJECT_CLASS (photos_google_item_parent_class)->dispose (object);
+-}
+-
+-
+-static void
+-photos_google_item_init (PhotosGoogleItem *self)
+-{
+- GApplication *app;
+- PhotosSearchContextState *state;
+-
+- app = g_application_get_default ();
+- state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app));
+-
+- self->src_mngr = g_object_ref (state->src_mngr);
+-}
+-
+-
+-static void
+-photos_google_item_class_init (PhotosGoogleItemClass *class)
+-{
+- GObjectClass *object_class = G_OBJECT_CLASS (class);
+- PhotosBaseItemClass *base_item_class = PHOTOS_BASE_ITEM_CLASS (class);
+-
+- base_item_class->miner_name = "org.gnome.OnlineMiners.GData";
+- base_item_class->miner_object_path = "/org/gnome/OnlineMiners/GData";
+-
+- object_class->constructed = photos_google_item_constructed;
+- object_class->dispose = photos_google_item_dispose;
+- base_item_class->create_filename_fallback = photos_google_item_create_filename_fallback;
+- base_item_class->create_name_fallback = photos_google_item_create_name_fallback;
+- base_item_class->create_thumbnail = photos_google_item_create_thumbnail;
+- base_item_class->download = photos_google_item_download;
+- base_item_class->get_source_widget = photos_google_item_get_source_widget;
+- base_item_class->open = photos_google_item_open;
+-}
+diff --git a/src/photos-google-item.h b/src/photos-google-item.h
+deleted file mode 100644
+index 644098e3c095..000000000000
+--- a/src/photos-google-item.h
++++ /dev/null
+@@ -1,36 +0,0 @@
+-/*
+- * Photos - access, organize and share your photos on GNOME
+- * Copyright © 2016 – 2019 Red Hat, Inc.
+- * Copyright © 2014 Saurav Agarwalla
+- *
+- * 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 3 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/>.
+- */
+-
+-/* Based on code from:
+- * + Documents
+- */
+-
+-#ifndef PHOTOS_GOOGLE_ITEM_H
+-#define PHOTOS_GOOGLE_ITEM_H
+-
+-#include "photos-base-item.h"
+-
+-G_BEGIN_DECLS
+-
+-#define PHOTOS_TYPE_GOOGLE_ITEM (photos_google_item_get_type ())
+-G_DECLARE_FINAL_TYPE (PhotosGoogleItem, photos_google_item, PHOTOS, GOOGLE_ITEM, PhotosBaseItem);
+-
+-G_END_DECLS
+-
+-#endif /* PHOTOS_GOOGLE_ITEM_H */
+diff --git a/src/photos-share-point-google.c b/src/photos-share-point-google.c
+deleted file mode 100644
+index 6cc6d55d882e..000000000000
+--- a/src/photos-share-point-google.c
++++ /dev/null
+@@ -1,516 +0,0 @@
+-/*
+- * Photos - access, organize and share your photos on GNOME
+- * Copyright © 2016 – 2020 Red Hat, Inc.
+- * Copyright © 2016 Umang Jain
+- *
+- * 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 3 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 <gdata/gdata.h>
+-#include <glib/gi18n.h>
+-
+-#include "photos-application.h"
+-#include "photos-base-item.h"
+-#include "photos-error.h"
+-#include "photos-filterable.h"
+-#include "photos-item-manager.h"
+-#include "photos-search-context.h"
+-#include "photos-share-point-google.h"
+-#include "photos-source.h"
+-#include "photos-utils.h"
+-
+-
+-struct _PhotosSharePointGoogle
+-{
+- PhotosSharePointOnline parent_instance;
+- GDataGoaAuthorizer *authorizer;
+- GDataPicasaWebService *service;
+- PhotosBaseManager *item_mngr;
+-};
+-
+-
+-G_DEFINE_TYPE_WITH_CODE (PhotosSharePointGoogle, photos_share_point_google, PHOTOS_TYPE_SHARE_POINT_ONLINE,
+- photos_utils_ensure_extension_points ();
+- g_io_extension_point_implement (PHOTOS_SHARE_POINT_ONLINE_EXTENSION_POINT_NAME,
+- g_define_type_id,
+- "google",
+- 0));
+-
+-
+-typedef struct _PhotosSharePointGoogleShareData PhotosSharePointGoogleShareData;
+-
+-struct _PhotosSharePointGoogleShareData
+-{
+- GDataPicasaWebFile *file_entry;
+- GDataUploadStream *stream;
+- PhotosBaseItem *item;
+- gchar *item_id_after_changes;
+- guint pending_async_calls;
+-};
+-
+-
+-static PhotosSharePointGoogleShareData *
+-photos_share_point_google_share_data_new (PhotosBaseItem *item)
+-{
+- PhotosSharePointGoogleShareData *data;
+-
+- data = g_slice_new0 (PhotosSharePointGoogleShareData);
+- data->item = g_object_ref (item);
+-
+- return data;
+-}
+-
+-
+-static void
+-photos_share_point_google_share_data_free (PhotosSharePointGoogleShareData *data)
+-{
+- g_clear_object (&data->file_entry);
+- g_clear_object (&data->stream);
+- g_clear_object (&data->item);
+- g_free (data->item_id_after_changes);
+- g_slice_free (PhotosSharePointGoogleShareData, data);
+-}
+-
+-
+-static gboolean
+-photos_share_point_google_needs_notification (PhotosSharePoint *share_point)
+-{
+- return TRUE;
+-}
+-
+-
+-static gchar *
+-photos_share_point_google_parse_error (PhotosSharePoint *self, GError *error)
+-{
+- gchar *msg;
+-
+- if (g_error_matches (error, GDATA_SERVICE_ERROR, GDATA_SERVICE_ERROR_AUTHENTICATION_REQUIRED))
+- msg = g_strdup (_("Failed to upload photo: Service not authorized"));
+- else
+- msg = g_strdup (_("Failed to upload photo"));
+-
+- return msg;
+-}
+-
+-
+-static void
+-photos_share_point_google_share_insert_shared_content (GObject *source_object, GAsyncResult *res, gpointer user_data)
+-{
+- GError *error;
+- g_autoptr (GTask) task = G_TASK (user_data);
+- GomMiner *miner = GOM_MINER (source_object);
+-
+- error = NULL;
+- if (!gom_miner_call_insert_shared_content_finish (miner, res, &error))
+- {
+- g_task_return_error (task, error);
+- goto out;
+- }
+-
+- g_task_return_boolean (task, TRUE);
+-
+- out:
+- return;
+-}
+-
+-
+-static void
+-photos_share_point_google_share_metadata_add_shared_second (PhotosSharePointGoogle *self, GTask *task)
+-{
+- GApplication *app;
+- GCancellable *cancellable;
+- GoaAccount *account;
+- GoaObject *object;
+- GomMiner *miner;
+- PhotosSource *source;
+- PhotosSharePointGoogleShareData *data;
+- const gchar *account_id;
+- const gchar *file_entry_id;
+-
+- cancellable = g_task_get_cancellable (task);
+- data = (PhotosSharePointGoogleShareData *) g_task_get_task_data (task);
+-
+- app = g_application_get_default ();
+- miner = photos_application_get_miner (PHOTOS_APPLICATION (app), "google");
+- if (miner == NULL)
+- {
+- g_task_return_new_error (task, PHOTOS_ERROR, 0, "Unable to find the google miner");
+- goto out;
+- }
+-
+- source = photos_share_point_online_get_source (PHOTOS_SHARE_POINT_ONLINE (self));
+- object = photos_source_get_goa_object (source);
+- account = goa_object_peek_account (object);
+- account_id = goa_account_get_id (account);
+-
+- file_entry_id = gdata_entry_get_id (GDATA_ENTRY (data->file_entry));
+-
+- gom_miner_call_insert_shared_content (miner,
+- account_id,
+- file_entry_id,
+- "photos",
+- data->item_id_after_changes,
+- cancellable,
+- photos_share_point_google_share_insert_shared_content,
+- g_object_ref (task));
+-
+- out:
+- g_object_unref (task);
+-}
+-
+-
+-static void
+-photos_share_point_google_share_metadata_add_shared (GObject *source_object, GAsyncResult *res, gpointer user_data)
+-{
+- PhotosSharePointGoogle *self;
+- g_autoptr (GTask) task = G_TASK (user_data);
+- PhotosBaseItem *item = PHOTOS_BASE_ITEM (source_object);
+- PhotosSharePointGoogleShareData *data;
+-
+- self = PHOTOS_SHARE_POINT_GOOGLE (g_task_get_source_object (task));
+- data = (PhotosSharePointGoogleShareData *) g_task_get_task_data (task);
+-
+- {
+- g_autoptr (GError) error = NULL;
+-
+- if (!photos_base_item_metadata_add_shared_finish (item, res, &error))
+- {
+- if (g_task_get_completed (task))
+- g_warning ("Unable to add shared metadata: %s", error->message);
+- else
+- g_task_return_error (task, g_steal_pointer (&error));
+-
+- goto out;
+- }
+- }
+-
+- data->pending_async_calls--;
+- if (data->pending_async_calls == 0)
+- photos_share_point_google_share_metadata_add_shared_second (self, g_object_ref (task));
+-
+- out:
+- return;
+-}
+-
+-
+-static void
+-photos_share_point_google_share_wait_for_changes (GObject *source_object, GAsyncResult *res, gpointer user_data)
+-{
+- PhotosSharePointGoogle *self;
+- g_autoptr (GTask) task = G_TASK (user_data);
+- PhotosItemManager *item_mngr = PHOTOS_ITEM_MANAGER (source_object);
+- PhotosSharePointGoogleShareData *data;
+- g_autofree gchar *item_id_after_changes = NULL;
+-
+- self = PHOTOS_SHARE_POINT_GOOGLE (g_task_get_source_object (task));
+- data = (PhotosSharePointGoogleShareData *) g_task_get_task_data (task);
+-
+- {
+- g_autoptr (GError) error = NULL;
+-
+- item_id_after_changes = photos_item_manager_wait_for_changes_finish (item_mngr, res, &error);
+- if (error != NULL)
+- {
+- if (g_task_get_completed (task))
+- g_warning ("Unable to detect changes: %s", error->message);
+- else
+- g_task_return_error (task, g_steal_pointer (&error));
+-
+- goto out;
+- }
+- }
+-
+- g_assert_null (data->item_id_after_changes);
+- data->item_id_after_changes = g_steal_pointer (&item_id_after_changes);
+-
+- data->pending_async_calls--;
+- if (data->pending_async_calls == 0)
+- photos_share_point_google_share_metadata_add_shared_second (self, g_object_ref (task));
+-
+- out:
+- return;
+-}
+-
+-
+-static void
+-photos_share_point_google_share_save_to_stream (GObject *source_object, GAsyncResult *res, gpointer user_data)
+-{
+- PhotosSharePointGoogle *self;
+- GCancellable *cancellable;
+- GError *error;
+- g_autoptr (GTask) task = G_TASK (user_data);
+- g_autoptr (GDataPicasaWebFile) file_entry = NULL;
+- GoaAccount *account;
+- GoaObject *object;
+- PhotosBaseItem *item = PHOTOS_BASE_ITEM (source_object);
+- PhotosSource *source;
+- PhotosSharePointGoogleShareData *data;
+- const gchar *account_identity;
+- const gchar *file_entry_id;
+- const gchar *provider_type;
+- g_autofree gchar *shared_identifier = NULL;
+-
+- self = PHOTOS_SHARE_POINT_GOOGLE (g_task_get_source_object (task));
+- cancellable = g_task_get_cancellable (task);
+- data = (PhotosSharePointGoogleShareData *) g_task_get_task_data (task);
+-
+- error = NULL;
+- if (!photos_base_item_save_to_stream_finish (item, res, &error))
+- {
+- g_task_return_error (task, error);
+- goto out;
+- }
+-
+- error = NULL;
+- file_entry = gdata_picasaweb_service_finish_file_upload (GDATA_PICASAWEB_SERVICE (self->service),
+- data->stream,
+- &error);
+- if (error != NULL)
+- {
+- g_task_return_error (task, error);
+- goto out;
+- }
+-
+- g_assert_null (data->file_entry);
+- data->file_entry = g_object_ref (file_entry);
+-
+- g_assert_true (PHOTOS_IS_ITEM_MANAGER (self->item_mngr));
+-
+- /* Tracker might detect the atomic update done by GExiv2 as a 'delete'
+- * followed by 'create'. If that happens the URN will change. We
+- * have to deal with that by waiting for TrackerChangeMonitor to
+- * emit changes-pending for the BaseItem that we are interested in,
+- * and using the new URN, if any.
+- *
+- * See https://bugzilla.gnome.org/show_bug.cgi?id=771042
+- */
+- photos_item_manager_wait_for_changes_async (PHOTOS_ITEM_MANAGER (self->item_mngr),
+- data->item,
+- cancellable,
+- photos_share_point_google_share_wait_for_changes,
+- g_object_ref (task));
+- data->pending_async_calls++;
+-
+- source = photos_share_point_online_get_source (PHOTOS_SHARE_POINT_ONLINE (self));
+- object = photos_source_get_goa_object (source);
+- account = goa_object_peek_account (object);
+- account_identity = goa_account_get_identity (account);
+- provider_type = goa_account_get_provider_type (account);
+-
+- file_entry_id = gdata_entry_get_id (GDATA_ENTRY (file_entry));
+- shared_identifier = g_strconcat ("google:picasaweb:", file_entry_id, NULL);
+-
+- photos_base_item_metadata_add_shared_async (data->item,
+- provider_type,
+- account_identity,
+- shared_identifier,
+- cancellable,
+- photos_share_point_google_share_metadata_add_shared,
+- g_object_ref (task));
+- data->pending_async_calls++;
+-
+- out:
+- return;
+-}
+-
+-
+-static void
+-photos_share_point_google_share_refresh_authorization (GObject *source_object,
+- GAsyncResult *res,
+- gpointer user_data)
+-{
+- PhotosSharePointGoogle *self;
+- GCancellable *cancellable;
+- GError *error;
+- g_autoptr (GTask) task = G_TASK (user_data);
+- GDataAuthorizer *authorizer = GDATA_AUTHORIZER (source_object);
+- g_autoptr (GDataPicasaWebFile) file_entry = NULL;
+- g_autoptr (GDataUploadStream) stream = NULL;
+- PhotosSharePointGoogleShareData *data;
+- const gchar *filename;
+- const gchar *mime_type;
+- const gchar *name;
+-
+- self = PHOTOS_SHARE_POINT_GOOGLE (g_task_get_source_object (task));
+- cancellable = g_task_get_cancellable (task);
+- data = (PhotosSharePointGoogleShareData *) g_task_get_task_data (task);
+-
+- error = NULL;
+- if (!gdata_authorizer_refresh_authorization_finish (authorizer, res, &error))
+- {
+- g_task_return_error (task, error);
+- goto out;
+- }
+-
+- file_entry = gdata_picasaweb_file_new (NULL);
+- name = photos_base_item_get_name_with_fallback (data->item);
+- gdata_entry_set_title (GDATA_ENTRY (file_entry), name);
+-
+- filename = photos_base_item_get_filename (data->item);
+- mime_type = photos_base_item_get_mime_type (data->item);
+-
+- error = NULL;
+- stream = gdata_picasaweb_service_upload_file (self->service,
+- NULL,
+- file_entry,
+- filename,
+- mime_type,
+- cancellable,
+- &error);
+- if (error != NULL)
+- {
+- g_task_return_error (task, error);
+- goto out;
+- }
+-
+- g_assert_null (data->stream);
+- data->stream = g_object_ref (stream);
+-
+- photos_base_item_save_to_stream_async (data->item,
+- G_OUTPUT_STREAM (stream),
+- 1.0,
+- cancellable,
+- photos_share_point_google_share_save_to_stream,
+- g_object_ref (task));
+-
+- out:
+- return;
+-}
+-
+-
+-static void
+-photos_share_point_google_share_async (PhotosSharePoint *share_point,
+- PhotosBaseItem *item,
+- GCancellable *cancellable,
+- GAsyncReadyCallback callback,
+- gpointer user_data)
+-{
+- PhotosSharePointGoogle *self = PHOTOS_SHARE_POINT_GOOGLE (share_point);
+- g_autoptr (GTask) task = NULL;
+- PhotosSharePointGoogleShareData *data;
+-
+- data = photos_share_point_google_share_data_new (item);
+-
+- task = g_task_new (self, cancellable, callback, user_data);
+- g_task_set_source_tag (task, photos_share_point_google_share_async);
+- g_task_set_task_data (task, data, (GDestroyNotify) photos_share_point_google_share_data_free);
+-
+- gdata_authorizer_refresh_authorization_async (GDATA_AUTHORIZER (self->authorizer),
+- cancellable,
+- photos_share_point_google_share_refresh_authorization,
+- g_object_ref (task));
+-}
+-
+-
+-static gboolean
+-photos_share_point_google_share_finish (PhotosSharePoint *share_point,
+- GAsyncResult *res,
+- gchar **out_uri,
+- GError **error)
+-{
+- PhotosSharePointGoogle *self = PHOTOS_SHARE_POINT_GOOGLE (share_point);
+- GTask *task;
+- gboolean ret_val = FALSE;
+-
+- g_return_val_if_fail (g_task_is_valid (res, self), FALSE);
+- task = G_TASK (res);
+-
+- g_return_val_if_fail (g_task_get_source_tag (task) == photos_share_point_google_share_async, FALSE);
+- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+-
+- if (!g_task_propagate_boolean (task, error))
+- goto out;
+-
+- ret_val = TRUE;
+-
+- if (out_uri != NULL)
+- *out_uri = g_strdup ("https://photos.google.com/");
+-
+- out:
+- return ret_val;
+-}
+-
+-
+-static void
+-photos_share_point_google_constructed (GObject *object)
+-{
+- PhotosSharePointGoogle *self = PHOTOS_SHARE_POINT_GOOGLE (object);
+- PhotosSource *source;
+- GoaObject *goa_object;
+-
+- G_OBJECT_CLASS (photos_share_point_google_parent_class)->constructed (object);
+-
+- source = photos_share_point_online_get_source (PHOTOS_SHARE_POINT_ONLINE (self));
+- goa_object = photos_source_get_goa_object (source);
+- self->authorizer = gdata_goa_authorizer_new (goa_object);
+- self->service = gdata_picasaweb_service_new (GDATA_AUTHORIZER (self->authorizer));
+-}
+-
+-
+-static void
+-photos_share_point_google_dispose (GObject *object)
+-{
+- PhotosSharePointGoogle *self = PHOTOS_SHARE_POINT_GOOGLE (object);
+-
+- g_clear_object (&self->authorizer);
+- g_clear_object (&self->service);
+-
+- G_OBJECT_CLASS (photos_share_point_google_parent_class)->dispose (object);
+-}
+-
+-
+-static void
+-photos_share_point_google_finalize (GObject *object)
+-{
+- PhotosSharePointGoogle *self = PHOTOS_SHARE_POINT_GOOGLE (object);
+-
+- if (self->item_mngr != NULL)
+- g_object_remove_weak_pointer (G_OBJECT (self->item_mngr), (gpointer *) &self->item_mngr);
+-
+- G_OBJECT_CLASS (photos_share_point_google_parent_class)->finalize (object);
+-}
+-
+-
+-static void
+-photos_share_point_google_init (PhotosSharePointGoogle *self)
+-{
+- GApplication *app;
+- PhotosSearchContextState *state;
+-
+- app = g_application_get_default ();
+- state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app));
+-
+- self->item_mngr = state->item_mngr;
+- g_object_add_weak_pointer (G_OBJECT (self->item_mngr), (gpointer *) &self->item_mngr);
+-}
+-
+-
+-static void
+-photos_share_point_google_class_init (PhotosSharePointGoogleClass *class)
+-{
+- GObjectClass *object_class = G_OBJECT_CLASS (class);
+- PhotosSharePointClass *share_point_class = PHOTOS_SHARE_POINT_CLASS (class);
+-
+- object_class->constructed = photos_share_point_google_constructed;
+- object_class->dispose = photos_share_point_google_dispose;
+- object_class->finalize = photos_share_point_google_finalize;
+- share_point_class->needs_notification = photos_share_point_google_needs_notification;
+- share_point_class->parse_error = photos_share_point_google_parse_error;
+- share_point_class->share_async = photos_share_point_google_share_async;
+- share_point_class->share_finish = photos_share_point_google_share_finish;
+-}
+diff --git a/src/photos-share-point-google.h b/src/photos-share-point-google.h
+deleted file mode 100644
+index f229f7ed05a6..000000000000
+--- a/src/photos-share-point-google.h
++++ /dev/null
+@@ -1,35 +0,0 @@
+-/*
+- * Photos - access, organize and share your photos on GNOME
+- * Copyright © 2016 Umang Jain
+- *
+- * 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 3 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/>.
+- */
+-
+-#ifndef PHOTOS_SHARE_POINT_GOOGLE_H
+-#define PHOTOS_SHARE_POINT_GOOGLE_H
+-
+-#include "photos-share-point-online.h"
+-
+-G_BEGIN_DECLS
+-
+-#define PHOTOS_TYPE_SHARE_POINT_GOOGLE (photos_share_point_google_get_type ())
+-G_DECLARE_FINAL_TYPE (PhotosSharePointGoogle,
+- photos_share_point_google,
+- PHOTOS,
+- SHARE_POINT_GOOGLE,
+- PhotosSharePointOnline);
+-
+-G_END_DECLS
+-
+-#endif /* PHOTOS_SHARE_POINT_GOOGLE_H */
+diff --git a/src/photos-utils.c b/src/photos-utils.c
+index 5cfddaa5f845..b9e3f4131985 100644
+--- a/src/photos-utils.c
++++ b/src/photos-utils.c
+@@ -37,10 +37,7 @@
+ #include "photos-device-item.h"
+ #include "photos-enums.h"
+ #include "photos-error.h"
+-#include "photos-facebook-item.h"
+-#include "photos-flickr-item.h"
+ #include "photos-gegl.h"
+-#include "photos-google-item.h"
+ #include "photos-local-item.h"
+ #include "photos-media-server-item.h"
+ #include "photos-offset-collection-view-controller.h"
+@@ -52,7 +49,6 @@
+ #include "photos-query.h"
+ #include "photos-share-point.h"
+ #include "photos-share-point-email.h"
+-#include "photos-share-point-google.h"
+ #include "photos-share-point-online.h"
+ #include "photos-source.h"
+ #include "photos-thumbnail-factory.h"
+@@ -719,14 +715,10 @@ photos_utils_ensure_builtins (void)
+ if (g_once_init_enter (&once_init_value))
+ {
+ g_type_ensure (PHOTOS_TYPE_DEVICE_ITEM);
+- g_type_ensure (PHOTOS_TYPE_FACEBOOK_ITEM);
+- g_type_ensure (PHOTOS_TYPE_FLICKR_ITEM);
+- g_type_ensure (PHOTOS_TYPE_GOOGLE_ITEM);
+ g_type_ensure (PHOTOS_TYPE_LOCAL_ITEM);
+ g_type_ensure (PHOTOS_TYPE_MEDIA_SERVER_ITEM);
+
+ g_type_ensure (PHOTOS_TYPE_SHARE_POINT_EMAIL);
+- g_type_ensure (PHOTOS_TYPE_SHARE_POINT_GOOGLE);
+
+ g_type_ensure (PHOTOS_TYPE_TOOL_COLORS);
+ g_type_ensure (PHOTOS_TYPE_TOOL_CROP);
+--
+2.30.2
+