status.h

Go to the documentation of this file.
00001 /*
00002  * purple
00003  *
00004  * Purple is the legal property of its developers, whose names are too numerous
00005  * to list here.  Please refer to the COPYRIGHT file distributed with this
00006  * source distribution.
00007  *
00008  * This program is free software; you can redistribute it and/or modify
00009  * it under the terms of the GNU General Public License as published by
00010  * the Free Software Foundation; either version 2 of the License, or
00011  * (at your option) any later version.
00012  *
00013  * This program is distributed in the hope that it will be useful,
00014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  * GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License
00019  * along with this program; if not, write to the Free Software
00020  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
00021  */
00022 #ifndef _PURPLE_STATUS_H_
00023 #define _PURPLE_STATUS_H_
00024 
00075 typedef struct _PurpleStatusType      PurpleStatusType;
00076 typedef struct _PurpleStatusAttr      PurpleStatusAttr;
00077 typedef struct _PurplePresence        PurplePresence;
00078 typedef struct _PurpleStatus          PurpleStatus;
00079 
00085 typedef enum
00086 {
00087     PURPLE_PRESENCE_CONTEXT_UNSET   = 0,
00088     PURPLE_PRESENCE_CONTEXT_ACCOUNT,
00089     PURPLE_PRESENCE_CONTEXT_CONV,
00090     PURPLE_PRESENCE_CONTEXT_BUDDY
00091 
00092 } PurplePresenceContext;
00093 
00097 /*
00098  * If you add a value to this enum, make sure you update
00099  * the status_primitive_map array in status.c and the special-cases for idle
00100  * and offline-messagable just below it.
00101  */
00102 typedef enum
00103 {
00104     PURPLE_STATUS_UNSET = 0,
00105     PURPLE_STATUS_OFFLINE,
00106     PURPLE_STATUS_AVAILABLE,
00107     PURPLE_STATUS_UNAVAILABLE,
00108     PURPLE_STATUS_INVISIBLE,
00109     PURPLE_STATUS_AWAY,
00110     PURPLE_STATUS_EXTENDED_AWAY,
00111     PURPLE_STATUS_MOBILE,
00112     PURPLE_STATUS_TUNE,
00113     PURPLE_STATUS_NUM_PRIMITIVES
00114 } PurpleStatusPrimitive;
00115 
00116 #include "account.h"
00117 #include "blist.h"
00118 #include "conversation.h"
00119 #include "value.h"
00120 
00121 #define PURPLE_TUNE_ARTIST  "tune_artist"
00122 #define PURPLE_TUNE_TITLE   "tune_title"
00123 #define PURPLE_TUNE_ALBUM   "tune_album"
00124 #define PURPLE_TUNE_GENRE   "tune_genre"
00125 #define PURPLE_TUNE_COMMENT "tune_comment"
00126 #define PURPLE_TUNE_TRACK   "tune_track"
00127 #define PURPLE_TUNE_TIME    "tune_time"
00128 #define PURPLE_TUNE_YEAR    "tune_year"
00129 #define PURPLE_TUNE_URL     "tune_url"
00130 #define PURPLE_TUNE_FULL    "tune_full"
00131 
00132 #ifdef __cplusplus
00133 extern "C" {
00134 #endif
00135 
00136 /**************************************************************************/
00138 /**************************************************************************/
00149 const char *purple_primitive_get_id_from_type(PurpleStatusPrimitive type);
00150 
00160 const char *purple_primitive_get_name_from_type(PurpleStatusPrimitive type);
00161 
00170 PurpleStatusPrimitive purple_primitive_get_type_from_id(const char *id);
00171 
00174 /**************************************************************************/
00176 /**************************************************************************/
00195 PurpleStatusType *purple_status_type_new_full(PurpleStatusPrimitive primitive,
00196                                           const char *id, const char *name,
00197                                           gboolean saveable,
00198                                           gboolean user_settable,
00199                                           gboolean independent);
00200 
00214 PurpleStatusType *purple_status_type_new(PurpleStatusPrimitive primitive,
00215                                      const char *id, const char *name,
00216                                      gboolean user_settable);
00217 
00238 PurpleStatusType *purple_status_type_new_with_attrs(PurpleStatusPrimitive primitive,
00239                                                 const char *id,
00240                                                 const char *name,
00241                                                 gboolean saveable,
00242                                                 gboolean user_settable,
00243                                                 gboolean independent,
00244                                                 const char *attr_id,
00245                                                 const char *attr_name,
00246                                                 PurpleValue *attr_value, ...) G_GNUC_NULL_TERMINATED;
00247 
00253 void purple_status_type_destroy(PurpleStatusType *status_type);
00254 
00265 void purple_status_type_set_primary_attr(PurpleStatusType *status_type,
00266                                        const char *attr_id);
00267 
00276 void purple_status_type_add_attr(PurpleStatusType *status_type, const char *id,
00277                                const char *name, PurpleValue *value);
00278 
00288 void purple_status_type_add_attrs(PurpleStatusType *status_type, const char *id,
00289                                 const char *name, PurpleValue *value, ...) G_GNUC_NULL_TERMINATED;
00290 
00297 void purple_status_type_add_attrs_vargs(PurpleStatusType *status_type,
00298                                       va_list args);
00299 
00307 PurpleStatusPrimitive purple_status_type_get_primitive(
00308     const PurpleStatusType *status_type);
00309 
00317 const char *purple_status_type_get_id(const PurpleStatusType *status_type);
00318 
00326 const char *purple_status_type_get_name(const PurpleStatusType *status_type);
00327 
00336 gboolean purple_status_type_is_saveable(const PurpleStatusType *status_type);
00337 
00347 gboolean purple_status_type_is_user_settable(const PurpleStatusType *status_type);
00348 
00359 gboolean purple_status_type_is_independent(const PurpleStatusType *status_type);
00360 
00368 gboolean purple_status_type_is_exclusive(const PurpleStatusType *status_type);
00369 
00379 gboolean purple_status_type_is_available(const PurpleStatusType *status_type);
00380 
00388 const char *purple_status_type_get_primary_attr(const PurpleStatusType *type);
00389 
00398 PurpleStatusAttr *purple_status_type_get_attr(const PurpleStatusType *status_type,
00399                                           const char *id);
00400 
00408 GList *purple_status_type_get_attrs(const PurpleStatusType *status_type);
00409 
00419 const PurpleStatusType *purple_status_type_find_with_id(GList *status_types,
00420                                                     const char *id);
00421 
00424 /**************************************************************************/
00426 /**************************************************************************/
00438 PurpleStatusAttr *purple_status_attr_new(const char *id, const char *name,
00439                                      PurpleValue *value_type);
00440 
00446 void purple_status_attr_destroy(PurpleStatusAttr *attr);
00447 
00455 const char *purple_status_attr_get_id(const PurpleStatusAttr *attr);
00456 
00464 const char *purple_status_attr_get_name(const PurpleStatusAttr *attr);
00465 
00473 PurpleValue *purple_status_attr_get_value(const PurpleStatusAttr *attr);
00474 
00477 /**************************************************************************/
00479 /**************************************************************************/
00490 PurpleStatus *purple_status_new(PurpleStatusType *status_type,
00491                             PurplePresence *presence);
00492 
00498 void purple_status_destroy(PurpleStatus *status);
00499 
00508 void purple_status_set_active(PurpleStatus *status, gboolean active);
00509 
00522 void purple_status_set_active_with_attrs(PurpleStatus *status, gboolean active,
00523                                        va_list args);
00524 
00537 void purple_status_set_active_with_attrs_list(PurpleStatus *status, gboolean active,
00538                                             GList *attrs);
00539 
00547 void purple_status_set_attr_boolean(PurpleStatus *status, const char *id,
00548                                   gboolean value);
00549 
00557 void purple_status_set_attr_int(PurpleStatus *status, const char *id,
00558                               int value);
00559 
00567 void purple_status_set_attr_string(PurpleStatus *status, const char *id,
00568                                  const char *value);
00569 
00577 PurpleStatusType *purple_status_get_type(const PurpleStatus *status);
00578 
00586 PurplePresence *purple_status_get_presence(const PurpleStatus *status);
00587 
00598 const char *purple_status_get_id(const PurpleStatus *status);
00599 
00610 const char *purple_status_get_name(const PurpleStatus *status);
00611 
00622 gboolean purple_status_is_independent(const PurpleStatus *status);
00623 
00634 gboolean purple_status_is_exclusive(const PurpleStatus *status);
00635 
00648 gboolean purple_status_is_available(const PurpleStatus *status);
00649 
00657 gboolean purple_status_is_active(const PurpleStatus *status);
00658 
00666 gboolean purple_status_is_online(const PurpleStatus *status);
00667 
00676 PurpleValue *purple_status_get_attr_value(const PurpleStatus *status,
00677                                       const char *id);
00678 
00687 gboolean purple_status_get_attr_boolean(const PurpleStatus *status,
00688                                       const char *id);
00689 
00698 int purple_status_get_attr_int(const PurpleStatus *status, const char *id);
00699 
00708 const char *purple_status_get_attr_string(const PurpleStatus *status,
00709                                         const char *id);
00710 
00721 gint purple_status_compare(const PurpleStatus *status1, const PurpleStatus *status2);
00722 
00725 /**************************************************************************/
00727 /**************************************************************************/
00737 PurplePresence *purple_presence_new(PurplePresenceContext context);
00738 
00746 PurplePresence *purple_presence_new_for_account(PurpleAccount *account);
00747 
00755 PurplePresence *purple_presence_new_for_conv(PurpleConversation *conv);
00756 
00764 PurplePresence *purple_presence_new_for_buddy(PurpleBuddy *buddy);
00765 
00774 void purple_presence_destroy(PurplePresence *presence);
00775 
00782 void purple_presence_add_status(PurplePresence *presence, PurpleStatus *status);
00783 
00791 void purple_presence_add_list(PurplePresence *presence, GList *source_list);
00792 
00804 void purple_presence_set_status_active(PurplePresence *presence,
00805                                      const char *status_id, gboolean active);
00806 
00816 void purple_presence_switch_status(PurplePresence *presence,
00817                                  const char *status_id);
00818 
00829 void purple_presence_set_idle(PurplePresence *presence, gboolean idle,
00830                             time_t idle_time);
00831 
00838 void purple_presence_set_login_time(PurplePresence *presence, time_t login_time);
00839 
00840 
00848 PurplePresenceContext purple_presence_get_context(const PurplePresence *presence);
00849 
00857 PurpleAccount *purple_presence_get_account(const PurplePresence *presence);
00858 
00866 PurpleConversation *purple_presence_get_conversation(const PurplePresence *presence);
00867 
00875 const char *purple_presence_get_chat_user(const PurplePresence *presence);
00876 
00884 PurpleBuddy *purple_presence_get_buddy(const PurplePresence *presence);
00885 
00893 GList *purple_presence_get_statuses(const PurplePresence *presence);
00894 
00903 PurpleStatus *purple_presence_get_status(const PurplePresence *presence,
00904                                      const char *status_id);
00905 
00913 PurpleStatus *purple_presence_get_active_status(const PurplePresence *presence);
00914 
00924 gboolean purple_presence_is_available(const PurplePresence *presence);
00925 
00933 gboolean purple_presence_is_online(const PurplePresence *presence);
00934 
00945 gboolean purple_presence_is_status_active(const PurplePresence *presence,
00946                                         const char *status_id);
00947 
00959 gboolean purple_presence_is_status_primitive_active(
00960     const PurplePresence *presence, PurpleStatusPrimitive primitive);
00961 
00971 gboolean purple_presence_is_idle(const PurplePresence *presence);
00972 
00980 time_t purple_presence_get_idle_time(const PurplePresence *presence);
00981 
00989 time_t purple_presence_get_login_time(const PurplePresence *presence);
00990 
01001 gint purple_presence_compare(const PurplePresence *presence1,
01002                            const PurplePresence *presence2);
01003 
01006 /**************************************************************************/
01008 /**************************************************************************/
01016 void *purple_status_get_handle(void);
01017 
01021 void purple_status_init(void);
01022 
01026 void purple_status_uninit(void);
01027 
01030 #ifdef __cplusplus
01031 }
01032 #endif
01033 
01034 #endif /* _PURPLE_STATUS_H_ */