log.h

Go to the documentation of this file.
00001 
00007 /* purple
00008  *
00009  * Purple is the legal property of its developers, whose names are too numerous
00010  * to list here.  Please refer to the COPYRIGHT file distributed with this
00011  * source distribution.
00012  *
00013  * This program is free software; you can redistribute it and/or modify
00014  * it under the terms of the GNU General Public License as published by
00015  * the Free Software Foundation; either version 2 of the License, or
00016  * (at your option) any later version.
00017  *
00018  * This program is distributed in the hope that it will be useful,
00019  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00021  * GNU General Public License for more details.
00022  *
00023  * You should have received a copy of the GNU General Public License
00024  * along with this program; if not, write to the Free Software
00025  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
00026  */
00027 #ifndef _PURPLE_LOG_H_
00028 #define _PURPLE_LOG_H_
00029 
00030 #include <stdio.h>
00031 
00032 
00033 /********************************************************
00034  * DATA STRUCTURES **************************************
00035  ********************************************************/
00036 
00037 typedef struct _PurpleLog PurpleLog;
00038 typedef struct _PurpleLogLogger PurpleLogLogger;
00039 typedef struct _PurpleLogCommonLoggerData PurpleLogCommonLoggerData;
00040 typedef struct _PurpleLogSet PurpleLogSet;
00041 
00042 typedef enum {
00043     PURPLE_LOG_IM,
00044     PURPLE_LOG_CHAT,
00045     PURPLE_LOG_SYSTEM
00046 } PurpleLogType;
00047 
00048 typedef enum {
00049     PURPLE_LOG_READ_NO_NEWLINE = 1
00050 } PurpleLogReadFlags;
00051 
00052 #include "account.h"
00053 #include "conversation.h"
00054 
00055 typedef void (*PurpleLogSetCallback) (GHashTable *sets, PurpleLogSet *set);
00056 
00063 struct _PurpleLogLogger {
00064     char *name;               
00065     char *id;                 
00069     void (*create)(PurpleLog *log);
00070 
00072     gsize (*write)(PurpleLog *log,
00073              PurpleMessageFlags type,
00074              const char *from,
00075              time_t time,
00076              const char *message);
00077 
00079     void (*finalize)(PurpleLog *log);
00080 
00082     GList *(*list)(PurpleLogType type, const char *name, PurpleAccount *account);
00083 
00086     char *(*read)(PurpleLog *log, PurpleLogReadFlags *flags);
00087 
00090     int (*size)(PurpleLog *log);
00091 
00094     int (*total_size)(PurpleLogType type, const char *name, PurpleAccount *account);
00095 
00097     GList *(*list_syslog)(PurpleAccount *account);
00098 
00107     void (*get_log_sets)(PurpleLogSetCallback cb, GHashTable *sets);
00108 
00109     /* Attempts to delete the specified log, indicating success or failure */
00110     gboolean (*remove)(PurpleLog *log);
00111 
00112     /* Tests whether a log is deletable */
00113     gboolean (*is_deletable)(PurpleLog *log);
00114 
00115     void (*_purple_reserved1)(void);
00116     void (*_purple_reserved2)(void);
00117     void (*_purple_reserved3)(void);
00118     void (*_purple_reserved4)(void);
00119 };
00120 
00124 struct _PurpleLog {
00125     PurpleLogType type;                     
00126     char *name;                           
00127     PurpleAccount *account;                 
00129     PurpleConversation *conv;               
00130     time_t time;                          
00133     PurpleLogLogger *logger;                
00135     void *logger_data;                    
00136     struct tm *tm;                        
00143     /* IMPORTANT: Some code in log.c allocates these without zeroing them.
00144      * IMPORTANT: Update that code if you add members here. */
00145 };
00146 
00151 struct _PurpleLogCommonLoggerData {
00152     char *path;
00153     FILE *file;
00154     void *extra_data;
00155 };
00156 
00163 struct _PurpleLogSet {
00164     PurpleLogType type;                     
00165     char *name;                           
00166     PurpleAccount *account;                 
00173     gboolean buddy;                       
00175     char *normalized_name;                
00180     /* IMPORTANT: Some code in log.c allocates these without zeroing them.
00181      * IMPORTANT: Update that code if you add members here. */
00182 };
00183 
00184 #ifdef __cplusplus
00185 extern "C" {
00186 #endif
00187 
00188 /***************************************/
00190 /***************************************/
00206 PurpleLog *purple_log_new(PurpleLogType type, const char *name, PurpleAccount *account,
00207                       PurpleConversation *conv, time_t time, const struct tm *tm);
00208 
00214 void purple_log_free(PurpleLog *log);
00215 
00226 void purple_log_write(PurpleLog *log,
00227             PurpleMessageFlags type,
00228             const char *from,
00229             time_t time,
00230             const char *message);
00231 
00240 char *purple_log_read(PurpleLog *log, PurpleLogReadFlags *flags);
00241 
00250 GList *purple_log_get_logs(PurpleLogType type, const char *name, PurpleAccount *account);
00251 
00268 GHashTable *purple_log_get_log_sets(void);
00269 
00276 GList *purple_log_get_system_logs(PurpleAccount *account);
00277 
00284 int purple_log_get_size(PurpleLog *log);
00285 
00294 int purple_log_get_total_size(PurpleLogType type, const char *name, PurpleAccount *account);
00295 
00306 gboolean purple_log_is_deletable(PurpleLog *log);
00307 
00314 gboolean purple_log_delete(PurpleLog *log);
00315 
00326 char *purple_log_get_log_dir(PurpleLogType type, const char *name, PurpleAccount *account);
00327 
00335 gint purple_log_compare(gconstpointer y, gconstpointer z);
00336 
00344 gint purple_log_set_compare(gconstpointer y, gconstpointer z);
00345 
00351 void purple_log_set_free(PurpleLogSet *set);
00352 
00355 /******************************************/
00357 /******************************************/
00376 void purple_log_common_writer(PurpleLog *log, const char *ext);
00377 
00395 GList *purple_log_common_lister(PurpleLogType type, const char *name,
00396                               PurpleAccount *account, const char *ext,
00397                               PurpleLogLogger *logger);
00398 
00418 int purple_log_common_total_sizer(PurpleLogType type, const char *name,
00419                                 PurpleAccount *account, const char *ext);
00420 
00434 int purple_log_common_sizer(PurpleLog *log);
00435 
00449 gboolean purple_log_common_deleter(PurpleLog *log);
00450 
00464 gboolean purple_log_common_is_deletable(PurpleLog *log);
00465 
00468 /******************************************/
00470 /******************************************/
00493 PurpleLogLogger *purple_log_logger_new(const char *id, const char *name, int functions, ...);
00494 
00500 void purple_log_logger_free(PurpleLogLogger *logger);
00501 
00507 void purple_log_logger_add (PurpleLogLogger *logger);
00508 
00515 void purple_log_logger_remove (PurpleLogLogger *logger);
00516 
00523 void purple_log_logger_set (PurpleLogLogger *logger);
00524 
00531 PurpleLogLogger *purple_log_logger_get (void);
00532 
00539 GList *purple_log_logger_get_options(void);
00540 
00541 /**************************************************************************/
00543 /**************************************************************************/
00549 void purple_log_init(void);
00550 
00556 void *purple_log_get_handle(void);
00557 
00561 void purple_log_uninit(void);
00562 
00566 #ifdef __cplusplus
00567 }
00568 #endif
00569 
00570 #endif /* _PURPLE_LOG_H_ */