00001
00025 #ifndef _PURPLE_LOG_H_
00026 #define _PURPLE_LOG_H_
00027
00028 #include <stdio.h>
00029
00030
00031
00032
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
00108 gboolean (*remove)(PurpleLog *log);
00109
00110
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
00142
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
00179
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