## FolksIndividualAggregator

FolksIndividualAggregator — Stores FolksIndividuals which have been created through aggregation of all the FolksPersonas provided by the various FolksBackends.

## Types and Values

#define | FOLKS_TYPE_INDIVIDUAL_AGGREGATOR
struct | FolksIndividualAggregator
struct | FolksIndividualAggregatorClass
enum | FolksIndividualAggregatorError

## Description

This is the main interface for client applications.

Linking and unlinking of personas and individuals is performed entirely through the aggregator. Personas may be linked together to form individuals; for example, the personas which form `individual1` and `individual2` may be linked together with `another_persona` to give a new FolksIndividual:

    1
    2
    3
    4
    5

    var personas = new HashSet<Persona> ();
    personas.add_all (individual1.personas);
    personas.add_all (individual2.personas);
    personas.add (another_persona);
    yield my_individual_aggregator.link_personas (personas);

The individuals which contained those personas will be removed when ``folks_individual_aggregator_link_personas()`` is called. Any personas in those individuals which were not included in the linking call may end up implicitly linked to the new individual, or may be aggregated into other new individuals.

For example, consider the situation where `individual1` contains two personas, `persona1A` and `persona1B`; `individual2` contains one persona, `persona2A`; and `another_persona` comes from `individual3`, which also contains `persona3A` and `persona3B`. Calling ``folks_individual_aggregator_link_personas()`` on `persona1A`, `persona1B`, `persona2A` and `another_persona` will result in `individual1` and `individual2` being removed. A new FolksIndividual will be created containing all the personas passed to the linking function. It might also contain `persona3A` and `persona3B`; or they might be in one or two other new individuals.

An existing individual may be unlinked to form singleton individuals for each of its personas:

    1

    yield my_individual_aggregator.unlink_individual (my_individual);

Note that to link two individuals together, their two sets of personas must be linked together. There is no API to directly link the individuals themselves, as conceptually folks links FolksPersonas, not FolksIndividuals.

Folks does not support having more than one IndividualAggregator instantiated at the same time. Most clients should use ``folks_individual_aggregator_dup()`` to retrieve the IndividualAggregator singleton.

## Functions

## Types and Values

### FOLKS_TYPE_INDIVIDUAL_AGGREGATOR

    #define FOLKS_TYPE_INDIVIDUAL_AGGREGATOR (folks_individual_aggregator_get_type ())

The type for FolksIndividualAggregator.

### struct FolksIndividualAggregator

    struct FolksIndividualAggregator {
    	GObject parent_instance;
    	FolksIndividualAggregatorPrivate * priv;
    };

Stores FolksIndividuals which have been created through aggregation of all the FolksPersonas provided by the various FolksBackends.

This is the main interface for client applications.

Linking and unlinking of personas and individuals is performed entirely through the aggregator. Personas may be linked together to form individuals; for example, the personas which form `individual1` and `individual2` may be linked together with `another_persona` to give a new FolksIndividual:

    1
    2
    3
    4
    5

    var personas = new HashSet<Persona> ();
    personas.add_all (individual1.personas);
    personas.add_all (individual2.personas);
    personas.add (another_persona);
    yield my_individual_aggregator.link_personas (personas);

The individuals which contained those personas will be removed when ``folks_individual_aggregator_link_personas()`` is called. Any personas in those individuals which were not included in the linking call may end up implicitly linked to the new individual, or may be aggregated into other new individuals.

For example, consider the situation where `individual1` contains two personas, `persona1A` and `persona1B`; `individual2` contains one persona, `persona2A`; and `another_persona` comes from `individual3`, which also contains `persona3A` and `persona3B`. Calling ``folks_individual_aggregator_link_personas()`` on `persona1A`, `persona1B`, `persona2A` and `another_persona` will result in `individual1` and `individual2` being removed. A new FolksIndividual will be created containing all the personas passed to the linking function. It might also contain `persona3A` and `persona3B`; or they might be in one or two other new individuals.

An existing individual may be unlinked to form singleton individuals for each of its personas:

    1

    yield my_individual_aggregator.unlink_individual (my_individual);

Note that to link two individuals together, their two sets of personas must be linked together. There is no API to directly link the individuals themselves, as conceptually folks links FolksPersonas, not FolksIndividuals.

Folks does not support having more than one IndividualAggregator instantiated at the same time. Most clients should use ``folks_individual_aggregator_dup()`` to retrieve the IndividualAggregator singleton.

### struct FolksIndividualAggregatorClass

    struct FolksIndividualAggregatorClass {
    	GObjectClass parent_class;
    };

The class structure for `FOLKS_TYPE_INDIVIDUAL_AGGREGATOR`. All the fields in this structure are private and should never be accessed directly.

#### Members

### enum FolksIndividualAggregatorError

Errors from FolksIndividualAggregators.

#### Members

FOLKS_INDIVIDUAL_AGGREGATOR_ERROR_ADD_FAILED | Adding a FolksPersona to a FolksPersonaStore failed. |
FOLKS_INDIVIDUAL_AGGREGATOR_ERROR_NO_WRITEABLE_STORE | An operation which required the use of a writeable store failed because no writeable store was available. |
FOLKS_INDIVIDUAL_AGGREGATOR_ERROR_STORE_OFFLINE | The FolksPersonaStore was offline (ie, this is a temporary failure). |
FOLKS_INDIVIDUAL_AGGREGATOR_ERROR_PROPERTY_NOT_WRITEABLE | The FolksPersonaStore did not support writing to a property which the user requested to write to, or which was necessary to write to for storing linking information. |
FOLKS_INDIVIDUAL_AGGREGATOR_ERROR_NO_PRIMARY_STORE | An operation which required the use of a primary store failed because no primary store was available. |