log.h

Go to the documentation of this file.
00001 
00025 #ifndef _PURPLE_LOG_H_
00026 #define _PURPLE_LOG_H_
00027 
00028 #include <stdio.h>
00029 
00030 
00031 /********************************************************
00032  * DATA STRUCTURES **************************************
00033  ********************************************************/
00034 
00035 typedef struct _PurpleLog PurpleLog;
00036 typedef struct _PurpleLogLogger PurpleLogLogger;
00037 typedef struct _PurpleLogCommonLoggerData PurpleLogCommonLoggerData;
00038 typedef struct _PurpleLogSet PurpleLogSet;
00039 
00040 typedef enum {
00041     PURPLE_LOG_IM,
00042     PURPLE_LOG_CHAT,
00043     PURPLE_LOG_SYSTEM
00044 } PurpleLogType;
00045 
00046 typedef enum {
00047     PURPLE_LOG_READ_NO_NEWLINE = 1
00048 } PurpleLogReadFlags;
00049 
00050 #include "account.h"
00051 #include "conversation.h"
00052 
00053 typedef void (*PurpleLogSetCallback) (GHashTable *sets, PurpleLogSet *set);
00054 
00061 struct _PurpleLogLogger {
00062     char *name;               
00063     char *id;                 
00067     void (*create)(PurpleLog *log);
00068 
00070     gsize (*write)(PurpleLog *log,
00071              PurpleMessageFlags type,
00072              const char *from,
00073              time_t time,
00074              const char *message);
00075 
00077     void (*finalize)(PurpleLog *log);
00078 
00080     GList *(*list)(PurpleLogType type, const char *name, PurpleAccount *account);
00081 
00084     char *(*read)(PurpleLog *log, PurpleLogReadFlags *flags);
00085 
00088     int (*size)(PurpleLog *log);
00089 
00092     int (*total_size)(PurpleLogType type, const char *name, PurpleAccount *account);
00093 
00095     GList *(*list_syslog)(PurpleAccount *account);
00096 
00105     void (*get_log_sets)(PurpleLogSetCallback cb, GHashTable *sets);
00106 
00107     /* Attempts to delete the specified log, indicating success or failure */
00108     gboolean (*remove)(PurpleLog *log);
00109 
00110     /* Tests whether a log is deletable */
00111     gboolean (*is_deletable)(PurpleLog *log);
00112 
00113     void (*_purple_reserved1)(void);
00114     void (*_purple_reserved2)(void);
00115     void (*_purple_reserved3)(void);
00116     void (*_purple_reserved4)(void);
00117 };
00118 
00122 struct _PurpleLog {
00123     PurpleLogType type;                     
00124     char *name;                           
00125     PurpleAccount *account;                 
00127     PurpleConversation *conv;               
00128     time_t time;                          
00131     PurpleLogLogger *logger;                
00133     void *logger_data;                    
00134     struct tm *tm;                        
00141     /* IMPORTANT: Some code in log.c allocates these without zeroing them.
00142      * IMPORTANT: Update that code if you add members here. */
00143 };
00144 
00149 struct _PurpleLogCommonLoggerData {
00150     char *path;
00151     FILE *file;
00152     void *extra_data;
00153 };
00154 
00161 struct _PurpleLogSet {
00162     PurpleLogType type;                     
00163     char *name;                           
00164     PurpleAccount *account;                 
00171     gboolean buddy;                       
00173     char *normalized_name;                
00178     /* IMPORTANT: Some code in log.c allocates these without zeroing them.
00179      * IMPORTANT: Update that code if you add members here. */
00180 };
00181 
00182 #ifdef __cplusplus
00183 extern "C" {
00184 #endif
00185 
00186 /***************************************/
00188 /***************************************/
00204 PurpleLog *purple_log_new(PurpleLogType type, const char *name, PurpleAccount *account,
00205                       PurpleConversation *conv, time_t time, const struct tm *tm);
00206 
00212 void purple_log_free(PurpleLog *log);
00213 
00224 void purple_log_write(PurpleLog *log,
00225             PurpleMessageFlags type,
00226             const char *from,
00227             time_t time,
00228             const char *message);
00229 
00238 char *purple_log_read(PurpleLog *log, PurpleLogReadFlags *flags);
00239 
00248 GList *purple_log_get_logs(PurpleLogType type, const char *name, PurpleAccount *account);
00249 
00266 GHashTable *purple_log_get_log_sets(void);
00267 
00274 GList *purple_log_get_system_logs(PurpleAccount *account);
00275 
00282 int purple_log_get_size(PurpleLog *log);
00283 
00292 int purple_log_get_total_size(PurpleLogType type, const char *name, PurpleAccount *account);
00293 
00304 gboolean purple_log_is_deletable(PurpleLog *log);
00305 
00312 gboolean purple_log_delete(PurpleLog *log);
00313 
00324 char *purple_log_get_log_dir(PurpleLogType type, const char *name, PurpleAccount *account);
00325 
00333 gint purple_log_compare(gconstpointer y, gconstpointer z);
00334 
00342 gint purple_log_set_compare(gconstpointer y, gconstpointer z);
00343 
00349 void purple_log_set_free(PurpleLogSet *set);
00350 
00353 /******************************************/
00355 /******************************************/
00374 void purple_log_common_writer(PurpleLog *log, const char *ext);
00375 
00393 GList *purple_log_common_lister(PurpleLogType type, const char *name,
00394                               PurpleAccount *account, const char *ext,
00395                               PurpleLogLogger *logger);
00396 
00416 int purple_log_common_total_sizer(PurpleLogType type, const char *name,
00417                                 PurpleAccount *account, const char *ext);
00418 
00432 int purple_log_common_sizer(PurpleLog *log);
00433 
00447 gboolean purple_log_common_deleter(PurpleLog *log);
00448 
00462 gboolean purple_log_common_is_deletable(PurpleLog *log);
00463 
00466 /******************************************/
00468 /******************************************/
00491 PurpleLogLogger *purple_log_logger_new(const char *id, const char *name, int functions, ...);
00492 
00498 void purple_log_logger_free(PurpleLogLogger *logger);
00499 
00505 void purple_log_logger_add (PurpleLogLogger *logger);
00506 
00513 void purple_log_logger_remove (PurpleLogLogger *logger);
00514 
00521 void purple_log_logger_set (PurpleLogLogger *logger);
00522 
00529 PurpleLogLogger *purple_log_logger_get (void);
00530 
00537 GList *purple_log_logger_get_options(void);
00538 
00539 /**************************************************************************/
00541 /**************************************************************************/
00547 void purple_log_init(void);
00548 
00554 void *purple_log_get_handle(void);
00555 
00559 void purple_log_uninit(void);
00560 
00564 #ifdef __cplusplus
00565 }
00566 #endif
00567 
00568 #endif /* _PURPLE_LOG_H_ */