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 
00085 typedef struct _PurpleStatusType      PurpleStatusType;
00086 typedef struct _PurpleStatusAttr      PurpleStatusAttr;
00087 typedef struct _PurplePresence        PurplePresence;
00088 typedef struct _PurpleStatus          PurpleStatus;
00089 
00095 typedef enum
00096 {
00097     PURPLE_PRESENCE_CONTEXT_UNSET   = 0,
00098     PURPLE_PRESENCE_CONTEXT_ACCOUNT,
00099     PURPLE_PRESENCE_CONTEXT_CONV,
00100     PURPLE_PRESENCE_CONTEXT_BUDDY
00101 
00102 } PurplePresenceContext;
00103 
00107 /*
00108  * If you add a value to this enum, make sure you update
00109  * the status_primitive_map array in status.c and the special-cases for idle
00110  * and offline-messagable just below it.
00111  */
00112 typedef enum
00113 {
00114     PURPLE_STATUS_UNSET = 0,
00115     PURPLE_STATUS_OFFLINE,
00116     PURPLE_STATUS_AVAILABLE,
00117     PURPLE_STATUS_UNAVAILABLE,
00118     PURPLE_STATUS_INVISIBLE,
00119     PURPLE_STATUS_AWAY,
00120     PURPLE_STATUS_EXTENDED_AWAY,
00121     PURPLE_STATUS_MOBILE,
00122     PURPLE_STATUS_TUNE,
00123     PURPLE_STATUS_NUM_PRIMITIVES
00124 } PurpleStatusPrimitive;
00125 
00126 #include "account.h"
00127 #include "blist.h"
00128 #include "conversation.h"
00129 #include "value.h"
00130 
00131 #define PURPLE_TUNE_ARTIST  "tune_artist"
00132 #define PURPLE_TUNE_TITLE   "tune_title"
00133 #define PURPLE_TUNE_ALBUM   "tune_album"
00134 #define PURPLE_TUNE_GENRE   "tune_genre"
00135 #define PURPLE_TUNE_COMMENT "tune_comment"
00136 #define PURPLE_TUNE_TRACK   "tune_track"
00137 #define PURPLE_TUNE_TIME    "tune_time"
00138 #define PURPLE_TUNE_YEAR    "tune_year"
00139 #define PURPLE_TUNE_URL     "tune_url"
00140 #define PURPLE_TUNE_FULL    "tune_full"
00141 
00142 #ifdef __cplusplus
00143 extern "C" {
00144 #endif
00145 
00146 /**************************************************************************/
00148 /**************************************************************************/
00159 const char *purple_primitive_get_id_from_type(PurpleStatusPrimitive type);
00160 
00170 const char *purple_primitive_get_name_from_type(PurpleStatusPrimitive type);
00171 
00180 PurpleStatusPrimitive purple_primitive_get_type_from_id(const char *id);
00181 
00184 /**************************************************************************/
00186 /**************************************************************************/
00205 PurpleStatusType *purple_status_type_new_full(PurpleStatusPrimitive primitive,
00206                                           const char *id, const char *name,
00207                                           gboolean saveable,
00208                                           gboolean user_settable,
00209                                           gboolean independent);
00210 
00224 PurpleStatusType *purple_status_type_new(PurpleStatusPrimitive primitive,
00225                                      const char *id, const char *name,
00226                                      gboolean user_settable);
00227 
00248 PurpleStatusType *purple_status_type_new_with_attrs(PurpleStatusPrimitive primitive,
00249                                                 const char *id,
00250                                                 const char *name,
00251                                                 gboolean saveable,
00252                                                 gboolean user_settable,
00253                                                 gboolean independent,
00254                                                 const char *attr_id,
00255                                                 const char *attr_name,
00256                                                 PurpleValue *attr_value, ...) G_GNUC_NULL_TERMINATED;
00257 
00263 void purple_status_type_destroy(PurpleStatusType *status_type);
00264 
00265 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_)
00266 
00278 void purple_status_type_set_primary_attr(PurpleStatusType *status_type,
00279                                        const char *attr_id);
00280 #endif
00281 
00282 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_)
00283 
00295 void purple_status_type_add_attr(PurpleStatusType *status_type, const char *id,
00296                                const char *name, PurpleValue *value);
00297 #endif
00298 
00299 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_)
00300 
00313 void purple_status_type_add_attrs(PurpleStatusType *status_type, const char *id,
00314                                 const char *name, PurpleValue *value, ...) G_GNUC_NULL_TERMINATED;
00315 #endif
00316 
00317 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_)
00318 
00328 void purple_status_type_add_attrs_vargs(PurpleStatusType *status_type,
00329                                       va_list args);
00330 #endif
00331 
00339 PurpleStatusPrimitive purple_status_type_get_primitive(
00340     const PurpleStatusType *status_type);
00341 
00349 const char *purple_status_type_get_id(const PurpleStatusType *status_type);
00350 
00358 const char *purple_status_type_get_name(const PurpleStatusType *status_type);
00359 
00368 gboolean purple_status_type_is_saveable(const PurpleStatusType *status_type);
00369 
00379 gboolean purple_status_type_is_user_settable(const PurpleStatusType *status_type);
00380 
00391 gboolean purple_status_type_is_independent(const PurpleStatusType *status_type);
00392 
00400 gboolean purple_status_type_is_exclusive(const PurpleStatusType *status_type);
00401 
00411 gboolean purple_status_type_is_available(const PurpleStatusType *status_type);
00412 
00413 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_)
00414 
00423 const char *purple_status_type_get_primary_attr(const PurpleStatusType *type);
00424 #endif
00425 
00434 PurpleStatusAttr *purple_status_type_get_attr(const PurpleStatusType *status_type,
00435                                           const char *id);
00436 
00444 GList *purple_status_type_get_attrs(const PurpleStatusType *status_type);
00445 
00455 const PurpleStatusType *purple_status_type_find_with_id(GList *status_types,
00456                                                     const char *id);
00457 
00460 /**************************************************************************/
00462 /**************************************************************************/
00474 PurpleStatusAttr *purple_status_attr_new(const char *id, const char *name,
00475                                      PurpleValue *value_type);
00476 
00482 void purple_status_attr_destroy(PurpleStatusAttr *attr);
00483 
00491 const char *purple_status_attr_get_id(const PurpleStatusAttr *attr);
00492 
00500 const char *purple_status_attr_get_name(const PurpleStatusAttr *attr);
00501 
00509 PurpleValue *purple_status_attr_get_value(const PurpleStatusAttr *attr);
00510 
00513 /**************************************************************************/
00515 /**************************************************************************/
00526 PurpleStatus *purple_status_new(PurpleStatusType *status_type,
00527                             PurplePresence *presence);
00528 
00534 void purple_status_destroy(PurpleStatus *status);
00535 
00544 void purple_status_set_active(PurpleStatus *status, gboolean active);
00545 
00558 void purple_status_set_active_with_attrs(PurpleStatus *status, gboolean active,
00559                                        va_list args);
00560 
00573 void purple_status_set_active_with_attrs_list(PurpleStatus *status, gboolean active,
00574                                             GList *attrs);
00575 
00576 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_)
00577 
00587 void purple_status_set_attr_boolean(PurpleStatus *status, const char *id,
00588                                   gboolean value);
00589 #endif
00590 
00591 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_)
00592 
00602 void purple_status_set_attr_int(PurpleStatus *status, const char *id,
00603                               int value);
00604 #endif
00605 
00606 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_)
00607 
00617 void purple_status_set_attr_string(PurpleStatus *status, const char *id,
00618                                  const char *value);
00619 #endif
00620 
00628 PurpleStatusType *purple_status_get_type(const PurpleStatus *status);
00629 
00637 PurplePresence *purple_status_get_presence(const PurpleStatus *status);
00638 
00649 const char *purple_status_get_id(const PurpleStatus *status);
00650 
00661 const char *purple_status_get_name(const PurpleStatus *status);
00662 
00673 gboolean purple_status_is_independent(const PurpleStatus *status);
00674 
00685 gboolean purple_status_is_exclusive(const PurpleStatus *status);
00686 
00699 gboolean purple_status_is_available(const PurpleStatus *status);
00700 
00708 gboolean purple_status_is_active(const PurpleStatus *status);
00709 
00717 gboolean purple_status_is_online(const PurpleStatus *status);
00718 
00727 PurpleValue *purple_status_get_attr_value(const PurpleStatus *status,
00728                                       const char *id);
00729 
00738 gboolean purple_status_get_attr_boolean(const PurpleStatus *status,
00739                                       const char *id);
00740 
00749 int purple_status_get_attr_int(const PurpleStatus *status, const char *id);
00750 
00759 const char *purple_status_get_attr_string(const PurpleStatus *status,
00760                                         const char *id);
00761 
00772 gint purple_status_compare(const PurpleStatus *status1, const PurpleStatus *status2);
00773 
00776 /**************************************************************************/
00778 /**************************************************************************/
00788 PurplePresence *purple_presence_new(PurplePresenceContext context);
00789 
00797 PurplePresence *purple_presence_new_for_account(PurpleAccount *account);
00798 
00806 PurplePresence *purple_presence_new_for_conv(PurpleConversation *conv);
00807 
00815 PurplePresence *purple_presence_new_for_buddy(PurpleBuddy *buddy);
00816 
00825 void purple_presence_destroy(PurplePresence *presence);
00826 
00827 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_)
00828 
00837 void purple_presence_add_status(PurplePresence *presence, PurpleStatus *status);
00838 #endif
00839 
00840 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_STATUS_C_)
00841 
00850 void purple_presence_add_list(PurplePresence *presence, GList *source_list);
00851 #endif
00852 
00864 void purple_presence_set_status_active(PurplePresence *presence,
00865                                      const char *status_id, gboolean active);
00866 
00876 void purple_presence_switch_status(PurplePresence *presence,
00877                                  const char *status_id);
00878 
00889 void purple_presence_set_idle(PurplePresence *presence, gboolean idle,
00890                             time_t idle_time);
00891 
00898 void purple_presence_set_login_time(PurplePresence *presence, time_t login_time);
00899 
00900 
00908 PurplePresenceContext purple_presence_get_context(const PurplePresence *presence);
00909 
00917 PurpleAccount *purple_presence_get_account(const PurplePresence *presence);
00918 
00926 PurpleConversation *purple_presence_get_conversation(const PurplePresence *presence);
00927 
00935 const char *purple_presence_get_chat_user(const PurplePresence *presence);
00936 
00944 PurpleBuddy *purple_presence_get_buddy(const PurplePresence *presence);
00945 
00953 GList *purple_presence_get_statuses(const PurplePresence *presence);
00954 
00963 PurpleStatus *purple_presence_get_status(const PurplePresence *presence,
00964                                      const char *status_id);
00965 
00973 PurpleStatus *purple_presence_get_active_status(const PurplePresence *presence);
00974 
00984 gboolean purple_presence_is_available(const PurplePresence *presence);
00985 
00993 gboolean purple_presence_is_online(const PurplePresence *presence);
00994 
01005 gboolean purple_presence_is_status_active(const PurplePresence *presence,
01006                                         const char *status_id);
01007 
01019 gboolean purple_presence_is_status_primitive_active(
01020     const PurplePresence *presence, PurpleStatusPrimitive primitive);
01021 
01031 gboolean purple_presence_is_idle(const PurplePresence *presence);
01032 
01040 time_t purple_presence_get_idle_time(const PurplePresence *presence);
01041 
01049 time_t purple_presence_get_login_time(const PurplePresence *presence);
01050 
01061 gint purple_presence_compare(const PurplePresence *presence1,
01062                            const PurplePresence *presence2);
01063 
01066 /**************************************************************************/
01068 /**************************************************************************/
01076 void *purple_status_get_handle(void);
01077 
01081 void purple_status_init(void);
01082 
01086 void purple_status_uninit(void);
01087 
01090 #ifdef __cplusplus
01091 }
01092 #endif
01093 
01094 #endif /* _PURPLE_STATUS_H_ */