Tue, 11 Apr 2006 16:06:24 +0000
[gaim-migrate @ 16009]
Use the GSlice allocator (for logs and log sets) when compiling with glib 2.10 or greater and eliminate some unnecessary memory zeroing. This cuts the log loading time in half for one of Luke's contacts.
| 7431 | 1 | /** |
| 2 | * @file log.c Logging API | |
| 3 | * @ingroup core | |
| 4 | * | |
| 5 | * gaim | |
| 6 | * | |
| 8046 | 7 | * Gaim is the legal property of its developers, whose names are too numerous |
| 8 | * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 9 | * source distribution. | |
| 7436 | 10 | * |
| 7431 | 11 | * This program is free software; you can redistribute it and/or modify |
| 12 | * it under the terms of the GNU General Public License as published by | |
| 13 | * the Free Software Foundation; either version 2 of the License, or | |
| 14 | * (at your option) any later version. | |
| 15 | * | |
| 16 | * This program is distributed in the hope that it will be useful, | |
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 19 | * GNU General Public License for more details. | |
| 20 | * | |
| 21 | * You should have received a copy of the GNU General Public License | |
| 22 | * along with this program; if not, write to the Free Software | |
| 23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 4184 | 24 | */ |
|
4195
37449660e3d5
[gaim-migrate @ 4426]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4192
diff
changeset
|
25 | |
| 7431 | 26 | #include "account.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5839
diff
changeset
|
27 | #include "debug.h" |
| 7431 | 28 | #include "internal.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5839
diff
changeset
|
29 | #include "log.h" |
| 5548 | 30 | #include "prefs.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5839
diff
changeset
|
31 | #include "util.h" |
| 7764 | 32 | #include "stringref.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5839
diff
changeset
|
33 | |
| 8096 | 34 | static GSList *loggers = NULL; |
| 35 | ||
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
36 | static GaimLogLogger *html_logger; |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
37 | static GaimLogLogger *txt_logger; |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
38 | static GaimLogLogger *old_logger; |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5839
diff
changeset
|
39 | |
| 8635 | 40 | struct _gaim_logsize_user { |
| 41 | char *name; | |
| 42 | GaimAccount *account; | |
| 43 | }; | |
| 44 | static GHashTable *logsize_users = NULL; | |
| 45 | ||
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
46 | static void log_get_log_sets_common(GHashTable *sets); |
| 8635 | 47 | |
| 13059 | 48 | static gsize html_logger_write(GaimLog *log, GaimMessageFlags type, |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
49 | const char *from, time_t time, const char *message); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
50 | static void html_logger_finalize(GaimLog *log); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
51 | static GList *html_logger_list(GaimLogType type, const char *sn, GaimAccount *account); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
52 | static GList *html_logger_list_syslog(GaimAccount *account); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
53 | static char *html_logger_read(GaimLog *log, GaimLogReadFlags *flags); |
|
13389
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
54 | static int html_logger_total_size(GaimLogType type, const char *name, GaimAccount *account); |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
55 | |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
56 | static GList *old_logger_list(GaimLogType type, const char *sn, GaimAccount *account); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
57 | static int old_logger_total_size(GaimLogType type, const char *name, GaimAccount *account); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
58 | static char * old_logger_read (GaimLog *log, GaimLogReadFlags *flags); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
59 | static int old_logger_size (GaimLog *log); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
60 | static void old_logger_get_log_sets(GaimLogSetCallback cb, GHashTable *sets); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
61 | static void old_logger_finalize(GaimLog *log); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
62 | |
| 13059 | 63 | static gsize txt_logger_write(GaimLog *log, |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
64 | GaimMessageFlags type, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
65 | const char *from, time_t time, const char *message); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
66 | static void txt_logger_finalize(GaimLog *log); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
67 | static GList *txt_logger_list(GaimLogType type, const char *sn, GaimAccount *account); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
68 | static GList *txt_logger_list_syslog(GaimAccount *account); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
69 | static char *txt_logger_read(GaimLog *log, GaimLogReadFlags *flags); |
|
13389
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
70 | static int txt_logger_total_size(GaimLogType type, const char *name, GaimAccount *account); |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
71 | |
| 7431 | 72 | /************************************************************************** |
| 73 | * PUBLIC LOGGING FUNCTIONS *********************************************** | |
| 74 | **************************************************************************/ | |
| 4184 | 75 | |
|
11292
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
76 | GaimLog *gaim_log_new(GaimLogType type, const char *name, GaimAccount *account, |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
77 | GaimConversation *conv, time_t time, const struct tm *tm) |
| 7431 | 78 | { |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
79 | GaimLog *log; |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
80 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
81 | /* IMPORTANT: Make sure to initialize all the members of GaimLog */ |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
82 | log = g_slice_new(GaimLog); |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
83 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
84 | log->type = type; |
| 8635 | 85 | log->name = g_strdup(gaim_normalize(account, name)); |
| 7431 | 86 | log->account = account; |
|
11292
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
87 | log->conv = conv; |
| 7431 | 88 | log->time = time; |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
89 | log->logger = gaim_log_logger_get(); |
| 8096 | 90 | log->logger_data = NULL; |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
91 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
92 | if (tm == NULL) |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
93 | log->tm = NULL; |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
94 | else |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
95 | { |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
96 | /* There's no need to zero this as we immediately do a direct copy. */ |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
97 | log->tm = g_slice_new(struct tm); |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
98 | |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
99 | *(log->tm) = *tm; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
100 | |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
101 | #ifdef HAVE_STRUCT_TM_TM_ZONE |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
102 | /* XXX: This is so wrong... */ |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
103 | if (log->tm->tm_zone != NULL) |
|
13161
8f84bea3949f
[gaim-migrate @ 15523]
Richard Laager <rlaager@pidgin.im>
parents:
13160
diff
changeset
|
104 | { |
|
8f84bea3949f
[gaim-migrate @ 15523]
Richard Laager <rlaager@pidgin.im>
parents:
13160
diff
changeset
|
105 | char *tmp = g_locale_from_utf8(log->tm->tm_zone, -1, NULL, NULL, NULL); |
|
8f84bea3949f
[gaim-migrate @ 15523]
Richard Laager <rlaager@pidgin.im>
parents:
13160
diff
changeset
|
106 | if (tmp != NULL) |
|
8f84bea3949f
[gaim-migrate @ 15523]
Richard Laager <rlaager@pidgin.im>
parents:
13160
diff
changeset
|
107 | log->tm->tm_zone = (const char *)tmp; |
|
8f84bea3949f
[gaim-migrate @ 15523]
Richard Laager <rlaager@pidgin.im>
parents:
13160
diff
changeset
|
108 | else |
|
8f84bea3949f
[gaim-migrate @ 15523]
Richard Laager <rlaager@pidgin.im>
parents:
13160
diff
changeset
|
109 | /* Just shove the UTF-8 bytes in and hope... */ |
|
8f84bea3949f
[gaim-migrate @ 15523]
Richard Laager <rlaager@pidgin.im>
parents:
13160
diff
changeset
|
110 | log->tm->tm_zone = (const char *)g_strdup(log->tm->tm_zone); |
|
8f84bea3949f
[gaim-migrate @ 15523]
Richard Laager <rlaager@pidgin.im>
parents:
13160
diff
changeset
|
111 | } |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
112 | #endif |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
113 | } |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
114 | |
| 7440 | 115 | if (log->logger && log->logger->create) |
| 116 | log->logger->create(log); | |
| 7431 | 117 | return log; |
| 4184 | 118 | } |
| 119 | ||
| 7431 | 120 | void gaim_log_free(GaimLog *log) |
| 4184 | 121 | { |
| 7431 | 122 | g_return_if_fail(log); |
| 123 | if (log->logger && log->logger->finalize) | |
| 124 | log->logger->finalize(log); | |
| 125 | g_free(log->name); | |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
126 | |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
127 | if (log->tm != NULL) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
128 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
129 | #ifdef HAVE_STRUCT_TM_TM_ZONE |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
130 | /* XXX: This is so wrong... */ |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
131 | g_free((char *)log->tm->tm_zone); |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
132 | #endif |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
133 | g_slice_free(struct tm, log->tm); |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
134 | } |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
135 | |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
136 | g_slice_free(GaimLog, log); |
| 7431 | 137 | } |
| 7436 | 138 | |
| 139 | void gaim_log_write(GaimLog *log, GaimMessageFlags type, | |
| 7431 | 140 | const char *from, time_t time, const char *message) |
| 141 | { | |
|
10173
335358c9cee4
[gaim-migrate @ 11287]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10171
diff
changeset
|
142 | struct _gaim_logsize_user *lu; |
| 13059 | 143 | gsize written, total = 0; |
| 144 | gpointer ptrsize; | |
|
10173
335358c9cee4
[gaim-migrate @ 11287]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10171
diff
changeset
|
145 | |
| 7431 | 146 | g_return_if_fail(log); |
| 147 | g_return_if_fail(log->logger); | |
| 7442 | 148 | g_return_if_fail(log->logger->write); |
| 7431 | 149 | |
| 13059 | 150 | written = (log->logger->write)(log, type, from, time, message); |
|
10171
814764a2d24c
[gaim-migrate @ 11263]
Luke Schierer <lschiere@pidgin.im>
parents:
10087
diff
changeset
|
151 | |
|
814764a2d24c
[gaim-migrate @ 11263]
Luke Schierer <lschiere@pidgin.im>
parents:
10087
diff
changeset
|
152 | lu = g_new(struct _gaim_logsize_user, 1); |
| 9892 | 153 | |
|
10171
814764a2d24c
[gaim-migrate @ 11263]
Luke Schierer <lschiere@pidgin.im>
parents:
10087
diff
changeset
|
154 | lu->name = g_strdup(gaim_normalize(log->account, log->name)); |
|
814764a2d24c
[gaim-migrate @ 11263]
Luke Schierer <lschiere@pidgin.im>
parents:
10087
diff
changeset
|
155 | lu->account = log->account; |
| 13059 | 156 | |
| 157 | if(g_hash_table_lookup_extended(logsize_users, lu, NULL, &ptrsize)) { | |
| 158 | total = GPOINTER_TO_INT(ptrsize); | |
| 159 | total += written; | |
| 160 | g_hash_table_replace(logsize_users, lu, GINT_TO_POINTER(total)); | |
|
13077
418101346d08
[gaim-migrate @ 15438]
Richard Laager <rlaager@pidgin.im>
parents:
13069
diff
changeset
|
161 | } else { |
|
418101346d08
[gaim-migrate @ 15438]
Richard Laager <rlaager@pidgin.im>
parents:
13069
diff
changeset
|
162 | g_free(lu->name); |
|
418101346d08
[gaim-migrate @ 15438]
Richard Laager <rlaager@pidgin.im>
parents:
13069
diff
changeset
|
163 | g_free(lu); |
| 13059 | 164 | } |
| 165 | ||
| 4184 | 166 | } |
| 167 | ||
| 7431 | 168 | char *gaim_log_read(GaimLog *log, GaimLogReadFlags *flags) |
| 4184 | 169 | { |
| 7542 | 170 | GaimLogReadFlags mflags; |
| 7431 | 171 | g_return_val_if_fail(log && log->logger, NULL); |
| 7462 | 172 | if (log->logger->read) { |
| 7535 | 173 | char *ret = (log->logger->read)(log, flags ? flags : &mflags); |
|
11920
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11703
diff
changeset
|
174 | gaim_str_strip_char(ret, '\r'); |
| 7462 | 175 | return ret; |
| 176 | } | |
|
13107
704041197f4d
[gaim-migrate @ 15468]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
177 | return g_strdup(_("<b><font color=\"red\">The logger has no read function</font></b>")); |
| 4184 | 178 | } |
| 7616 | 179 | |
| 7556 | 180 | int gaim_log_get_size(GaimLog *log) |
| 181 | { | |
| 182 | g_return_val_if_fail(log && log->logger, 0); | |
| 8096 | 183 | |
| 7556 | 184 | if (log->logger->size) |
| 185 | return log->logger->size(log); | |
| 186 | return 0; | |
| 187 | } | |
| 188 | ||
| 8635 | 189 | static guint _gaim_logsize_user_hash(struct _gaim_logsize_user *lu) |
| 190 | { | |
| 191 | return g_str_hash(lu->name); | |
| 192 | } | |
| 193 | ||
| 194 | static guint _gaim_logsize_user_equal(struct _gaim_logsize_user *lu1, | |
| 195 | struct _gaim_logsize_user *lu2) | |
| 196 | { | |
|
13078
724fb0043eea
[gaim-migrate @ 15439]
Richard Laager <rlaager@pidgin.im>
parents:
13077
diff
changeset
|
197 | return (lu1->account == lu2->account && (!strcmp(lu1->name, lu2->name))); |
| 8635 | 198 | } |
| 199 | ||
| 200 | static void _gaim_logsize_user_free_key(struct _gaim_logsize_user *lu) | |
| 201 | { | |
| 202 | g_free(lu->name); | |
| 203 | g_free(lu); | |
| 204 | } | |
| 205 | ||
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
206 | int gaim_log_get_total_size(GaimLogType type, const char *name, GaimAccount *account) |
| 7556 | 207 | { |
| 9677 | 208 | gpointer ptrsize; |
| 209 | int size = 0; | |
| 8096 | 210 | GSList *n; |
| 8635 | 211 | struct _gaim_logsize_user *lu; |
| 8096 | 212 | |
| 8635 | 213 | lu = g_new(struct _gaim_logsize_user, 1); |
| 214 | lu->name = g_strdup(gaim_normalize(account, name)); | |
| 215 | lu->account = account; | |
| 216 | ||
| 9677 | 217 | if(g_hash_table_lookup_extended(logsize_users, lu, NULL, &ptrsize)) { |
| 218 | size = GPOINTER_TO_INT(ptrsize); | |
| 8635 | 219 | g_free(lu->name); |
| 220 | g_free(lu); | |
| 221 | } else { | |
| 222 | for (n = loggers; n; n = n->next) { | |
| 223 | GaimLogLogger *logger = n->data; | |
| 7616 | 224 | |
| 8635 | 225 | if(logger->total_size){ |
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
226 | size += (logger->total_size)(type, name, account); |
| 8635 | 227 | } else if(logger->list) { |
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
228 | GList *logs = (logger->list)(type, name, account); |
| 8635 | 229 | int this_size = 0; |
| 230 | ||
| 231 | while (logs) { | |
| 232 | GaimLog *log = (GaimLog*)(logs->data); | |
| 233 | this_size += gaim_log_get_size(log); | |
| 234 | gaim_log_free(log); | |
|
13568
406e8503a006
[gaim-migrate @ 15946]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13520
diff
changeset
|
235 | logs = g_list_delete_link(logs, logs); |
| 8635 | 236 | } |
| 237 | ||
| 238 | size += this_size; | |
| 8096 | 239 | } |
| 8635 | 240 | } |
| 8096 | 241 | |
| 8635 | 242 | g_hash_table_replace(logsize_users, lu, GINT_TO_POINTER(size)); |
| 7556 | 243 | } |
| 244 | return size; | |
| 245 | } | |
| 4184 | 246 | |
| 10822 | 247 | char * |
|
10577
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
248 | gaim_log_get_log_dir(GaimLogType type, const char *name, GaimAccount *account) |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
249 | { |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
250 | GaimPlugin *prpl; |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
251 | GaimPluginProtocolInfo *prpl_info; |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
252 | const char *prpl_name; |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
253 | char *acct_name; |
| 9926 | 254 | const char *target; |
|
10577
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
255 | char *dir; |
| 9926 | 256 | |
|
10577
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
257 | prpl = gaim_find_prpl(gaim_account_get_protocol_id(account)); |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
258 | if (!prpl) |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
259 | return NULL; |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
260 | prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
261 | prpl_name = prpl_info->list_icon(account, NULL); |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
262 | |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
263 | acct_name = g_strdup(gaim_escape_filename(gaim_normalize(account, |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
264 | gaim_account_get_username(account)))); |
|
9923
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
265 | |
|
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
266 | if (type == GAIM_LOG_CHAT) { |
|
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
267 | char *temp = g_strdup_printf("%s.chat", gaim_normalize(account, name)); |
| 9926 | 268 | target = gaim_escape_filename(temp); |
|
9923
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
269 | g_free(temp); |
|
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
270 | } else if(type == GAIM_LOG_SYSTEM) { |
| 9926 | 271 | target = ".system"; |
|
9923
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
272 | } else { |
| 9926 | 273 | target = gaim_escape_filename(gaim_normalize(account, name)); |
|
9923
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
274 | } |
|
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
275 | |
|
10577
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
276 | dir = g_build_filename(gaim_user_dir(), "logs", prpl_name, acct_name, target, NULL); |
| 9926 | 277 | |
|
9923
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
278 | g_free(acct_name); |
|
10577
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
279 | |
|
9923
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
280 | return dir; |
|
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
281 | } |
|
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
282 | |
| 7431 | 283 | /**************************************************************************** |
| 284 | * LOGGER FUNCTIONS ********************************************************* | |
| 285 | ****************************************************************************/ | |
| 4184 | 286 | |
| 7431 | 287 | static GaimLogLogger *current_logger = NULL; |
| 7436 | 288 | |
| 7431 | 289 | static void logger_pref_cb(const char *name, GaimPrefType type, |
|
12816
5f93e09fa9a6
[gaim-migrate @ 15164]
Mark Doliner <markdoliner@pidgin.im>
parents:
12738
diff
changeset
|
290 | gconstpointer value, gpointer data) |
| 7431 | 291 | { |
| 292 | GaimLogLogger *logger; | |
| 293 | GSList *l = loggers; | |
| 294 | while (l) { | |
| 295 | logger = l->data; | |
| 296 | if (!strcmp(logger->id, value)) { | |
| 297 | gaim_log_logger_set(logger); | |
| 298 | return; | |
| 4184 | 299 | } |
| 7431 | 300 | l = l->next; |
| 301 | } | |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
302 | gaim_log_logger_set(txt_logger); |
| 7431 | 303 | } |
| 4184 | 304 | |
| 305 | ||
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
306 | GaimLogLogger *gaim_log_logger_new(const char *id, const char *name, int functions, ...) |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
307 | { |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
308 | #if 0 |
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
309 | void(*create)(GaimLog *), |
|
13068
4670b6342951
[gaim-migrate @ 15430]
Richard Laager <rlaager@pidgin.im>
parents:
13059
diff
changeset
|
310 | gsize(*write)(GaimLog *, GaimMessageFlags, const char *, time_t, const char *), |
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
311 | void(*finalize)(GaimLog *), |
|
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
312 | GList*(*list)(GaimLogType type, const char*, GaimAccount*), |
|
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
313 | char*(*read)(GaimLog*, GaimLogReadFlags*), |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
314 | int(*size)(GaimLog*), |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
315 | int(*total_size)(GaimLogType type, const char *name, GaimAccount *account), |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
316 | GList*(*list_syslog)(GaimAccount *account), |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
317 | void(*get_log_sets)(GaimLogSetCallback cb, GHashTable *sets)) |
| 7431 | 318 | { |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
319 | #endif |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
320 | GaimLogLogger *logger; |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
321 | va_list args; |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
322 | |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
323 | g_return_val_if_fail(id != NULL, NULL); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
324 | g_return_val_if_fail(name != NULL, NULL); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
325 | g_return_val_if_fail(functions >= 1, NULL); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
326 | |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
327 | logger = g_new0(GaimLogLogger, 1); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
328 | logger->id = g_strdup(id); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
329 | logger->name = g_strdup(name); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
330 | |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
331 | va_start(args, functions); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
332 | |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
333 | if (functions >= 1) |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
334 | logger->create = va_arg(args, void *); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
335 | if (functions >= 2) |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
336 | logger->write = va_arg(args, void *); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
337 | if (functions >= 3) |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
338 | logger->finalize = va_arg(args, void *); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
339 | if (functions >= 4) |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
340 | logger->list = va_arg(args, void *); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
341 | if (functions >= 5) |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
342 | logger->read = va_arg(args, void *); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
343 | if (functions >= 6) |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
344 | logger->size = va_arg(args, void *); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
345 | if (functions >= 7) |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
346 | logger->total_size = va_arg(args, void *); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
347 | if (functions >= 8) |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
348 | logger->list_syslog = va_arg(args, void *); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
349 | if (functions >= 9) |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
350 | logger->get_log_sets = va_arg(args, void *); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
351 | |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
352 | if (functions > 9) |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
353 | gaim_debug_info("log", "Dropping new functions for logger: %s (%s)\n", name, id); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
354 | |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
355 | va_end(args); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
356 | |
| 7431 | 357 | return logger; |
| 4184 | 358 | } |
| 359 | ||
| 7431 | 360 | void gaim_log_logger_free(GaimLogLogger *logger) |
| 4184 | 361 | { |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
362 | g_free(logger->name); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
363 | g_free(logger->id); |
| 7431 | 364 | g_free(logger); |
| 365 | } | |
| 4184 | 366 | |
| 7431 | 367 | void gaim_log_logger_add (GaimLogLogger *logger) |
| 368 | { | |
| 369 | g_return_if_fail(logger); | |
| 370 | if (g_slist_find(loggers, logger)) | |
| 371 | return; | |
| 372 | loggers = g_slist_append(loggers, logger); | |
| 373 | } | |
| 374 | ||
| 375 | void gaim_log_logger_remove (GaimLogLogger *logger) | |
| 376 | { | |
| 377 | g_return_if_fail(logger); | |
|
12574
3c80324a3ea5
[gaim-migrate @ 14896]
Mark Doliner <markdoliner@pidgin.im>
parents:
12241
diff
changeset
|
378 | loggers = g_slist_remove(loggers, logger); |
| 4184 | 379 | } |
| 380 | ||
| 7431 | 381 | void gaim_log_logger_set (GaimLogLogger *logger) |
| 4184 | 382 | { |
| 7431 | 383 | g_return_if_fail(logger); |
| 384 | current_logger = logger; | |
| 7436 | 385 | } |
| 4184 | 386 | |
| 7431 | 387 | GaimLogLogger *gaim_log_logger_get() |
| 388 | { | |
| 389 | return current_logger; | |
| 390 | } | |
| 4184 | 391 | |
| 7431 | 392 | GList *gaim_log_logger_get_options(void) |
| 393 | { | |
| 394 | GSList *n; | |
| 395 | GList *list = NULL; | |
| 396 | GaimLogLogger *data; | |
| 4184 | 397 | |
| 7431 | 398 | for (n = loggers; n; n = n->next) { |
| 399 | data = n->data; | |
| 400 | if (!data->write) | |
| 401 | continue; | |
|
12241
29b388429db5
[gaim-migrate @ 14543]
Richard Laager <rlaager@pidgin.im>
parents:
12240
diff
changeset
|
402 | list = g_list_append(list, data->name); |
| 7431 | 403 | list = g_list_append(list, data->id); |
| 4184 | 404 | } |
| 405 | ||
| 7431 | 406 | return list; |
| 407 | } | |
| 408 | ||
| 8573 | 409 | gint gaim_log_compare(gconstpointer y, gconstpointer z) |
| 7431 | 410 | { |
| 7436 | 411 | const GaimLog *a = y; |
| 412 | const GaimLog *b = z; | |
| 413 | ||
| 7431 | 414 | return b->time - a->time; |
| 415 | } | |
| 416 | ||
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
417 | GList *gaim_log_get_logs(GaimLogType type, const char *name, GaimAccount *account) |
| 7431 | 418 | { |
| 419 | GList *logs = NULL; | |
| 420 | GSList *n; | |
| 421 | for (n = loggers; n; n = n->next) { | |
| 422 | GaimLogLogger *logger = n->data; | |
| 423 | if (!logger->list) | |
| 424 | continue; | |
|
11703
6b22ef099870
[gaim-migrate @ 13994]
Richard Laager <rlaager@pidgin.im>
parents:
11698
diff
changeset
|
425 | logs = g_list_concat(logger->list(type, name, account), logs); |
| 7431 | 426 | } |
| 7436 | 427 | |
| 8573 | 428 | return g_list_sort(logs, gaim_log_compare); |
| 429 | } | |
| 430 | ||
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
431 | gint gaim_log_set_compare(gconstpointer y, gconstpointer z) |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
432 | { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
433 | const GaimLogSet *a = y; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
434 | const GaimLogSet *b = z; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
435 | gint ret = 0; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
436 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
437 | /* This logic seems weird at first... |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
438 | * If either account is NULL, we pretend the accounts are |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
439 | * equal. This allows us to detect duplicates that will |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
440 | * exist if one logger knows the account and another |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
441 | * doesn't. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
442 | if (a->account != NULL && b->account != NULL) { |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
443 | ret = strcmp(gaim_account_get_username(a->account), gaim_account_get_username(b->account)); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
444 | if (ret != 0) |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
445 | return ret; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
446 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
447 | |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
448 | ret = strcmp(a->normalized_name, b->normalized_name); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
449 | if (ret != 0) |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
450 | return ret; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
451 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
452 | return (gint)b->type - (gint)a->type; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
453 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
454 | |
|
11677
89c2ab8d2ebf
[gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents:
11503
diff
changeset
|
455 | static guint |
|
89c2ab8d2ebf
[gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents:
11503
diff
changeset
|
456 | log_set_hash(gconstpointer key) |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
457 | { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
458 | const GaimLogSet *set = key; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
459 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
460 | /* The account isn't hashed because we need GaimLogSets with NULL accounts |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
461 | * to be found when we search by a GaimLogSet that has a non-NULL account |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
462 | * but the same type and name. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
463 | return g_int_hash((gint *)&set->type) + g_str_hash(set->name); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
464 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
465 | |
|
11677
89c2ab8d2ebf
[gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents:
11503
diff
changeset
|
466 | static gboolean |
|
89c2ab8d2ebf
[gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents:
11503
diff
changeset
|
467 | log_set_equal(gconstpointer a, gconstpointer b) |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
468 | { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
469 | /* I realize that the choices made for GList and GHashTable |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
470 | * make sense for those data types, but I wish the comparison |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
471 | * functions were compatible. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
472 | return !gaim_log_set_compare(a, b); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
473 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
474 | |
|
11677
89c2ab8d2ebf
[gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents:
11503
diff
changeset
|
475 | static void |
|
89c2ab8d2ebf
[gaim-migrate @ 13963]
Mark Doliner <markdoliner@pidgin.im>
parents:
11503
diff
changeset
|
476 | log_add_log_set_to_hash(GHashTable *sets, GaimLogSet *set) |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
477 | { |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
478 | GaimLogSet *existing_set = g_hash_table_lookup(sets, set); |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
479 | |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
480 | if (existing_set == NULL) |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
481 | g_hash_table_insert(sets, set, set); |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
482 | else if (existing_set->account == NULL && set->account != NULL) |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
483 | g_hash_table_replace(sets, set, set); |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
484 | else |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
485 | gaim_log_set_free(set); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
486 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
487 | |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
488 | GHashTable *gaim_log_get_log_sets(void) |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
489 | { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
490 | GSList *n; |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
491 | GHashTable *sets = g_hash_table_new_full(log_set_hash, log_set_equal, |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
492 | (GDestroyNotify)gaim_log_set_free, NULL); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
493 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
494 | /* Get the log sets from all the loggers. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
495 | for (n = loggers; n; n = n->next) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
496 | GaimLogLogger *logger = n->data; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
497 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
498 | if (!logger->get_log_sets) |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
499 | continue; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
500 | |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
501 | logger->get_log_sets(log_add_log_set_to_hash, sets); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
502 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
503 | |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
504 | log_get_log_sets_common(sets); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
505 | |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
506 | /* Return the GHashTable of unique GaimLogSets. */ |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
507 | return sets; |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
508 | } |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
509 | |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
510 | void gaim_log_set_free(GaimLogSet *set) |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
511 | { |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
512 | g_return_if_fail(set != NULL); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
513 | |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
514 | g_free(set->name); |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
515 | if (set->normalized_name != set->name) |
|
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
516 | g_free(set->normalized_name); |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
517 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
518 | g_slice_free(GaimLogSet, set); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
519 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
520 | |
| 8573 | 521 | GList *gaim_log_get_system_logs(GaimAccount *account) |
| 522 | { | |
| 523 | GList *logs = NULL; | |
| 524 | GSList *n; | |
| 525 | for (n = loggers; n; n = n->next) { | |
| 526 | GaimLogLogger *logger = n->data; | |
| 527 | if (!logger->list_syslog) | |
| 528 | continue; | |
|
11703
6b22ef099870
[gaim-migrate @ 13994]
Richard Laager <rlaager@pidgin.im>
parents:
11698
diff
changeset
|
529 | logs = g_list_concat(logger->list_syslog(account), logs); |
| 8573 | 530 | } |
| 531 | ||
| 532 | return g_list_sort(logs, gaim_log_compare); | |
| 7431 | 533 | } |
| 534 | ||
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
535 | /**************************************************************************** |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
536 | * LOG SUBSYSTEM ************************************************************ |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
537 | ****************************************************************************/ |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
538 | |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
539 | void * |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
540 | gaim_log_get_handle(void) |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
541 | { |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
542 | static int handle; |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
543 | |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
544 | return &handle; |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
545 | } |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
546 | |
| 7431 | 547 | void gaim_log_init(void) |
| 7436 | 548 | { |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
549 | void *handle = gaim_log_get_handle(); |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
550 | |
| 7431 | 551 | gaim_prefs_add_none("/core/logging"); |
| 7555 | 552 | gaim_prefs_add_bool("/core/logging/log_ims", FALSE); |
| 553 | gaim_prefs_add_bool("/core/logging/log_chats", FALSE); | |
| 8573 | 554 | gaim_prefs_add_bool("/core/logging/log_system", FALSE); |
| 555 | ||
| 7431 | 556 | gaim_prefs_add_string("/core/logging/format", "txt"); |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
557 | |
|
12240
194dc3367706
[gaim-migrate @ 14542]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
11920
diff
changeset
|
558 | html_logger = gaim_log_logger_new("html", _("HTML"), 8, |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
559 | NULL, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
560 | html_logger_write, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
561 | html_logger_finalize, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
562 | html_logger_list, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
563 | html_logger_read, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
564 | gaim_log_common_sizer, |
|
13389
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
565 | html_logger_total_size, |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
566 | html_logger_list_syslog); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
567 | gaim_log_logger_add(html_logger); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
568 | |
|
12240
194dc3367706
[gaim-migrate @ 14542]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
11920
diff
changeset
|
569 | txt_logger = gaim_log_logger_new("txt", _("Plain text"), 8, |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
570 | NULL, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
571 | txt_logger_write, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
572 | txt_logger_finalize, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
573 | txt_logger_list, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
574 | txt_logger_read, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
575 | gaim_log_common_sizer, |
|
13389
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
576 | txt_logger_total_size, |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
577 | txt_logger_list_syslog); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
578 | gaim_log_logger_add(txt_logger); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
579 | |
|
12240
194dc3367706
[gaim-migrate @ 14542]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
11920
diff
changeset
|
580 | old_logger = gaim_log_logger_new("old", _("Old Gaim"), 9, |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
581 | NULL, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
582 | NULL, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
583 | old_logger_finalize, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
584 | old_logger_list, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
585 | old_logger_read, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
586 | old_logger_size, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
587 | old_logger_total_size, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
588 | NULL, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
589 | old_logger_get_log_sets); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
590 | gaim_log_logger_add(old_logger); |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
591 | |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
592 | gaim_signal_register(handle, "log-timestamp", |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
593 | gaim_marshal_POINTER__POINTER_POINTER, |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
594 | gaim_value_new(GAIM_TYPE_POINTER), 2, |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
595 | gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
596 | GAIM_SUBTYPE_LOG), |
|
12834
213fe18cfeb8
[gaim-migrate @ 15182]
Richard Laager <rlaager@pidgin.im>
parents:
12816
diff
changeset
|
597 | gaim_value_new(GAIM_TYPE_BOXED, |
|
213fe18cfeb8
[gaim-migrate @ 15182]
Richard Laager <rlaager@pidgin.im>
parents:
12816
diff
changeset
|
598 | "struct tm *")); |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
599 | |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9977
diff
changeset
|
600 | gaim_prefs_connect_callback(NULL, "/core/logging/format", |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
601 | logger_pref_cb, NULL); |
| 7431 | 602 | gaim_prefs_trigger_callback("/core/logging/format"); |
| 8635 | 603 | |
| 604 | logsize_users = g_hash_table_new_full((GHashFunc)_gaim_logsize_user_hash, | |
| 605 | (GEqualFunc)_gaim_logsize_user_equal, | |
| 606 | (GDestroyNotify)_gaim_logsize_user_free_key, NULL); | |
| 7431 | 607 | } |
| 608 | ||
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
609 | void |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
610 | gaim_log_uninit(void) |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
611 | { |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
612 | gaim_signals_unregister_by_instance(gaim_log_get_handle()); |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
613 | } |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
614 | |
| 7431 | 615 | /**************************************************************************** |
| 616 | * LOGGERS ****************************************************************** | |
| 617 | ****************************************************************************/ | |
| 618 | ||
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
619 | static char *log_get_timestamp(GaimLog *log, time_t when) |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
620 | { |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
621 | char *date; |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
622 | struct tm tm = *(localtime(&when)); |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
623 | |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
624 | date = gaim_signal_emit_return_1(gaim_log_get_handle(), |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
625 | "log-timestamp", |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
626 | log, &tm); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
627 | if (date != NULL) |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
628 | return date; |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
629 | |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
630 | if (log->type == GAIM_LOG_SYSTEM || time(NULL) > when + 20*60) |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
631 | return g_strdup(gaim_date_format_long(&tm)); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
632 | else |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
633 | return g_strdup(gaim_time_format(&tm)); |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
634 | } |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
635 | |
|
11292
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
636 | void gaim_log_common_writer(GaimLog *log, const char *ext) |
| 9763 | 637 | { |
| 10822 | 638 | GaimLogCommonLoggerData *data = log->logger_data; |
| 9763 | 639 | |
|
11292
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
640 | if (data == NULL) |
|
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
641 | { |
| 9763 | 642 | /* This log is new */ |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
643 | char *dir; |
|
13163
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
644 | struct tm *tm; |
|
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
645 | const char *tz; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
646 | const char *date; |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
647 | char *filename; |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
648 | char *path; |
|
10577
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
649 | |
|
9923
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
650 | dir = gaim_log_get_log_dir(log->type, log->name, log->account); |
|
10577
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
651 | if (dir == NULL) |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
652 | return; |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
653 | |
|
9923
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
654 | gaim_build_dir (dir, S_IRUSR | S_IWUSR | S_IXUSR); |
| 9763 | 655 | |
|
13163
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
656 | tm = localtime(&log->time); |
|
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
657 | tz = gaim_escape_filename(gaim_utf8_strftime("%Z", tm)); |
|
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
658 | date = gaim_utf8_strftime("%Y-%m-%d.%H%M%S%z", tm); |
| 9763 | 659 | |
|
13163
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
660 | filename = g_strdup_printf("%s%s%s", date, tz, ext ? ext : ""); |
| 9763 | 661 | |
|
13163
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
662 | path = g_build_filename(dir, filename, NULL); |
| 9763 | 663 | g_free(dir); |
| 664 | g_free(filename); | |
| 665 | ||
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
666 | log->logger_data = data = g_slice_new0(GaimLogCommonLoggerData); |
| 9763 | 667 | |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10577
diff
changeset
|
668 | data->file = g_fopen(path, "a"); |
|
11292
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
669 | if (data->file == NULL) |
|
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
670 | { |
| 9763 | 671 | gaim_debug(GAIM_DEBUG_ERROR, "log", |
| 9892 | 672 | "Could not create log file %s\n", path); |
|
11292
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
673 | |
|
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
674 | if (log->conv != NULL) |
|
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
675 | gaim_conversation_write(log->conv, NULL, _("Logging of this conversation failed."), |
|
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
676 | GAIM_MESSAGE_ERROR, time(NULL)); |
|
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
677 | |
| 9763 | 678 | g_free(path); |
| 679 | return; | |
| 680 | } | |
| 681 | g_free(path); | |
|
10577
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
682 | } |
| 9763 | 683 | } |
| 684 | ||
| 10822 | 685 | GList *gaim_log_common_lister(GaimLogType type, const char *name, GaimAccount *account, const char *ext, GaimLogLogger *logger) |
| 7431 | 686 | { |
| 687 | GDir *dir; | |
| 688 | GList *list = NULL; | |
|
13160
8177a80d9e27
[gaim-migrate @ 15522]
Richard Laager <rlaager@pidgin.im>
parents:
13157
diff
changeset
|
689 | const char *filename; |
| 8111 | 690 | char *path; |
| 691 | ||
| 692 | if(!account) | |
| 693 | return NULL; | |
| 694 | ||
|
9923
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
695 | path = gaim_log_get_log_dir(type, name, account); |
|
10577
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
696 | if (path == NULL) |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
697 | return NULL; |
|
7447
4876aeb16c60
[gaim-migrate @ 8058]
Mark Doliner <markdoliner@pidgin.im>
parents:
7443
diff
changeset
|
698 | |
|
12969
823d3591438c
[gaim-migrate @ 15322]
Richard Laager <rlaager@pidgin.im>
parents:
12958
diff
changeset
|
699 | if (!(dir = g_dir_open(path, 0, NULL))) |
|
823d3591438c
[gaim-migrate @ 15322]
Richard Laager <rlaager@pidgin.im>
parents:
12958
diff
changeset
|
700 | { |
| 7431 | 701 | g_free(path); |
| 702 | return NULL; | |
| 703 | } | |
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
704 | |
|
13160
8177a80d9e27
[gaim-migrate @ 15522]
Richard Laager <rlaager@pidgin.im>
parents:
13157
diff
changeset
|
705 | while ((filename = g_dir_read_name(dir))) |
|
12969
823d3591438c
[gaim-migrate @ 15322]
Richard Laager <rlaager@pidgin.im>
parents:
12958
diff
changeset
|
706 | { |
| 8577 | 707 | if (gaim_str_has_suffix(filename, ext) && |
|
12969
823d3591438c
[gaim-migrate @ 15322]
Richard Laager <rlaager@pidgin.im>
parents:
12958
diff
changeset
|
708 | strlen(filename) >= (17 + strlen(ext))) |
|
823d3591438c
[gaim-migrate @ 15322]
Richard Laager <rlaager@pidgin.im>
parents:
12958
diff
changeset
|
709 | { |
| 7431 | 710 | GaimLog *log; |
| 10822 | 711 | GaimLogCommonLoggerData *data; |
|
13582
54ac10e3c3cc
[gaim-migrate @ 15963]
Richard Laager <rlaager@pidgin.im>
parents:
13568
diff
changeset
|
712 | struct tm tm; |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
713 | #if defined (HAVE_TM_GMTOFF) && defined (HAVE_STRUCT_TM_TM_ZONE) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
714 | long tz_off; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
715 | const char *rest; |
|
13160
8177a80d9e27
[gaim-migrate @ 15522]
Richard Laager <rlaager@pidgin.im>
parents:
13157
diff
changeset
|
716 | time_t stamp = gaim_str_to_time(gaim_unescape_filename(filename), FALSE, &tm, &tz_off, &rest); |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
717 | char *end; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
718 | |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
719 | /* As zero is a valid offset, GAIM_NO_TZ_OFF means no offset was |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
720 | * provided. See util.h. Yes, it's kinda ugly. */ |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
721 | if (tz_off != GAIM_NO_TZ_OFF) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
722 | tm.tm_gmtoff = tz_off - tm.tm_gmtoff; |
| 7431 | 723 | |
|
13163
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
724 | if (rest == NULL || (end = strchr(rest, '.')) == NULL || strchr(rest, ' ') != NULL) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
725 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
726 | log = gaim_log_new(type, name, account, NULL, stamp, NULL); |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
727 | } |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
728 | else |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
729 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
730 | char *tmp = g_strndup(rest, end - rest); |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
731 | tm.tm_zone = tmp; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
732 | log = gaim_log_new(type, name, account, NULL, stamp, &tm); |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
733 | g_free(tmp); |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
734 | } |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
735 | #else |
|
13584
f82188ed84f6
[gaim-migrate @ 15965]
Richard Laager <rlaager@pidgin.im>
parents:
13582
diff
changeset
|
736 | time_t stamp = gaim_str_to_time(filename, FALSE, &tm, NULL, NULL); |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
737 | |
|
13582
54ac10e3c3cc
[gaim-migrate @ 15963]
Richard Laager <rlaager@pidgin.im>
parents:
13568
diff
changeset
|
738 | log = gaim_log_new(type, name, account, NULL, stamp, &tm); |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
739 | #endif |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
740 | |
| 7431 | 741 | log->logger = logger; |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
742 | log->logger_data = data = g_slice_new0(GaimLogCommonLoggerData); |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
743 | |
| 7616 | 744 | data->path = g_build_filename(path, filename, NULL); |
|
11703
6b22ef099870
[gaim-migrate @ 13994]
Richard Laager <rlaager@pidgin.im>
parents:
11698
diff
changeset
|
745 | list = g_list_prepend(list, log); |
| 4184 | 746 | } |
| 747 | } | |
| 7431 | 748 | g_dir_close(dir); |
|
7447
4876aeb16c60
[gaim-migrate @ 8058]
Mark Doliner <markdoliner@pidgin.im>
parents:
7443
diff
changeset
|
749 | g_free(path); |
| 7431 | 750 | return list; |
| 751 | } | |
| 4184 | 752 | |
|
13389
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
753 | int gaim_log_common_total_sizer(GaimLogType type, const char *name, GaimAccount *account, const char *ext) |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
754 | { |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
755 | GDir *dir; |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
756 | int size = 0; |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
757 | const char *filename; |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
758 | char *path; |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
759 | |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
760 | if(!account) |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
761 | return 0; |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
762 | |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
763 | path = gaim_log_get_log_dir(type, name, account); |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
764 | if (path == NULL) |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
765 | return 0; |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
766 | |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
767 | if (!(dir = g_dir_open(path, 0, NULL))) |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
768 | { |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
769 | g_free(path); |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
770 | return 0; |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
771 | } |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
772 | |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
773 | while ((filename = g_dir_read_name(dir))) |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
774 | { |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
775 | if (gaim_str_has_suffix(filename, ext) && |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
776 | strlen(filename) >= (17 + strlen(ext))) |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
777 | { |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
778 | char *tmp = g_build_filename(path, filename, NULL); |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
779 | struct stat st; |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
780 | if (g_stat(tmp, &st)) |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
781 | { |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
782 | gaim_debug_error("log", "Error stating log file: %s\n", tmp); |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
783 | g_free(tmp); |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
784 | continue; |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
785 | } |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
786 | g_free(tmp); |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
787 | size += st.st_size; |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
788 | } |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
789 | } |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
790 | g_dir_close(dir); |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
791 | g_free(path); |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
792 | return size; |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
793 | } |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
794 | |
| 10822 | 795 | int gaim_log_common_sizer(GaimLog *log) |
| 7556 | 796 | { |
| 797 | struct stat st; | |
| 10822 | 798 | GaimLogCommonLoggerData *data = log->logger_data; |
| 7556 | 799 | |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10577
diff
changeset
|
800 | if (!data->path || g_stat(data->path, &st)) |
| 7556 | 801 | st.st_size = 0; |
| 802 | ||
| 803 | return st.st_size; | |
| 804 | } | |
| 805 | ||
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
806 | /* This will build log sets for all loggers that use the common logger |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
807 | * functions because they use the same directory structure. */ |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
808 | static void log_get_log_sets_common(GHashTable *sets) |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
809 | { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
810 | gchar *log_path = g_build_filename(gaim_user_dir(), "logs", NULL); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
811 | GDir *log_dir = g_dir_open(log_path, 0, NULL); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
812 | const gchar *protocol; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
813 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
814 | if (log_dir == NULL) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
815 | g_free(log_path); |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
816 | return; |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
817 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
818 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
819 | while ((protocol = g_dir_read_name(log_dir)) != NULL) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
820 | gchar *protocol_path = g_build_filename(log_path, protocol, NULL); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
821 | GDir *protocol_dir; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
822 | const gchar *username; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
823 | gchar *protocol_unescaped; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
824 | GList *account_iter; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
825 | GList *accounts = NULL; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
826 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
827 | if ((protocol_dir = g_dir_open(protocol_path, 0, NULL)) == NULL) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
828 | g_free(protocol_path); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
829 | continue; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
830 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
831 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
832 | /* Using g_strdup() to cover the one-in-a-million chance that a |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
833 | * prpl's list_icon function uses gaim_unescape_filename(). */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
834 | protocol_unescaped = g_strdup(gaim_unescape_filename(protocol)); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
835 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
836 | /* Find all the accounts for protocol. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
837 | for (account_iter = gaim_accounts_get_all() ; account_iter != NULL ; account_iter = account_iter->next) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
838 | GaimPlugin *prpl; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
839 | GaimPluginProtocolInfo *prpl_info; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
840 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
841 | prpl = gaim_find_prpl(gaim_account_get_protocol_id((GaimAccount *)account_iter->data)); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
842 | if (!prpl) |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
843 | continue; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
844 | prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
845 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
846 | if (!strcmp(protocol_unescaped, prpl_info->list_icon((GaimAccount *)account_iter->data, NULL))) |
|
11703
6b22ef099870
[gaim-migrate @ 13994]
Richard Laager <rlaager@pidgin.im>
parents:
11698
diff
changeset
|
847 | accounts = g_list_prepend(accounts, account_iter->data); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
848 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
849 | g_free(protocol_unescaped); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
850 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
851 | while ((username = g_dir_read_name(protocol_dir)) != NULL) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
852 | gchar *username_path = g_build_filename(protocol_path, username, NULL); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
853 | GDir *username_dir; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
854 | const gchar *username_unescaped; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
855 | GaimAccount *account = NULL; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
856 | gchar *name; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
857 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
858 | if ((username_dir = g_dir_open(username_path, 0, NULL)) == NULL) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
859 | g_free(username_path); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
860 | continue; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
861 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
862 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
863 | /* Find the account for username in the list of accounts for protocol. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
864 | username_unescaped = gaim_unescape_filename(username); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
865 | for (account_iter = g_list_first(accounts) ; account_iter != NULL ; account_iter = account_iter->next) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
866 | if (!strcmp(((GaimAccount *)account_iter->data)->username, username_unescaped)) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
867 | account = account_iter->data; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
868 | break; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
869 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
870 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
871 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
872 | /* Don't worry about the cast, name will point to dynamically allocated memory shortly. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
873 | while ((name = (gchar *)g_dir_read_name(username_dir)) != NULL) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
874 | size_t len; |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
875 | GaimLogSet *set; |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
876 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
877 | /* IMPORTANT: Always initialize all members of GaimLogSet */ |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
878 | set = g_slice_new(GaimLogSet); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
879 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
880 | /* Unescape the filename. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
881 | name = g_strdup(gaim_unescape_filename(name)); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
882 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
883 | /* Get the (possibly new) length of name. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
884 | len = strlen(name); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
885 | |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
886 | set->type = GAIM_LOG_IM; |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
887 | set->name = name; |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
888 | set->account = account; |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
889 | /* set->buddy is always set below */ |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
890 | set->normalized_name = g_strdup(gaim_normalize(account, name)); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
891 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
892 | /* Chat for .chat or .system at the end of the name to determine the type. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
893 | if (len > 7) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
894 | gchar *tmp = &name[len - 7]; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
895 | if (!strcmp(tmp, ".system")) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
896 | set->type = GAIM_LOG_SYSTEM; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
897 | *tmp = '\0'; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
898 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
899 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
900 | if (len > 5) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
901 | gchar *tmp = &name[len - 5]; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
902 | if (!strcmp(tmp, ".chat")) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
903 | set->type = GAIM_LOG_CHAT; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
904 | *tmp = '\0'; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
905 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
906 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
907 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
908 | /* Determine if this (account, name) combination exists as a buddy. */ |
|
11458
68f0a3698528
[gaim-migrate @ 13697]
Richard Laager <rlaager@pidgin.im>
parents:
11292
diff
changeset
|
909 | if (account != NULL) |
|
68f0a3698528
[gaim-migrate @ 13697]
Richard Laager <rlaager@pidgin.im>
parents:
11292
diff
changeset
|
910 | set->buddy = (gaim_find_buddy(account, name) != NULL); |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
911 | else |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
912 | set->buddy = FALSE; |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
913 | |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
914 | log_add_log_set_to_hash(sets, set); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
915 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
916 | g_free(username_path); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
917 | g_dir_close(username_dir); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
918 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
919 | g_free(protocol_path); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
920 | g_dir_close(protocol_dir); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
921 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
922 | g_free(log_path); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
923 | g_dir_close(log_dir); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
924 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
925 | |
| 7431 | 926 | #if 0 /* Maybe some other time. */ |
| 7443 | 927 | /**************** |
| 7431 | 928 | ** XML LOGGER ** |
| 929 | ****************/ | |
| 930 | ||
| 931 | static const char *str_from_msg_type (GaimMessageFlags type) | |
| 932 | { | |
| 7443 | 933 | |
| 7431 | 934 | return ""; |
| 7443 | 935 | |
| 7431 | 936 | } |
| 937 | ||
| 7443 | 938 | static void xml_logger_write(GaimLog *log, |
| 939 | GaimMessageFlags type, | |
| 7431 | 940 | const char *from, time_t time, const char *message) |
| 941 | { | |
| 942 | char *xhtml = NULL; | |
|
10577
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
943 | |
| 7431 | 944 | if (!log->logger_data) { |
| 945 | /* This log is new. We could use the loggers 'new' function, but | |
| 946 | * creating a new file there would result in empty files in the case | |
| 947 | * that you open a convo with someone, but don't say anything. | |
| 948 | */ | |
|
13163
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
949 | struct tm *tm; |
|
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
950 | const char *tz; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
951 | const char *date; |
|
9923
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
952 | char *dir = gaim_log_get_log_dir(log->type, log->name, log->account); |
|
13163
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
953 | char *name; |
|
13155
fa27cdf2986e
[gaim-migrate @ 15517]
Richard Laager <rlaager@pidgin.im>
parents:
13120
diff
changeset
|
954 | char *filename; |
|
10577
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
955 | |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
956 | if (dir == NULL) |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
957 | return; |
|
f27149d1cddf
[gaim-migrate @ 11971]
Richard Laager <rlaager@pidgin.im>
parents:
10173
diff
changeset
|
958 | |
|
13163
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
959 | tm = localtime(&log->time); |
|
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
960 | tz = gaim_escape_filename(gaim_utf8_strftime("%Z", tm); |
|
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
961 | date = gaim_utf8_strftime("%Y-%m-%d.%H%M%S%z", tm); |
|
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
962 | |
|
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
963 | name = g_strdup_printf("%s%s%s", date, tz, ext ? ext : ""); |
| 7443 | 964 | |
| 7612 | 965 | gaim_build_dir (dir, S_IRUSR | S_IWUSR | S_IXUSR); |
| 7443 | 966 | |
|
13163
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
967 | filename = g_build_filename(dir, name, NULL); |
| 7431 | 968 | g_free(dir); |
|
13163
2026e49825df
[gaim-migrate @ 15525]
Richard Laager <rlaager@pidgin.im>
parents:
13161
diff
changeset
|
969 | g_free(name); |
| 7443 | 970 | |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10577
diff
changeset
|
971 | log->logger_data = g_fopen(filename, "a"); |
| 7431 | 972 | if (!log->logger_data) { |
| 973 | gaim_debug(GAIM_DEBUG_ERROR, "log", "Could not create log file %s\n", filename); | |
| 7564 | 974 | g_free(filename); |
| 7431 | 975 | return; |
| 976 | } | |
| 7564 | 977 | g_free(filename); |
| 7431 | 978 | fprintf(log->logger_data, "<?xml version='1.0' encoding='UTF-8' ?>\n" |
| 979 | "<?xml-stylesheet href='file:///usr/src/web/htdocs/log-stylesheet.xsl' type='text/xml' ?>\n"); | |
| 7443 | 980 | |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
981 | date = gaim_utf8_strftime("%Y-%m-%d %H:%M:%S", localtime(&log->time)); |
| 7431 | 982 | fprintf(log->logger_data, "<conversation time='%s' screenname='%s' protocol='%s'>\n", |
| 983 | date, log->name, prpl); | |
| 984 | } | |
| 7443 | 985 | |
|
9923
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
986 | /* if we can't write to the file, give up before we hurt ourselves */ |
|
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
987 | if(!data->file) |
|
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
988 | return; |
|
f3060096e964
[gaim-migrate @ 10815]
Daniel Atallah <datallah@pidgin.im>
parents:
9892
diff
changeset
|
989 | |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
990 | date = log_get_timestamp(log, time); |
|
12692
249f9d844f6f
[gaim-migrate @ 15035]
Douglas Thrift <douglas@douglasthrift.net>
parents:
12574
diff
changeset
|
991 | |
| 7431 | 992 | gaim_markup_html_to_xhtml(message, &xhtml, NULL); |
| 993 | if (from) | |
| 7443 | 994 | fprintf(log->logger_data, "<message %s %s from='%s' time='%s'>%s</message>\n", |
| 995 | str_from_msg_type(type), | |
| 7431 | 996 | type & GAIM_MESSAGE_SEND ? "direction='sent'" : |
| 997 | type & GAIM_MESSAGE_RECV ? "direction='received'" : "", | |
| 998 | from, date, xhtml); | |
| 999 | else | |
| 7443 | 1000 | fprintf(log->logger_data, "<message %s %s time='%s'>%s</message>\n", |
| 1001 | str_from_msg_type(type), | |
| 7431 | 1002 | type & GAIM_MESSAGE_SEND ? "direction='sent'" : |
| 1003 | type & GAIM_MESSAGE_RECV ? "direction='received'" : "", | |
| 7443 | 1004 | date, xhtml): |
| 7431 | 1005 | fflush(log->logger_data); |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1006 | g_free(date); |
| 7431 | 1007 | g_free(xhtml); |
| 7443 | 1008 | } |
| 1009 | ||
| 7431 | 1010 | static void xml_logger_finalize(GaimLog *log) |
| 1011 | { | |
| 1012 | if (log->logger_data) { | |
| 1013 | fprintf(log->logger_data, "</conversation>\n"); | |
| 1014 | fclose(log->logger_data); | |
| 1015 | log->logger_data = NULL; | |
| 1016 | } | |
| 1017 | } | |
| 7443 | 1018 | |
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
1019 | static GList *xml_logger_list(GaimLogType type, const char *sn, GaimAccount *account) |
| 7431 | 1020 | { |
| 10822 | 1021 | return gaim_log_common_lister(type, sn, account, ".xml", &xml_logger); |
| 4184 | 1022 | } |
| 1023 | ||
| 7431 | 1024 | static GaimLogLogger xml_logger = { |
| 1025 | N_("XML"), "xml", | |
| 1026 | NULL, | |
| 1027 | xml_logger_write, | |
| 1028 | xml_logger_finalize, | |
| 1029 | xml_logger_list, | |
| 8096 | 1030 | NULL, |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1031 | NULL, |
| 7431 | 1032 | NULL |
| 1033 | }; | |
| 1034 | #endif | |
|
5563
d5a7852aa0cb
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
1035 | |
| 7431 | 1036 | /**************************** |
| 7457 | 1037 | ** HTML LOGGER ************* |
| 1038 | ****************************/ | |
| 1039 | ||
| 13059 | 1040 | static gsize html_logger_write(GaimLog *log, GaimMessageFlags type, |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
1041 | const char *from, time_t time, const char *message) |
| 7457 | 1042 | { |
| 9763 | 1043 | char *msg_fixed; |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1044 | char *date; |
|
13514
735953c0929d
[gaim-migrate @ 15889]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13513
diff
changeset
|
1045 | char *header; |
| 9613 | 1046 | GaimPlugin *plugin = gaim_find_prpl(gaim_account_get_protocol_id(log->account)); |
| 10822 | 1047 | GaimLogCommonLoggerData *data = log->logger_data; |
| 13059 | 1048 | gsize written = 0; |
| 9613 | 1049 | |
| 7618 | 1050 | if(!data) { |
| 9763 | 1051 | const char *prpl = |
| 1052 | GAIM_PLUGIN_PROTOCOL_INFO(plugin)->list_icon(log->account, NULL); | |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
1053 | const char *date; |
|
11292
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
1054 | gaim_log_common_writer(log, ".html"); |
| 7457 | 1055 | |
| 9763 | 1056 | data = log->logger_data; |
| 7457 | 1057 | |
| 9763 | 1058 | /* if we can't write to the file, give up before we hurt ourselves */ |
| 1059 | if(!data->file) | |
| 13059 | 1060 | return 0; |
| 7616 | 1061 | |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
1062 | date = gaim_date_format_full(localtime(&log->time)); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13078
diff
changeset
|
1063 | |
| 13059 | 1064 | written += fprintf(data->file, "<html><head>"); |
| 1065 | written += fprintf(data->file, "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">"); | |
| 1066 | written += fprintf(data->file, "<title>"); | |
|
13509
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1067 | if (log->type == GAIM_LOG_SYSTEM) |
|
13514
735953c0929d
[gaim-migrate @ 15889]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13513
diff
changeset
|
1068 | header = g_strdup_printf("System log for account %s (%s) connected at %s", |
|
13509
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1069 | gaim_account_get_username(log->account), prpl, date); |
|
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1070 | else |
|
13514
735953c0929d
[gaim-migrate @ 15889]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13513
diff
changeset
|
1071 | header = g_strdup_printf("Conversation with %s at %s on %s (%s)", |
|
13509
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1072 | log->name, date, gaim_account_get_username(log->account), prpl); |
|
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1073 | |
|
13514
735953c0929d
[gaim-migrate @ 15889]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13513
diff
changeset
|
1074 | written += fprintf(data->file, "%s", header); |
| 13059 | 1075 | written += fprintf(data->file, "</title></head><body>"); |
|
13509
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1076 | written += fprintf(data->file, "<h3>%s</h3>\n", header); |
|
13514
735953c0929d
[gaim-migrate @ 15889]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13513
diff
changeset
|
1077 | g_free(header); |
| 7457 | 1078 | } |
| 7623 | 1079 | |
| 9892 | 1080 | /* if we can't write to the file, give up before we hurt ourselves */ |
| 1081 | if(!data->file) | |
| 13059 | 1082 | return 0; |
| 9892 | 1083 | |
| 7882 | 1084 | gaim_markup_html_to_xhtml(message, &msg_fixed, NULL); |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1085 | date = log_get_timestamp(log, time); |
| 7882 | 1086 | |
| 8577 | 1087 | if(log->type == GAIM_LOG_SYSTEM){ |
| 13059 | 1088 | written += fprintf(data->file, "---- %s @ %s ----<br/>\n", msg_fixed, date); |
| 8577 | 1089 | } else { |
| 1090 | if (type & GAIM_MESSAGE_SYSTEM) | |
| 13059 | 1091 | written += fprintf(data->file, "<font size=\"2\">(%s)</font><b> %s</b><br/>\n", date, msg_fixed); |
|
13069
37b879f161f4
[gaim-migrate @ 15431]
Richard Laager <rlaager@pidgin.im>
parents:
13068
diff
changeset
|
1092 | else if (type & GAIM_MESSAGE_ERROR) |
|
37b879f161f4
[gaim-migrate @ 15431]
Richard Laager <rlaager@pidgin.im>
parents:
13068
diff
changeset
|
1093 | written += fprintf(data->file, "<font color=\"#FF0000\"><font size=\"2\">(%s)</font><b> %s</b></font><br/>\n", date, msg_fixed); |
| 8577 | 1094 | else if (type & GAIM_MESSAGE_WHISPER) |
| 13059 | 1095 | written += fprintf(data->file, "<font color=\"#6C2585\"><font size=\"2\">(%s)</font><b> %s:</b></font> %s<br/>\n", |
| 8577 | 1096 | date, from, msg_fixed); |
| 1097 | else if (type & GAIM_MESSAGE_AUTO_RESP) { | |
| 1098 | if (type & GAIM_MESSAGE_SEND) | |
| 13059 | 1099 | written += fprintf(data->file, _("<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-REPLY>:</b></font> %s<br/>\n"), date, from, msg_fixed); |
| 8577 | 1100 | else if (type & GAIM_MESSAGE_RECV) |
| 13059 | 1101 | written += fprintf(data->file, _("<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-REPLY>:</b></font> %s<br/>\n"), date, from, msg_fixed); |
| 8577 | 1102 | } else if (type & GAIM_MESSAGE_RECV) { |
| 1103 | if(gaim_message_meify(msg_fixed, -1)) | |
| 13059 | 1104 | written += fprintf(data->file, "<font color=\"#062585\"><font size=\"2\">(%s)</font> <b>***%s</b></font> %s<br/>\n", |
|
10645
f00e65bebc8b
[gaim-migrate @ 12157]
Richard Laager <rlaager@pidgin.im>
parents:
10589
diff
changeset
|
1105 | date, from, msg_fixed); |
| 8577 | 1106 | else |
| 13059 | 1107 | written += fprintf(data->file, "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s:</b></font> %s<br/>\n", |
|
10645
f00e65bebc8b
[gaim-migrate @ 12157]
Richard Laager <rlaager@pidgin.im>
parents:
10589
diff
changeset
|
1108 | date, from, msg_fixed); |
| 8577 | 1109 | } else if (type & GAIM_MESSAGE_SEND) { |
| 1110 | if(gaim_message_meify(msg_fixed, -1)) | |
| 13059 | 1111 | written += fprintf(data->file, "<font color=\"#062585\"><font size=\"2\">(%s)</font> <b>***%s</b></font> %s<br/>\n", |
|
10645
f00e65bebc8b
[gaim-migrate @ 12157]
Richard Laager <rlaager@pidgin.im>
parents:
10589
diff
changeset
|
1112 | date, from, msg_fixed); |
| 8577 | 1113 | else |
| 13059 | 1114 | written += fprintf(data->file, "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s:</b></font> %s<br/>\n", |
|
10645
f00e65bebc8b
[gaim-migrate @ 12157]
Richard Laager <rlaager@pidgin.im>
parents:
10589
diff
changeset
|
1115 | date, from, msg_fixed); |
|
13069
37b879f161f4
[gaim-migrate @ 15431]
Richard Laager <rlaager@pidgin.im>
parents:
13068
diff
changeset
|
1116 | } else { |
|
37b879f161f4
[gaim-migrate @ 15431]
Richard Laager <rlaager@pidgin.im>
parents:
13068
diff
changeset
|
1117 | gaim_debug_error("log", "Unhandled message type."); |
|
37b879f161f4
[gaim-migrate @ 15431]
Richard Laager <rlaager@pidgin.im>
parents:
13068
diff
changeset
|
1118 | written += fprintf(data->file, "<font size=\"2\">(%s)</font><b> %s:</b></font> %s<br/>\n", |
|
13520
f89ab3c41f4b
[gaim-migrate @ 15895]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13514
diff
changeset
|
1119 | date, from, msg_fixed); |
| 8577 | 1120 | } |
| 7564 | 1121 | } |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1122 | g_free(date); |
| 7882 | 1123 | g_free(msg_fixed); |
| 7616 | 1124 | fflush(data->file); |
| 13059 | 1125 | |
| 1126 | return written; | |
| 7457 | 1127 | } |
| 1128 | ||
| 1129 | static void html_logger_finalize(GaimLog *log) | |
| 1130 | { | |
| 10822 | 1131 | GaimLogCommonLoggerData *data = log->logger_data; |
| 7616 | 1132 | if (data) { |
| 1133 | if(data->file) { | |
|
12881
d4db623e3d8c
[gaim-migrate @ 15233]
Richard Laager <rlaager@pidgin.im>
parents:
12834
diff
changeset
|
1134 | fprintf(data->file, "</body></html>\n"); |
| 7616 | 1135 | fclose(data->file); |
| 1136 | } | |
| 1137 | g_free(data->path); | |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1138 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1139 | g_slice_free(GaimLogCommonLoggerData, data); |
| 7463 | 1140 | } |
| 7457 | 1141 | } |
| 1142 | ||
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
1143 | static GList *html_logger_list(GaimLogType type, const char *sn, GaimAccount *account) |
| 7457 | 1144 | { |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
1145 | return gaim_log_common_lister(type, sn, account, ".html", html_logger); |
| 7457 | 1146 | } |
| 1147 | ||
| 8573 | 1148 | static GList *html_logger_list_syslog(GaimAccount *account) |
| 1149 | { | |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
1150 | return gaim_log_common_lister(GAIM_LOG_SYSTEM, ".system", account, ".html", html_logger); |
| 8573 | 1151 | } |
| 1152 | ||
| 7457 | 1153 | static char *html_logger_read(GaimLog *log, GaimLogReadFlags *flags) |
| 1154 | { | |
|
12958
706645a0b944
[gaim-migrate @ 15311]
Richard Laager <rlaager@pidgin.im>
parents:
12881
diff
changeset
|
1155 | char *read; |
| 10822 | 1156 | GaimLogCommonLoggerData *data = log->logger_data; |
| 7457 | 1157 | *flags = GAIM_LOG_READ_NO_NEWLINE; |
| 7616 | 1158 | if (!data || !data->path) |
| 1159 | return g_strdup(_("<font color=\"red\"><b>Unable to find log path!</b></font>")); | |
| 1160 | if (g_file_get_contents(data->path, &read, NULL, NULL)) { | |
|
12958
706645a0b944
[gaim-migrate @ 15311]
Richard Laager <rlaager@pidgin.im>
parents:
12881
diff
changeset
|
1161 | char *minus_header = strchr(read, '\n'); |
|
706645a0b944
[gaim-migrate @ 15311]
Richard Laager <rlaager@pidgin.im>
parents:
12881
diff
changeset
|
1162 | |
| 7457 | 1163 | if (!minus_header) |
|
12958
706645a0b944
[gaim-migrate @ 15311]
Richard Laager <rlaager@pidgin.im>
parents:
12881
diff
changeset
|
1164 | return read; |
|
706645a0b944
[gaim-migrate @ 15311]
Richard Laager <rlaager@pidgin.im>
parents:
12881
diff
changeset
|
1165 | |
|
706645a0b944
[gaim-migrate @ 15311]
Richard Laager <rlaager@pidgin.im>
parents:
12881
diff
changeset
|
1166 | minus_header = g_strdup(minus_header + 1); |
| 7457 | 1167 | g_free(read); |
|
12958
706645a0b944
[gaim-migrate @ 15311]
Richard Laager <rlaager@pidgin.im>
parents:
12881
diff
changeset
|
1168 | |
| 7457 | 1169 | return minus_header; |
| 1170 | } | |
| 8578 | 1171 | return g_strdup_printf(_("<font color=\"red\"><b>Could not read file: %s</b></font>"), data->path); |
| 7457 | 1172 | } |
| 1173 | ||
|
13389
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
1174 | static int html_logger_total_size(GaimLogType type, const char *name, GaimAccount *account) |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
1175 | { |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
1176 | return gaim_log_common_total_sizer(type, name, account, ".html"); |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
1177 | } |
| 7457 | 1178 | |
| 1179 | ||
| 1180 | /**************************** | |
| 7431 | 1181 | ** PLAIN TEXT LOGGER ******* |
| 1182 | ****************************/ | |
| 4184 | 1183 | |
| 13059 | 1184 | static gsize txt_logger_write(GaimLog *log, |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
1185 | GaimMessageFlags type, |
|
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
1186 | const char *from, time_t time, const char *message) |
| 7431 | 1187 | { |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1188 | char *date; |
| 9763 | 1189 | GaimPlugin *plugin = gaim_find_prpl(gaim_account_get_protocol_id(log->account)); |
| 10822 | 1190 | GaimLogCommonLoggerData *data = log->logger_data; |
| 9763 | 1191 | char *stripped = NULL; |
| 1192 | ||
| 13059 | 1193 | gsize written = 0; |
| 1194 | ||
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
1195 | if (data == NULL) { |
| 7431 | 1196 | /* This log is new. We could use the loggers 'new' function, but |
| 1197 | * creating a new file there would result in empty files in the case | |
| 1198 | * that you open a convo with someone, but don't say anything. | |
| 1199 | */ | |
| 9763 | 1200 | const char *prpl = |
| 1201 | GAIM_PLUGIN_PROTOCOL_INFO(plugin)->list_icon(log->account, NULL); | |
|
11292
13068c68def6
[gaim-migrate @ 13492]
Richard Laager <rlaager@pidgin.im>
parents:
11256
diff
changeset
|
1202 | gaim_log_common_writer(log, ".txt"); |
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
1203 | |
| 9763 | 1204 | data = log->logger_data; |
| 7436 | 1205 | |
| 9763 | 1206 | /* if we can't write to the file, give up before we hurt ourselves */ |
| 1207 | if(!data->file) | |
| 13059 | 1208 | return 0; |
| 7616 | 1209 | |
|
13509
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1210 | if (log->type == GAIM_LOG_SYSTEM) |
|
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1211 | written += fprintf(data->file, "System log for account %s (%s) connected at %s\n", |
|
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1212 | gaim_account_get_username(log->account), prpl, |
|
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1213 | gaim_date_format_full(localtime(&log->time))); |
|
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1214 | else |
|
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1215 | written += fprintf(data->file, "Conversation with %s at %s on %s (%s)\n", |
|
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1216 | log->name, gaim_date_format_full(localtime(&log->time)), |
|
38ebac941c40
[gaim-migrate @ 15884]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
13474
diff
changeset
|
1217 | gaim_account_get_username(log->account), prpl); |
| 7431 | 1218 | } |
| 7436 | 1219 | |
| 7623 | 1220 | /* if we can't write to the file, give up before we hurt ourselves */ |
| 1221 | if(!data->file) | |
| 13059 | 1222 | return 0; |
| 7623 | 1223 | |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1224 | stripped = gaim_markup_strip_html(message); |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1225 | date = log_get_timestamp(log, time); |
|
12692
249f9d844f6f
[gaim-migrate @ 15035]
Douglas Thrift <douglas@douglasthrift.net>
parents:
12574
diff
changeset
|
1226 | |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1227 | if(log->type == GAIM_LOG_SYSTEM){ |
| 13059 | 1228 | written += fprintf(data->file, "---- %s @ %s ----\n", stripped, date); |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1229 | } else { |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1230 | if (type & GAIM_MESSAGE_SEND || |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1231 | type & GAIM_MESSAGE_RECV) { |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1232 | if (type & GAIM_MESSAGE_AUTO_RESP) { |
| 13059 | 1233 | written += fprintf(data->file, _("(%s) %s <AUTO-REPLY>: %s\n"), date, |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1234 | from, stripped); |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1235 | } else { |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1236 | if(gaim_message_meify(stripped, -1)) |
| 13059 | 1237 | written += fprintf(data->file, "(%s) ***%s %s\n", date, from, |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1238 | stripped); |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1239 | else |
| 13059 | 1240 | written += fprintf(data->file, "(%s) %s: %s\n", date, from, |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1241 | stripped); |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1242 | } |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1243 | } else if (type & GAIM_MESSAGE_SYSTEM) |
| 13059 | 1244 | written += fprintf(data->file, "(%s) %s\n", date, stripped); |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1245 | else if (type & GAIM_MESSAGE_NO_LOG) { |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1246 | /* This shouldn't happen */ |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1247 | g_free(stripped); |
| 13059 | 1248 | return written; |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1249 | } else if (type & GAIM_MESSAGE_WHISPER) |
| 13059 | 1250 | written += fprintf(data->file, "(%s) *%s* %s", date, from, stripped); |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1251 | else |
| 13059 | 1252 | written += fprintf(data->file, "(%s) %s%s %s\n", date, from ? from : "", |
|
12737
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1253 | from ? ":" : "", stripped); |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1254 | } |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1255 | g_free(date); |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1256 | g_free(stripped); |
|
e1300804318e
[gaim-migrate @ 15082]
Richard Laager <rlaager@pidgin.im>
parents:
12692
diff
changeset
|
1257 | fflush(data->file); |
| 13059 | 1258 | |
| 1259 | return written; | |
| 7431 | 1260 | } |
| 1261 | ||
| 1262 | static void txt_logger_finalize(GaimLog *log) | |
| 1263 | { | |
| 10822 | 1264 | GaimLogCommonLoggerData *data = log->logger_data; |
| 7616 | 1265 | if (data) { |
| 1266 | if(data->file) | |
| 1267 | fclose(data->file); | |
| 1268 | if(data->path) | |
| 1269 | g_free(data->path); | |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1270 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1271 | g_slice_free(GaimLogCommonLoggerData, data); |
| 7616 | 1272 | } |
| 7431 | 1273 | } |
| 1274 | ||
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
1275 | static GList *txt_logger_list(GaimLogType type, const char *sn, GaimAccount *account) |
| 7431 | 1276 | { |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
1277 | return gaim_log_common_lister(type, sn, account, ".txt", txt_logger); |
| 7431 | 1278 | } |
| 1279 | ||
| 8573 | 1280 | static GList *txt_logger_list_syslog(GaimAccount *account) |
| 1281 | { | |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
1282 | return gaim_log_common_lister(GAIM_LOG_SYSTEM, ".system", account, ".txt", txt_logger); |
| 8573 | 1283 | } |
| 1284 | ||
| 7431 | 1285 | static char *txt_logger_read(GaimLog *log, GaimLogReadFlags *flags) |
| 1286 | { | |
| 8517 | 1287 | char *read, *minus_header, *minus_header2; |
| 10822 | 1288 | GaimLogCommonLoggerData *data = log->logger_data; |
| 7457 | 1289 | *flags = 0; |
| 7616 | 1290 | if (!data || !data->path) |
| 1291 | return g_strdup(_("<font color=\"red\"><b>Unable to find log path!</b></font>")); | |
| 1292 | if (g_file_get_contents(data->path, &read, NULL, NULL)) { | |
| 7431 | 1293 | minus_header = strchr(read, '\n'); |
| 1294 | if (!minus_header) | |
| 1295 | minus_header = g_strdup(read); | |
| 7436 | 1296 | else |
| 7431 | 1297 | minus_header = g_strdup(minus_header + 1); |
| 1298 | g_free(read); | |
|
10732
5e314ab498bf
[gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents:
10645
diff
changeset
|
1299 | minus_header2 = g_markup_escape_text(minus_header, -1); |
| 8517 | 1300 | g_free(minus_header); |
|
13358
9504caa8cb7f
[gaim-migrate @ 15730]
Richard Laager <rlaager@pidgin.im>
parents:
13334
diff
changeset
|
1301 | read = gaim_markup_linkify(minus_header2); |
|
9504caa8cb7f
[gaim-migrate @ 15730]
Richard Laager <rlaager@pidgin.im>
parents:
13334
diff
changeset
|
1302 | g_free(minus_header2); |
|
9504caa8cb7f
[gaim-migrate @ 15730]
Richard Laager <rlaager@pidgin.im>
parents:
13334
diff
changeset
|
1303 | return read; |
| 7431 | 1304 | } |
| 8578 | 1305 | return g_strdup_printf(_("<font color=\"red\"><b>Could not read file: %s</b></font>"), data->path); |
| 7436 | 1306 | } |
| 7431 | 1307 | |
|
13389
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
1308 | static int txt_logger_total_size(GaimLogType type, const char *name, GaimAccount *account) |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
1309 | { |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
1310 | return gaim_log_common_total_sizer(type, name, account, ".txt"); |
|
27cf7d84dfd1
[gaim-migrate @ 15761]
Richard Laager <rlaager@pidgin.im>
parents:
13358
diff
changeset
|
1311 | } |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
1312 | |
| 7431 | 1313 | |
| 1314 | /**************** | |
| 1315 | * OLD LOGGER *** | |
| 1316 | ****************/ | |
| 1317 | ||
| 1318 | /* The old logger doesn't write logs, only reads them. This is to include | |
| 1319 | * old logs in the log viewer transparently. | |
| 1320 | */ | |
| 1321 | ||
| 1322 | struct old_logger_data { | |
| 7764 | 1323 | GaimStringref *pathref; |
| 7431 | 1324 | int offset; |
| 1325 | int length; | |
| 1326 | }; | |
| 1327 | ||
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
1328 | static GList *old_logger_list(GaimLogType type, const char *sn, GaimAccount *account) |
| 7431 | 1329 | { |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1330 | char *logfile = g_strdup_printf("%s.log", gaim_normalize(account, sn)); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1331 | char *pathstr = g_build_filename(gaim_user_dir(), "logs", logfile, NULL); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1332 | GaimStringref *pathref = gaim_stringref_new(pathstr); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1333 | struct stat st; |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1334 | time_t log_last_modified; |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1335 | FILE *index; |
| 7431 | 1336 | FILE *file; |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1337 | int index_fd; |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1338 | char *index_tmp; |
| 7431 | 1339 | char buf[BUF_LONG]; |
| 1340 | struct tm tm; | |
| 7761 | 1341 | char month[4]; |
| 7431 | 1342 | struct old_logger_data *data = NULL; |
| 1343 | char *newlog; | |
| 7761 | 1344 | int logfound = 0; |
| 1345 | int lastoff = 0; | |
| 1346 | int newlen; | |
| 7791 | 1347 | time_t lasttime = 0; |
| 7431 | 1348 | |
| 1349 | GaimLog *log = NULL; | |
| 1350 | GList *list = NULL; | |
| 1351 | ||
|
7473
881da47ca83f
[gaim-migrate @ 8086]
Mark Doliner <markdoliner@pidgin.im>
parents:
7472
diff
changeset
|
1352 | g_free(logfile); |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1353 | |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1354 | if (g_stat(gaim_stringref_value(pathref), &st)) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1355 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1356 | gaim_stringref_unref(pathref); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1357 | g_free(pathstr); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1358 | return NULL; |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1359 | } |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1360 | else |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1361 | log_last_modified = st.st_mtime; |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1362 | |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1363 | /* Change the .log extension to .idx */ |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1364 | strcpy(pathstr + strlen(pathstr) - 3, "idx"); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1365 | |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1366 | if (g_stat(pathstr, &st) == 0) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1367 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1368 | if (st.st_mtime < log_last_modified) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1369 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1370 | gaim_debug_warning("log", "Index \"%s\" exists, but is older than the log.\n", pathstr); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1371 | } |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1372 | else |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1373 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1374 | /* The index file exists and is at least as new as the log, so open it. */ |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1375 | if (!(index = g_fopen(pathstr, "rb"))) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1376 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1377 | gaim_debug_error("log", "Failed to open index file \"%s\" for reading: %s\n", |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1378 | pathstr, strerror(errno)); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1379 | |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1380 | /* Fall through so that we'll parse the log file. */ |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1381 | } |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1382 | else |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1383 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1384 | gaim_debug_info("log", "Using index: %s\n", pathstr); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1385 | g_free(pathstr); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1386 | while (fgets(buf, BUF_LONG, index)) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1387 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1388 | unsigned long idx_time; |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1389 | if (sscanf(buf, "%d\t%d\t%lu", &lastoff, &newlen, &idx_time) == 3) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1390 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1391 | log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, -1, NULL); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1392 | log->logger = old_logger; |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1393 | log->time = (time_t)idx_time; |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1394 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1395 | /* IMPORTANT: Always set all members of struct old_logger_data */ |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1396 | data = g_slice_new(struct old_logger_data); |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1397 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1398 | data->pathref = gaim_stringref_ref(pathref); |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1399 | data->offset = lastoff; |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1400 | data->length = newlen; |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1401 | |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1402 | log->logger_data = data; |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1403 | list = g_list_prepend(list, log); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1404 | } |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1405 | } |
|
13469
6c9da180e40d
[gaim-migrate @ 15843]
Richard Laager <rlaager@pidgin.im>
parents:
13412
diff
changeset
|
1406 | fclose(index); |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1407 | |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1408 | return list; |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1409 | } |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1410 | } |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1411 | } |
|
7473
881da47ca83f
[gaim-migrate @ 8086]
Mark Doliner <markdoliner@pidgin.im>
parents:
7472
diff
changeset
|
1412 | |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10577
diff
changeset
|
1413 | if (!(file = g_fopen(gaim_stringref_value(pathref), "rb"))) { |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1414 | gaim_debug_error("log", "Failed to open log file \"%s\" for reading: %s\n", |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1415 | gaim_stringref_value(pathref), strerror(errno)); |
| 7764 | 1416 | gaim_stringref_unref(pathref); |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1417 | g_free(pathstr); |
| 7431 | 1418 | return NULL; |
|
7447
4876aeb16c60
[gaim-migrate @ 8058]
Mark Doliner <markdoliner@pidgin.im>
parents:
7443
diff
changeset
|
1419 | } |
| 7436 | 1420 | |
|
13473
8fe2387d215b
[gaim-migrate @ 15848]
Richard Laager <rlaager@pidgin.im>
parents:
13472
diff
changeset
|
1421 | index_tmp = g_strdup_printf("%s.XXXXXX", pathstr); |
|
8fe2387d215b
[gaim-migrate @ 15848]
Richard Laager <rlaager@pidgin.im>
parents:
13472
diff
changeset
|
1422 | if ((index_fd = g_mkstemp(index_tmp)) == -1) { |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1423 | gaim_debug_error("log", "Failed to open index temp file: %s\n", |
|
13473
8fe2387d215b
[gaim-migrate @ 15848]
Richard Laager <rlaager@pidgin.im>
parents:
13472
diff
changeset
|
1424 | strerror(errno)); |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1425 | g_free(pathstr); |
|
13473
8fe2387d215b
[gaim-migrate @ 15848]
Richard Laager <rlaager@pidgin.im>
parents:
13472
diff
changeset
|
1426 | g_free(index_tmp); |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1427 | index = NULL; |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1428 | } else { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1429 | if ((index = fdopen(index_fd, "wb")) == NULL) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1430 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1431 | gaim_debug_error("log", "Failed to fdopen() index temp file: %s\n", |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1432 | strerror(errno)); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1433 | close(index_fd); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1434 | if (index_tmp != NULL) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1435 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1436 | g_unlink(index_tmp); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1437 | g_free(index_tmp); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1438 | } |
|
13412
67ef3053ef45
[gaim-migrate @ 15786]
Richard Laager <rlaager@pidgin.im>
parents:
13407
diff
changeset
|
1439 | g_free(pathstr); |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1440 | } |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1441 | } |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1442 | |
| 7431 | 1443 | while (fgets(buf, BUF_LONG, file)) { |
| 1444 | if ((newlog = strstr(buf, "---- New C"))) { | |
| 1445 | int length; | |
| 1446 | int offset; | |
| 1447 | char convostart[32]; | |
| 1448 | char *temp = strchr(buf, '@'); | |
| 7436 | 1449 | |
| 7431 | 1450 | if (temp == NULL || strlen(temp) < 2) |
| 1451 | continue; | |
| 7436 | 1452 | |
| 7431 | 1453 | temp++; |
| 1454 | length = strcspn(temp, "-"); | |
| 1455 | if (length > 31) length = 31; | |
| 7436 | 1456 | |
| 7431 | 1457 | offset = ftell(file); |
| 7436 | 1458 | |
| 7761 | 1459 | if (logfound) { |
| 1460 | newlen = offset - lastoff - length; | |
| 7436 | 1461 | if(strstr(buf, "----</H3><BR>")) { |
| 7761 | 1462 | newlen -= |
| 1463 | sizeof("<HR><BR><H3 Align=Center> ---- New Conversation @ ") + | |
| 1464 | sizeof("----</H3><BR>") - 2; | |
| 7436 | 1465 | } else { |
| 7761 | 1466 | newlen -= |
| 1467 | sizeof("---- New Conversation @ ") + sizeof("----") - 2; | |
| 7436 | 1468 | } |
| 1469 | ||
| 7461 | 1470 | if(strchr(buf, '\r')) |
| 7770 | 1471 | newlen--; |
| 7461 | 1472 | |
| 7761 | 1473 | if (newlen != 0) { |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
1474 | log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, -1, NULL); |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
1475 | log->logger = old_logger; |
| 7761 | 1476 | log->time = lasttime; |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1477 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1478 | /* IMPORTANT: Always set all members of struct old_logger_data */ |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1479 | data = g_slice_new(struct old_logger_data); |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1480 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1481 | data->pathref = gaim_stringref_ref(pathref); |
| 7761 | 1482 | data->offset = lastoff; |
| 1483 | data->length = newlen; | |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1484 | |
| 7761 | 1485 | log->logger_data = data; |
|
11703
6b22ef099870
[gaim-migrate @ 13994]
Richard Laager <rlaager@pidgin.im>
parents:
11698
diff
changeset
|
1486 | list = g_list_prepend(list, log); |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1487 | |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1488 | /* XXX: There is apparently Is there a proper way to print a time_t? */ |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1489 | if (index != NULL) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1490 | fprintf(index, "%d\t%d\t%lu\n", data->offset, data->length, (unsigned long)log->time); |
| 7761 | 1491 | } |
| 7431 | 1492 | } |
| 1493 | ||
| 7761 | 1494 | logfound = 1; |
| 1495 | lastoff = offset; | |
| 7436 | 1496 | |
| 7431 | 1497 | g_snprintf(convostart, length, "%s", temp); |
| 7676 | 1498 | sscanf(convostart, "%*s %s %d %d:%d:%d %d", |
| 1499 | month, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &tm.tm_year); | |
| 1500 | /* Ugly hack, in case current locale is not English */ | |
| 1501 | if (strcmp(month, "Jan") == 0) { | |
| 1502 | tm.tm_mon= 0; | |
| 1503 | } else if (strcmp(month, "Feb") == 0) { | |
| 1504 | tm.tm_mon = 1; | |
| 1505 | } else if (strcmp(month, "Mar") == 0) { | |
| 1506 | tm.tm_mon = 2; | |
| 1507 | } else if (strcmp(month, "Apr") == 0) { | |
| 1508 | tm.tm_mon = 3; | |
| 1509 | } else if (strcmp(month, "May") == 0) { | |
| 1510 | tm.tm_mon = 4; | |
| 1511 | } else if (strcmp(month, "Jun") == 0) { | |
| 1512 | tm.tm_mon = 5; | |
| 1513 | } else if (strcmp(month, "Jul") == 0) { | |
| 1514 | tm.tm_mon = 6; | |
| 1515 | } else if (strcmp(month, "Aug") == 0) { | |
| 1516 | tm.tm_mon = 7; | |
| 1517 | } else if (strcmp(month, "Sep") == 0) { | |
| 1518 | tm.tm_mon = 8; | |
| 1519 | } else if (strcmp(month, "Oct") == 0) { | |
| 1520 | tm.tm_mon = 9; | |
| 1521 | } else if (strcmp(month, "Nov") == 0) { | |
| 1522 | tm.tm_mon = 10; | |
| 1523 | } else if (strcmp(month, "Dec") == 0) { | |
| 1524 | tm.tm_mon = 11; | |
| 1525 | } | |
| 1526 | tm.tm_year -= 1900; | |
| 7761 | 1527 | lasttime = mktime(&tm); |
| 4184 | 1528 | } |
| 1529 | } | |
| 7613 | 1530 | |
| 7761 | 1531 | if (logfound) { |
| 1532 | if ((newlen = ftell(file) - lastoff) != 0) { | |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13107
diff
changeset
|
1533 | log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, -1, NULL); |
|
11503
9f15d4c089b9
[gaim-migrate @ 13748]
Richard Laager <rlaager@pidgin.im>
parents:
11458
diff
changeset
|
1534 | log->logger = old_logger; |
| 7761 | 1535 | log->time = lasttime; |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1536 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1537 | /* IMPORTANT: Always set all members of struct old_logger_data */ |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1538 | data = g_slice_new(struct old_logger_data); |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1539 | |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1540 | data->pathref = gaim_stringref_ref(pathref); |
| 7761 | 1541 | data->offset = lastoff; |
| 1542 | data->length = newlen; | |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1543 | |
| 7761 | 1544 | log->logger_data = data; |
|
11703
6b22ef099870
[gaim-migrate @ 13994]
Richard Laager <rlaager@pidgin.im>
parents:
11698
diff
changeset
|
1545 | list = g_list_prepend(list, log); |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1546 | |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1547 | /* XXX: Is there a proper way to print a time_t? */ |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1548 | if (index != NULL) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1549 | fprintf(index, "%d\t%d\t%d\n", data->offset, data->length, (int)log->time); |
| 7761 | 1550 | } |
| 7613 | 1551 | } |
| 1552 | ||
| 7764 | 1553 | gaim_stringref_unref(pathref); |
| 7431 | 1554 | fclose(file); |
|
13407
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1555 | if (index != NULL) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1556 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1557 | fclose(index); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1558 | |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1559 | if (index_tmp == NULL) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1560 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1561 | g_free(pathstr); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1562 | g_return_val_if_reached(list); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1563 | } |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1564 | |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1565 | if (g_rename(index_tmp, pathstr)) |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1566 | { |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1567 | gaim_debug_warning("log", "Failed to rename index temp file \"%s\" to \"%s\": %s\n", |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1568 | index_tmp, pathstr, strerror(errno)); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1569 | g_unlink(index_tmp); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1570 | g_free(index_tmp); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1571 | } |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1572 | else |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1573 | gaim_debug_info("log", "Built index: %s\n", pathstr); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1574 | |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1575 | g_free(pathstr); |
|
8b5d4dc349b1
[gaim-migrate @ 15781]
Richard Laager <rlaager@pidgin.im>
parents:
13389
diff
changeset
|
1576 | } |
| 7431 | 1577 | return list; |
| 4184 | 1578 | } |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4227
diff
changeset
|
1579 | |
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8635
diff
changeset
|
1580 | static int old_logger_total_size(GaimLogType type, const char *name, GaimAccount *account) |
| 8096 | 1581 | { |
| 1582 | char *logfile = g_strdup_printf("%s.log", gaim_normalize(account, name)); | |
| 1583 | char *pathstr = g_build_filename(gaim_user_dir(), "logs", logfile, NULL); | |
| 1584 | int size; | |
| 1585 | struct stat st; | |
| 1586 | ||
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10577
diff
changeset
|
1587 | if (g_stat(pathstr, &st)) |
| 8096 | 1588 | size = 0; |
| 1589 | else | |
| 1590 | size = st.st_size; | |
| 1591 | ||
| 1592 | g_free(logfile); | |
| 1593 | g_free(pathstr); | |
| 1594 | ||
| 1595 | return size; | |
| 1596 | } | |
| 1597 | ||
| 7616 | 1598 | static char * old_logger_read (GaimLog *log, GaimLogReadFlags *flags) |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4227
diff
changeset
|
1599 | { |
| 7431 | 1600 | struct old_logger_data *data = log->logger_data; |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10577
diff
changeset
|
1601 | FILE *file = g_fopen(gaim_stringref_value(data->pathref), "rb"); |
|
10906
1825ffb6b495
[gaim-migrate @ 12636]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10822
diff
changeset
|
1602 | char *tmp, *read = g_malloc(data->length + 1); |
| 7431 | 1603 | fseek(file, data->offset, SEEK_SET); |
| 1604 | fread(read, data->length, 1, file); | |
|
8370
ce5393bfcf57
[gaim-migrate @ 9097]
Mark Doliner <markdoliner@pidgin.im>
parents:
8111
diff
changeset
|
1605 | fclose(file); |
| 7431 | 1606 | read[data->length] = '\0'; |
| 7436 | 1607 | *flags = 0; |
| 1608 | if(strstr(read, "<BR>")) | |
| 1609 | *flags |= GAIM_LOG_READ_NO_NEWLINE; | |
|
10906
1825ffb6b495
[gaim-migrate @ 12636]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10822
diff
changeset
|
1610 | else { |
|
1825ffb6b495
[gaim-migrate @ 12636]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10822
diff
changeset
|
1611 | tmp = g_markup_escape_text(read, -1); |
|
1825ffb6b495
[gaim-migrate @ 12636]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10822
diff
changeset
|
1612 | g_free(read); |
|
13358
9504caa8cb7f
[gaim-migrate @ 15730]
Richard Laager <rlaager@pidgin.im>
parents:
13334
diff
changeset
|
1613 | read = gaim_markup_linkify(tmp); |
|
9504caa8cb7f
[gaim-migrate @ 15730]
Richard Laager <rlaager@pidgin.im>
parents:
13334
diff
changeset
|
1614 | g_free(tmp); |
|
10906
1825ffb6b495
[gaim-migrate @ 12636]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10822
diff
changeset
|
1615 | } |
| 7431 | 1616 | return read; |
| 1617 | } | |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4227
diff
changeset
|
1618 | |
| 7616 | 1619 | static int old_logger_size (GaimLog *log) |
| 7556 | 1620 | { |
| 1621 | struct old_logger_data *data = log->logger_data; | |
| 7616 | 1622 | return data ? data->length : 0; |
| 1623 | } | |
| 1624 | ||
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
1625 | static void old_logger_get_log_sets(GaimLogSetCallback cb, GHashTable *sets) |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1626 | { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1627 | char *log_path = g_build_filename(gaim_user_dir(), "logs", NULL); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1628 | GDir *log_dir = g_dir_open(log_path, 0, NULL); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1629 | gchar *name; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1630 | GaimBlistNode *gnode, *cnode, *bnode; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1631 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1632 | g_free(log_path); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1633 | if (log_dir == NULL) |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
1634 | return; |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1635 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1636 | /* Don't worry about the cast, name will be filled with a dynamically allocated data shortly. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1637 | while ((name = (gchar *)g_dir_read_name(log_dir)) != NULL) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1638 | size_t len; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1639 | gchar *ext; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1640 | GaimLogSet *set; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1641 | gboolean found = FALSE; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1642 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1643 | /* Unescape the filename. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1644 | name = g_strdup(gaim_unescape_filename(name)); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1645 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1646 | /* Get the (possibly new) length of name. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1647 | len = strlen(name); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1648 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1649 | if (len < 5) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1650 | g_free(name); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1651 | continue; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1652 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1653 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1654 | /* Make sure we're dealing with a log file. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1655 | ext = &name[len - 4]; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1656 | if (strcmp(ext, ".log")) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1657 | g_free(name); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1658 | continue; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1659 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1660 | |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1661 | /* IMPORTANT: Always set all members of GaimLogSet */ |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1662 | set = g_slice_new(GaimLogSet); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1663 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1664 | /* Chat for .chat at the end of the name to determine the type. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1665 | *ext = '\0'; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1666 | set->type = GAIM_LOG_IM; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1667 | if (len > 9) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1668 | char *tmp = &name[len - 9]; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1669 | if (!strcmp(tmp, ".chat")) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1670 | set->type = GAIM_LOG_CHAT; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1671 | *tmp = '\0'; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1672 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1673 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1674 | |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
1675 | set->name = set->normalized_name = name; |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1676 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1677 | /* Search the buddy list to find the account and to determine if this is a buddy. */ |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1678 | for (gnode = gaim_get_blist()->root; !found && gnode != NULL; gnode = gnode->next) |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1679 | { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1680 | if (!GAIM_BLIST_NODE_IS_GROUP(gnode)) |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1681 | continue; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1682 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1683 | for (cnode = gnode->child; !found && cnode != NULL; cnode = cnode->next) |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1684 | { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1685 | if (!GAIM_BLIST_NODE_IS_CONTACT(cnode)) |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1686 | continue; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1687 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1688 | for (bnode = cnode->child; !found && bnode != NULL; bnode = bnode->next) |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1689 | { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1690 | GaimBuddy *buddy = (GaimBuddy *)bnode; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1691 | |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1692 | if (!strcmp(buddy->name, name)) { |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1693 | set->account = buddy->account; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1694 | set->buddy = TRUE; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1695 | found = TRUE; |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1696 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1697 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1698 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1699 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1700 | |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1701 | if (!found) |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1702 | { |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1703 | set->account = NULL; |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1704 | set->buddy = FALSE; |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1705 | } |
|
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1706 | |
|
11177
534ca3ae0bfc
[gaim-migrate @ 13285]
Richard Laager <rlaager@pidgin.im>
parents:
11094
diff
changeset
|
1707 | cb(sets, set); |
|
11025
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1708 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1709 | g_dir_close(log_dir); |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1710 | } |
|
41b6449f7dff
[gaim-migrate @ 12899]
Richard Laager <rlaager@pidgin.im>
parents:
10906
diff
changeset
|
1711 | |
| 7616 | 1712 | static void old_logger_finalize(GaimLog *log) |
| 1713 | { | |
| 1714 | struct old_logger_data *data = log->logger_data; | |
| 7764 | 1715 | gaim_stringref_unref(data->pathref); |
|
13624
c6577def4e2a
[gaim-migrate @ 16009]
Richard Laager <rlaager@pidgin.im>
parents:
13584
diff
changeset
|
1716 | g_slice_free(struct old_logger_data, data); |
| 7556 | 1717 | } |