## ESourceCamel ESourceCamel — ESource extension for CamelSettings |

## Functions

void | e_source_camel_register_types ()
GType | e_source_camel_generate_subtype ()
CamelSettings * | e_source_camel_get_settings ()
const gchar * | e_source_camel_get_type_name ()
const gchar * | e_source_camel_get_extension_name ()
void | e_source_camel_configure_service ()

## Types and Values

struct | ESourceCamel
struct | ESourceCamelClass

## Includes

    #include <libedataserver/libedataserver.h>

## Description

ESourceCamel itself is abstract. Its sole function is to bridge GObject properties from the CamelSettings framework to the ESource framework. It does this by procedurally registering an ESourceCamel subtype for each available CamelService subtype, and then registering GObject properties to proxy the properties in the corresponding CamelSettings subtype. The ESourceCamel owns an instance of the appropriate CamelSettings subtype, and redirects all get/set operations on its own GObject properties to its CamelSettings instance. The CamelSettings instance, now fully initialized from a key file, can then be inserted into a new CamelService instance using `camel_service_set_settings()`.

Ultimately, this is all just implementation detail for glueing two unrelated class hierarchies together. If you need to access provider specific settings, use the CamelSettings API, not this.

## Functions

### e_source_camel_register_types ()

    void
    e_source_camel_register_types (void);

Creates and registers subclasses of ESourceCamel for each available CamelProvider. This function should be called once during application or library initialization.

Since: 3.6

### e_source_camel_generate_subtype ()

    GType
    e_source_camel_generate_subtype (const gchar *protocol,
                                     GType settings_type);

Generates a custom ESourceCamel subtype for `protocol` . Instances of the new subtype will contain a CamelSettings instance of type `settings_type` .

This function is called as part of `e_source_camel_register_types()` and should not be called explicitly, except by some groupware packages that need to share package-specific settings across their mail, calendar and address book components. In that case the groupware package may choose to subclass CamelSettings rather than ESourceExtension since libcamel is the lowest common denominator across all components. This function provides a way for the calendar and address book components of such a package to generate an ESourceCamel subtype for its CamelSettings subtype without having to load all available CamelProvider modules.

#### Parameters

protocol | a CamelProvider protocol |
settings_type | a subtype of CamelSettings |

#### Returns

the GType of the generated ESourceCamel subtype

Since: 3.6

### e_source_camel_get_settings ()

    CamelSettings *
    e_source_camel_get_settings (ESourceCamel *extension);

Returns `extension` 's “settings” instance, pre-configured from the ESource to which `extension` belongs. Changes to the ESource will automatically propagate to the “settings” instance and vice versa.

This is essentially the glue that binds ESource to CamelService. See `e_source_camel_configure_service()`.

#### Parameters

extension | an ESourceCamel |

#### Returns

a configured CamelSettings instance

Since: 3.6

### e_source_camel_get_type_name ()

    const gchar *
    e_source_camel_get_type_name (const gchar *protocol);

Returns the GType name of the registered ESourceCamel subtype for `protocol` .

For example, given a protocol named "imap" the function would return "ESourceCamelImap".

#### Parameters

protocol | a CamelProvider protocol |

#### Returns

the ESourceCamel type name for `protocol`

Since: 3.6

### e_source_camel_get_extension_name ()

    const gchar *
    e_source_camel_get_extension_name (const gchar *protocol);

Returns the extension name for the ESourceCamel subtype for `protocol` . The extension name can then be passed to `e_source_get_extension()` to obtain an instance of the ESourceCamel subtype.

For example, given a protocol named "imap" the function would return "Imap Backend".

#### Parameters

protocol | a CamelProvider protocol |

#### Returns

the ESourceCamel extension name for `protocol`

Since: 3.6

### e_source_camel_configure_service ()

    void
    e_source_camel_configure_service (ESource *source,
                                      CamelService *service);

This function essentially glues together `source` and `serivce` so their configuration settings stay synchronized. The glue itself is a shared CamelSettings instance.

Call this function immediately after creating a new CamelService with `camel_session_add_service()`.

#### Parameters

source | an ESource |
service | a CamelService |

Since: 3.6

## Types and Values

### struct ESourceCamel

    struct ESourceCamel {
    	ESourceExtension parent;
    	ESourceCamelPrivate *priv;
    };

Contains only private data that should be read and manipulated using the functions below.

Since: 3.6

### struct ESourceCamelClass

    struct ESourceCamelClass {
    	ESourceExtensionClass parent_class;

    	/* Same idea as in CamelServiceClass. */
    	GType settings_type;
    };