Win32 headers have a #define for 'interface', which breaks the build when this word is used in the code, thus replace it to 'iface', the same way as GLib or GTK+ code use to have it. (See bug #722068.)
123 lines
4.2 KiB
C
123 lines
4.2 KiB
C
/*
|
|
* e-photo-source.c
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation.
|
|
*
|
|
* 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 Lesser General Public License
|
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* SECTION: e-photo-source
|
|
* @include: e-util/e-util.h
|
|
* @short_description: A source of email address photos
|
|
*
|
|
* #EPhotoSource is an interface used to extend the functionality of
|
|
* #EPhotoCache. You can add an object implementing #EPhotoSource to an
|
|
* #EPhotoCache with e_photo_cache_add_photo_source() and remove it with
|
|
* e_photo_cache_remove_photo_source(). When #EPhotoCache needs a photo
|
|
* for an email address it will invoke e_photo_source_get_photo() on all
|
|
* available #EPhotoSource objects simultaneously and select one photo.
|
|
**/
|
|
|
|
#include "e-photo-source.h"
|
|
|
|
G_DEFINE_INTERFACE (
|
|
EPhotoSource,
|
|
e_photo_source,
|
|
G_TYPE_OBJECT)
|
|
|
|
static void
|
|
e_photo_source_default_init (EPhotoSourceInterface *iface)
|
|
{
|
|
}
|
|
|
|
/**
|
|
* e_photo_source_get_photo:
|
|
* @photo_source: an #EPhotoSource
|
|
* @email_address: an email address
|
|
* @cancellable: optional #GCancellable object, or %NULL
|
|
* @callback: a #GAsyncReadyCallback to call when the request is satisfied
|
|
* @user_data: data to pass to the callback function
|
|
*
|
|
* Asynchronously searches for a photo for @email_address.
|
|
*
|
|
* When the operation is finished, @callback will be called. You can then
|
|
* call e_photo_source_get_photo_finish() to get the result of the operation.
|
|
**/
|
|
void
|
|
e_photo_source_get_photo (EPhotoSource *photo_source,
|
|
const gchar *email_address,
|
|
GCancellable *cancellable,
|
|
GAsyncReadyCallback callback,
|
|
gpointer user_data)
|
|
{
|
|
EPhotoSourceInterface *iface;
|
|
|
|
g_return_if_fail (E_IS_PHOTO_SOURCE (photo_source));
|
|
g_return_if_fail (email_address != NULL);
|
|
|
|
iface = E_PHOTO_SOURCE_GET_INTERFACE (photo_source);
|
|
g_return_if_fail (iface->get_photo != NULL);
|
|
|
|
iface->get_photo (
|
|
photo_source, email_address,
|
|
cancellable, callback, user_data);
|
|
}
|
|
|
|
/**
|
|
* e_photo_source_get_photo_finish:
|
|
* @photo_source: an #EPhotoSource
|
|
* @result: a #GAsyncResult
|
|
* @out_stream: return location for a #GInputStream
|
|
* @out_priority: return location for a priority value, or %NULL
|
|
* @error: return location for a #GError, or %NULL
|
|
*
|
|
* Finishes the operation started with e_photo_source_get_photo().
|
|
*
|
|
* If a match was found, a #GInputStream from which to read image data is
|
|
* returned through the @out_stream return location, and a suggested priority
|
|
* value for the match is returned through the @out_priority return location.
|
|
*
|
|
* You can use the @out_priority value to rank this result among other
|
|
* #EPhotoSource results. The value is usually @G_PRIORITY_DEFAULT, but
|
|
* may be @G_PRIORITY_LOW if the result is a fallback image.
|
|
*
|
|
* If no match was found, the @out_stream return location is set to %NULL
|
|
* (the @out_priority return location will remain unset).
|
|
*
|
|
* The return value indicates whether the search completed successfully,
|
|
* not whether a match was found. If an error occurred, the function will
|
|
* set @error and return %FALSE.
|
|
*
|
|
* Returns: whether the search completed successfully
|
|
**/
|
|
gboolean
|
|
e_photo_source_get_photo_finish (EPhotoSource *photo_source,
|
|
GAsyncResult *result,
|
|
GInputStream **out_stream,
|
|
gint *out_priority,
|
|
GError **error)
|
|
{
|
|
EPhotoSourceInterface *iface;
|
|
|
|
g_return_val_if_fail (E_IS_PHOTO_SOURCE (photo_source), FALSE);
|
|
g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE);
|
|
g_return_val_if_fail (out_stream != NULL, FALSE);
|
|
|
|
iface = E_PHOTO_SOURCE_GET_INTERFACE (photo_source);
|
|
g_return_val_if_fail (iface->get_photo_finish != NULL, FALSE);
|
|
|
|
return iface->get_photo_finish (
|
|
photo_source, result, out_stream, out_priority, error);
|
|
}
|
|
|