libpurple/purplepresence.h

changeset 40575
b82c365e04e8
parent 40539
2941deda6d8d
child 40584
6f198a69ac48
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purplepresence.h	Sun Nov 01 03:33:09 2020 -0600
@@ -0,0 +1,257 @@
+/*
+ * purple
+ * Copyright (C) Pidgin Developers <devel@pidgin.im>
+ *
+ * Purple is the legal property of its developers, whose names are too numerous
+ * to list here.  Please refer to the COPYRIGHT file distributed with this
+ * source distribution.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 General Public License
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
+ */
+
+#if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION)
+# error "only <purple.h> may be included directly"
+#endif
+
+#ifndef PURPLE_PRESENCE_H
+#define PURPLE_PRESENCE_H
+
+/**
+ * SECTION:purplepresence
+ * @section_id: libpurple-purplepresence
+ * @title: Presence Object API
+ *
+ * This file contains the base #PurplePresence type which is used by
+ * #PurpleAccountPresence and #PurpleBuddyPresence.
+ */
+
+/**
+ * PurplePresence:
+ *
+ * A PurplePresence is like a collection of PurpleStatuses (plus some other
+ * random info).  For any buddy, or for any one of your accounts, or for any
+ * person with which you're chatting, you may know various amounts of
+ * information.  This information is all contained in one PurplePresence.  If
+ * one of your buddies is away and idle, then the presence contains the
+ * #PurpleStatus for their awayness, and it contains their current idle time.
+ * #PurplePresence's are never saved to disk.  The information they contain is
+ * only relevant for the current Purple session.
+ *
+ * Note: When a presence is destroyed with the last g_object_unref(), all
+ * statuses added to this list will be destroyed along with the presence.
+ */
+
+typedef struct _PurplePresence PurplePresence;
+
+#include "status.h"
+
+G_BEGIN_DECLS
+
+/**
+ * PurplePresenceClass:
+ * @update_idle: Updates the logs and the UI when the idle state or time of the
+ *               presence changes.
+ *
+ * The base class for all #PurplePresence's.
+ */
+struct _PurplePresenceClass {
+	/*< private >*/
+	GObjectClass parent;
+
+	/*< public >*/
+	void (*update_idle)(PurplePresence *presence, gboolean old_idle);
+	GList *(*get_statuses)(PurplePresence *presence);
+
+	/*< private >*/
+	gpointer reserved[4];
+};
+
+/**
+ * PURPLE_TYPE_PRESENCE:
+ *
+ * The standard _get_type macro for #PurplePresence.
+ */
+#define PURPLE_TYPE_PRESENCE purple_presence_get_type()
+
+/**
+ * purple_presence_get_type:
+ *
+ * Returns: The #GType for the #PurplePresence object.
+ */
+
+G_DECLARE_DERIVABLE_TYPE(PurplePresence, purple_presence, PURPLE, PRESENCE,
+                         GObject)
+
+/**
+ * purple_presence_set_status_active:
+ * @presence: The #PurplePresence instance.
+ * @status_id: The ID of the status.
+ * @active: The active state.
+ *
+ * Sets the active state of a status in a presence.
+ *
+ * Only independent statuses can be set inactive. Normal statuses can only
+ * be set active, so if you wish to disable a status, set another
+ * non-independent status to active, or use purple_presence_switch_status().
+ */
+void purple_presence_set_status_active(PurplePresence *presence, const gchar *status_id, gboolean active);
+
+/**
+ * purple_presence_switch_status:
+ * @presence: The #PurplePresence instace.
+ * @status_id: The status ID to switch to.
+ *
+ * Switches the active status in a presence.
+ *
+ * This is similar to purple_presence_set_status_active(), except it won't
+ * activate independent statuses.
+ */
+void purple_presence_switch_status(PurplePresence *presence, const gchar *status_id);
+
+/**
+ * purple_presence_set_idle:
+ * @presence: The #PurplePresence instance.
+ * @idle: The idle state.
+ * @idle_time: The idle time, if @idle is %TRUE.  This is the time at which the
+ *             user became idle, in seconds since the epoch.  If this value is
+ *             unknown then 0 should be used.
+ *
+ * Sets the idle state and time of @presence.
+ */
+void purple_presence_set_idle(PurplePresence *presence, gboolean idle, time_t idle_time);
+
+/**
+ * purple_presence_set_login_time:
+ * @presence: The #PurplePresence instance.
+ * @login_time: The login time.
+ *
+ * Sets the login time on a presence.
+ */
+void purple_presence_set_login_time(PurplePresence *presence, time_t login_time);
+
+/**
+ * purple_presence_get_statuses:
+ * @presence: The #PurplePresence instance.
+ *
+ * Gets a list of all the statuses in @presence.
+ *
+ * Returns: (element-type PurpleStatus) (transfer none): The statuses.
+ */
+GList *purple_presence_get_statuses(PurplePresence *presence);
+
+/**
+ * purple_presence_get_status:
+ * @presence: The #PurplePresence instance.
+ * @status_id: The ID of the status.
+ *
+ * Gets the status with the specified ID from @presence.
+ *
+ * Returns: (transfer none): The #PurpleStatus if found, or %NULL.
+ */
+PurpleStatus *purple_presence_get_status(PurplePresence *presence, const gchar *status_id);
+
+/**
+ * purple_presence_get_active_status:
+ * @presence: The #PurplePresence instance.
+ *
+ * Gets the active exclusive status from @presence.
+ *
+ * Returns: (transfer none): The active exclusive status.
+ */
+PurpleStatus *purple_presence_get_active_status(PurplePresence *presence);
+
+/**
+ * purple_presence_is_available:
+ * @presence: The #PurplePresence instance.
+ *
+ * Gets whether or not @presence is available.
+ *
+ * Available presences are online and possibly invisible, but not away or idle.
+ *
+ * Returns: %TRUE if the presence is available, or %FALSE otherwise.
+ */
+gboolean purple_presence_is_available(PurplePresence *presence);
+
+/**
+ * purple_presence_is_online:
+ * @presence: The #PurplePresence instance.
+ *
+ * Gets whether or not @presence is online.
+ *
+ * Returns: %TRUE if the presence is online, or %FALSE otherwise.
+ */
+gboolean purple_presence_is_online(PurplePresence *presence);
+
+/**
+ * purple_presence_is_status_active:
+ * @presence: The #PurplePresence instance.
+ * @status_id: The ID of the status.
+ *
+ * Gets whether or not a status in @presence is active.
+ *
+ * A status is active if itself or any of its sub-statuses are active.
+ *
+ * Returns: %TRUE if the status is active, or %FALSE.
+ */
+gboolean purple_presence_is_status_active(PurplePresence *presence, const gchar *status_id);
+
+/**
+ * purple_presence_is_status_primitive_active:
+ * @presence: The #PurplePresence instance.
+ * @primitive: The status primitive.
+ *
+ * Gets whether or not a status with the specified primitive type in @presence
+ * is active.
+ *
+ * A status is active if itself or any of its sub-statuses are active.
+ *
+ * Returns: %TRUE if the status is active, or %FALSE.
+ */
+gboolean purple_presence_is_status_primitive_active(PurplePresence *presence, PurpleStatusPrimitive primitive);
+
+/**
+ * purple_presence_is_idle:
+ * @presence: The #PurplePresence instance.
+ *
+ * Gets whether or not @presence is idle.
+ *
+ * Returns: %TRUE if the presence is idle, or %FALSE otherwise.  If the
+ *          presence is offline (purple_presence_is_online() returns %FALSE)
+ *          then %FALSE is returned.
+ */
+gboolean purple_presence_is_idle(PurplePresence *presence);
+
+/**
+ * purple_presence_get_idle_time:
+ * @presence: The #PurplePresence instance.
+ *
+ * Gets the idle time of @presence.
+ *
+ * Returns: The idle time of @presence.
+ */
+time_t purple_presence_get_idle_time(PurplePresence *presence);
+
+/**
+ * purple_presence_get_login_time:
+ * @presence: The #PurplePresence instance.
+ *
+ * Gets the login time of @presence.
+ *
+ * Returns: The login time of @presence.
+ */
+time_t purple_presence_get_login_time(PurplePresence *presence);
+
+G_END_DECLS
+
+#endif /* PURPLE_PRESENCE_H */

mercurial