* A backend which loads {@link Persona}s from a simple key file in
* (XDG_DATA_HOME/folks/) and presents them through a single
* {@link PersonaStore}.
+ *
+ * @since 0.1.13
*/
public class Folks.Backends.Kf.Backend : Folks.Backend
{
/**
* A persona store which is associated with a single simple key file. It will
* create a {@link Persona} for each of the groups in the key file.
+ *
+ * @since 0.1.13
*/
public class Folks.Backends.Kf.PersonaStore : Folks.PersonaStore
{
/**
* A persona subclass which represents a single persona from a simple key file.
+ *
+ * @since 0.1.13
*/
public class Folks.Backends.Kf.Persona : Folks.Persona,
Alias,
* This is normally handled transparently by the {@link IndividualAggregator}.
*
* If this function throws an error, the Backend will not be functional.
+ *
+ * @since 0.1.11
*/
public abstract async void prepare () throws GLib.Error;
*
* @param group a freeform group identifier
* @param is_member whether the contact should be a member of the group
+ * @since 0.1.11
*/
public async abstract void change_group (string group, bool is_member)
throws GLib.Error;
*
* @param group a freeform group identifier for the group being left or joined
* @param is_member whether the contact is joining or leaving the group
+ * @since 0.1.11
*/
public async signal void group_changed (string group, bool is_member);
}
/**
* IM addresses exposed by an object implementing {@link Presence}.
+ *
+ * @since 0.1.13
*/
public interface Folks.IMable : Object
{
*
* There must be no duplicate IM addresses in each ordered set, though a given
* IM address may be present in the sets for different protocols.
+ *
+ * @since 0.1.13
*/
public abstract HashTable<string, GenericArray<string>> im_addresses
{
/**
* An operation which required the use of a writeable store failed because no
* writeable store was available.
+ *
+ * @since 0.1.13
*/
NO_WRITEABLE_STORE,
}
* {@link IndividualAggregator.individuals_changed} signal, or a race
* condition could occur, with the signal being emitted before your code has
* connected to them, and {@link Individual}s getting "lost" as a result.
+ *
+ * @since 0.1.11
*/
public async void prepare () throws GLib.Error
{
* backing stores.
*
* @param individual the {@link Individual} to remove
+ * @since 0.1.11
*/
public async void remove_individual (Individual individual) throws GLib.Error
{
* This will leave other personas in the same individual alone.
*
* @param persona the {@link Persona} to remove
+ * @since 0.1.11
*/
public async void remove_persona (Persona persona) throws GLib.Error
{
*
* @param replacement_individual the individual which has replaced this one
* due to linking, or `null` if this individual was removed for another reason
+ * @since 0.1.13
*/
public signal void removed (Individual? replacement_individual);
*
* @param group a freeform group identifier
* @param is_member whether the Individual should be a member of the group
+ * @since 0.1.11
*/
public async void change_group (string group, bool is_member)
{
/**
* Trust level for a {@link PersonaStore}'s {@link Persona}s for linking
* purposes.
+ *
+ * @since 0.1.13
*/
public enum Folks.PersonaStoreTrust
{
* This should be used for {@link PersonaStore}s where even the
* {@link Persona} UID could be maliciously edited to corrupt {@link Persona}
* links, or where the UID changes regularly.
+ *
+ * @since 0.1.13
*/
NONE,
* {@link PersonaStore} will not contribute towards the linking process, but
* can be linked together by their UIDs using data from {@link Persona}s from
* a fully-trusted {@link PersonaStore}.
+ *
+ * @since 0.1.13
*/
PARTIAL,
* This should only be used for user-controlled {@link PersonaStore}s, as if a
* remote store is compromised, malicious changes could be made to its data
* which corrupt the user's {@link Persona} links.
+ *
+ * @since 0.1.13
*/
FULL
}
*
* PersonaStores must not set this property themselves; it will be set as
* appropriate by the {@link IndividualAggregator}.
+ *
+ * @since 0.1.13
*/
public bool is_writeable { get; set; default = false; }
* {@link Persona}s for linking to produce {@link Individual}s.
*
* @see PersonaStoreTrust
+ * @since 0.1.13
*/
public PersonaStoreTrust trust_level
{
* This is normally handled transparently by the {@link IndividualAggregator}.
*
* If this function throws an error, the PersonaStore will not be functional.
+ *
+ * @since 0.1.11
*/
public abstract async void prepare () throws GLib.Error;
* {@link PersonaStore.personas_changed}.
*
* @param persona the {@link Persona} to remove
+ * @since 0.1.11
*/
public abstract async void remove_persona (Persona persona) throws GLib.Error;
}
*
* This list will have no effect if the Persona's {@link PersonaStore} trust
* level is not {@link PersonaStoreTrust.FULL}.
+ *
+ * @since 0.1.13
*/
public string[] linkable_properties { get; protected set; }
* be called by the `linkable_property_to_links` implementation for each
* linkable-property-to-individual mapping it wants to add or remove in the
* aggregator.
+ *
+ * @since 0.1.13
*/
public delegate void LinkablePropertyCallback (string link);
* {@link Individual} instance which contains this {@link Persona}.
*
* @see Persona.linkable_properties
+ * @since 0.1.13
*/
public virtual void linkable_property_to_links (string prop_name,
LinkablePropertyCallback callback)
* @param persona_id the Persona identifier (backend-specific)
* @return a valid UID
* @see Persona.split_uid
+ * @since 0.1.13
*/
public static string build_uid (string backend_name,
string persona_store_id, string persona_id)
* @param persona_store_id the {@link PersonaStore.id}
* @param persona_id the Persona identifier (backend-specific)
* @see Persona.build_uid
+ * @since 0.1.13
*/
public static void split_uid (string uid, out string backend_name,
out string persona_store_id, out string persona_id)
* number will be returned if the opposite is true.
*
* @return a number representing the similarity of the two types
+ * @since 0.1.11
*/
public static int typecmp (PresenceType type_a, PresenceType type_b)
{