| Top |  |  |  |  | 
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 
void e_photo_source_get_photo (,EPhotoSource *photo_sourceconst,gchar *email_address,GCancellable *cancellable,GAsyncReadyCallback callback);gpointer user_data
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.
gboolean e_photo_source_get_photo_finish (,EPhotoSource *photo_source,GAsyncResult *result,GInputStream **out_stream,gint *out_priority);GError **error
Finishes the operation started with e_photo_source_get_photo().
If a match was found, a 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
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 NULLout_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
struct EPhotoSourceInterface {
	GTypeInterface parent_interface;
	void		(*get_photo)		(EPhotoSource *photo_source,
						 const gchar *email_address,
						 GCancellable *cancellable,
						 GAsyncReadyCallback callback,
						 gpointer user_data);
	gboolean (*get_photo_finish) (EPhotoSource *photo_source,
						 GAsyncResult *result,
						 GInputStream **out_stream,
						 gint *out_priority,
						 GError **error);
};