comparison plugins/log_reader.c @ 11503:cd0c8830d881

[gaim-migrate @ 13748] Making gaim_log_logger a varargs function so it can be expanded as GaimLogLogger expands, without breaking compatibility. I'm anticipating adding a find() function some day for a database logger. This commit also makes use of gaim_log_logger_new() everywhere it should be used, removing the old static structures. committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Sun, 11 Sep 2005 05:14:52 +0000
parents b8f6f1fd30c0
children 994f1c7bee8b
comparison
equal deleted inserted replaced
11502:b858f992b566 11503:cd0c8830d881
24 #ifdef _WIN32 24 #ifdef _WIN32
25 #include "win32dep.h" 25 #include "win32dep.h"
26 #endif 26 #endif
27 27
28 /* Where is the Windows partition mounted? */ 28 /* Where is the Windows partition mounted? */
29 #define LOG_READER_WINDOWS_MOUNT_POINT "/mnt/windows" 29 #ifndef GAIM_LOG_READER_WINDOWS_MOUNT_POINT
30 #define GAIM_LOG_READER_WINDOWS_MOUNT_POINT "/mnt/windows"
31 #endif
30 32
31 enum name_guesses { 33 enum name_guesses {
32 NAME_GUESS_UNKNOWN, 34 NAME_GUESS_UNKNOWN,
33 NAME_GUESS_ME, 35 NAME_GUESS_ME,
34 NAME_GUESS_THEM 36 NAME_GUESS_THEM
41 43
42 /* The adium logger doesn't write logs, only reads them. This is to include 44 /* The adium logger doesn't write logs, only reads them. This is to include
43 * Adium logs in the log viewer transparently. 45 * Adium logs in the log viewer transparently.
44 */ 46 */
45 47
46 static GaimLogLogger adium_logger; 48 static GaimLogLogger *adium_logger;
47 49
48 enum adium_log_type { 50 enum adium_log_type {
49 ADIUM_HTML, 51 ADIUM_HTML,
50 ADIUM_TEXT, 52 ADIUM_TEXT,
51 }; 53 };
153 155
154 tm.tm_year -= 1900; 156 tm.tm_year -= 1900;
155 tm.tm_mon -= 1; 157 tm.tm_mon -= 1;
156 158
157 log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, mktime(&tm)); 159 log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, mktime(&tm));
158 log->logger = &adium_logger; 160 log->logger = adium_logger;
159 log->logger_data = data; 161 log->logger_data = data;
160 162
161 list = g_list_append(list, log); 163 list = g_list_append(list, log);
162 } 164 }
163 } else if (g_str_has_suffix(file, ".adiumLog")) { 165 } else if (g_str_has_suffix(file, ".adiumLog")) {
213 data = g_new0(struct adium_logger_data, 1); 215 data = g_new0(struct adium_logger_data, 1);
214 data->path = filename; 216 data->path = filename;
215 data->type = ADIUM_TEXT; 217 data->type = ADIUM_TEXT;
216 218
217 log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, mktime(&tm)); 219 log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, mktime(&tm));
218 log->logger = &adium_logger; 220 log->logger = adium_logger;
219 log->logger_data = data; 221 log->logger_data = data;
220 222
221 list = g_list_append(list, log); 223 list = g_list_append(list, log);
222 } 224 }
223 } 225 }
316 data = log->logger_data; 318 data = log->logger_data;
317 319
318 g_free(data->path); 320 g_free(data->path);
319 } 321 }
320 322
321 static GaimLogLogger adium_logger = {
322 N_("Adium Log Reader"), "adium",
323 NULL, NULL,
324 adium_logger_finalize,
325 adium_logger_list,
326 adium_logger_read,
327 adium_logger_size,
328 NULL,
329 NULL,
330 NULL
331 };
332
333 323
334 /***************************************************************************** 324 /*****************************************************************************
335 * Fire Logger * 325 * Fire Logger *
336 *****************************************************************************/ 326 *****************************************************************************/
337 327
338 /* The fire logger doesn't write logs, only reads them. This is to include 328 /* The fire logger doesn't write logs, only reads them. This is to include
339 * Fire logs in the log viewer transparently. 329 * Fire logs in the log viewer transparently.
340 */ 330 */
341 331
342 static GaimLogLogger fire_logger; 332 static GaimLogLogger *fire_logger;
343 333
344 struct fire_logger_data { 334 struct fire_logger_data {
345 }; 335 };
346 336
347 static GList *fire_logger_list(GaimLogType type, const char *sn, GaimAccount *account) 337 static GList *fire_logger_list(GaimLogType type, const char *sn, GaimAccount *account)
348 { 338 {
349 // TODO: Do something here. 339 /* TODO: Do something here. */
350 return NULL; 340 return NULL;
351 } 341 }
352 342
353 static char * fire_logger_read (GaimLog *log, GaimLogReadFlags *flags) 343 static char * fire_logger_read (GaimLog *log, GaimLogReadFlags *flags)
354 { 344 {
356 346
357 g_return_val_if_fail(log != NULL, g_strdup("")); 347 g_return_val_if_fail(log != NULL, g_strdup(""));
358 348
359 data = log->logger_data; 349 data = log->logger_data;
360 350
361 // TODO: Do something here. 351 /* TODO: Do something here. */
362 return g_strdup(""); 352 return g_strdup("");
363 } 353 }
364 354
365 static int fire_logger_size (GaimLog *log) 355 static int fire_logger_size (GaimLog *log)
366 { 356 {
367 g_return_val_if_fail(log != NULL, 0); 357 g_return_val_if_fail(log != NULL, 0);
368 358
369 if (gaim_prefs_get_bool("/plugins/core/log_reader/fast_sizes")) 359 if (gaim_prefs_get_bool("/plugins/core/log_reader/fast_sizes"))
370 return 0; 360 return 0;
371 361
372 // TODO: Do something here. 362 /* TODO: Do something here. */
373 return 0; 363 return 0;
374 } 364 }
375 365
376 static void fire_logger_finalize(GaimLog *log) 366 static void fire_logger_finalize(GaimLog *log)
377 { 367 {
378 g_return_if_fail(log != NULL); 368 g_return_if_fail(log != NULL);
379 369
380 // TODO: Do something here. 370 /* TODO: Do something here. */
381 } 371 }
382
383 static GaimLogLogger fire_logger = {
384 N_("Fire Log Reader"), "fire",
385 NULL, NULL,
386 fire_logger_finalize,
387 fire_logger_list,
388 fire_logger_read,
389 fire_logger_size,
390 NULL,
391 NULL,
392 NULL
393 };
394 372
395 373
396 /***************************************************************************** 374 /*****************************************************************************
397 * Messenger Plus! Logger * 375 * Messenger Plus! Logger *
398 *****************************************************************************/ 376 *****************************************************************************/
399 377
400 /* The messenger_plus logger doesn't write logs, only reads them. This is to include 378 /* The messenger_plus logger doesn't write logs, only reads them. This is to include
401 * Messenger Plus! logs in the log viewer transparently. 379 * Messenger Plus! logs in the log viewer transparently.
402 */ 380 */
403 381
404 static GaimLogLogger messenger_plus_logger; 382 static GaimLogLogger *messenger_plus_logger;
405 383
406 struct messenger_plus_logger_data { 384 struct messenger_plus_logger_data {
407 }; 385 };
408 386
409 static GList *messenger_plus_logger_list(GaimLogType type, const char *sn, GaimAccount *account) 387 static GList *messenger_plus_logger_list(GaimLogType type, const char *sn, GaimAccount *account)
410 { 388 {
411 // TODO: Do something here. 389 /* TODO: Do something here. */
412 return NULL; 390 return NULL;
413 } 391 }
414 392
415 static char * messenger_plus_logger_read (GaimLog *log, GaimLogReadFlags *flags) 393 static char * messenger_plus_logger_read (GaimLog *log, GaimLogReadFlags *flags)
416 { 394 {
418 396
419 g_return_val_if_fail(log != NULL, g_strdup("")); 397 g_return_val_if_fail(log != NULL, g_strdup(""));
420 398
421 data = log->logger_data; 399 data = log->logger_data;
422 400
423 // TODO: Do something here. 401 /* TODO: Do something here. */
424 return g_strdup(""); 402 return g_strdup("");
425 } 403 }
426 404
427 static int messenger_plus_logger_size (GaimLog *log) 405 static int messenger_plus_logger_size (GaimLog *log)
428 { 406 {
429 g_return_val_if_fail(log != NULL, 0); 407 g_return_val_if_fail(log != NULL, 0);
430 408
431 if (gaim_prefs_get_bool("/plugins/core/log_reader/fast_sizes")) 409 if (gaim_prefs_get_bool("/plugins/core/log_reader/fast_sizes"))
432 return 0; 410 return 0;
433 411
434 // TODO: Do something here. 412 /* TODO: Do something here. */
435 return 0; 413 return 0;
436 } 414 }
437 415
438 static void messenger_plus_logger_finalize(GaimLog *log) 416 static void messenger_plus_logger_finalize(GaimLog *log)
439 { 417 {
440 g_return_if_fail(log != NULL); 418 g_return_if_fail(log != NULL);
441 419
442 // TODO: Do something here. 420 /* TODO: Do something here. */
443 } 421 }
444
445 static GaimLogLogger messenger_plus_logger = {
446 N_("Messenger Plus Log Reader"), "messenger_plus",
447 NULL, NULL,
448 messenger_plus_logger_finalize,
449 messenger_plus_logger_list,
450 messenger_plus_logger_read,
451 messenger_plus_logger_size,
452 NULL,
453 NULL,
454 NULL
455 };
456 422
457 423
458 /***************************************************************************** 424 /*****************************************************************************
459 * MSN Messenger Logger * 425 * MSN Messenger Logger *
460 *****************************************************************************/ 426 *****************************************************************************/
461 427
462 /* The msn logger doesn't write logs, only reads them. This is to include 428 /* The msn logger doesn't write logs, only reads them. This is to include
463 * MSN Messenger message histories in the log viewer transparently. 429 * MSN Messenger message histories in the log viewer transparently.
464 */ 430 */
465 431
466 static GaimLogLogger msn_logger; 432 static GaimLogLogger *msn_logger;
467 433
468 struct msn_logger_data { 434 struct msn_logger_data {
469 xmlnode *root; 435 xmlnode *root;
470 xmlnode *message; 436 xmlnode *message;
471 const char *session_id; 437 const char *session_id;
763 data->session_id = session_id; 729 data->session_id = session_id;
764 data->text = NULL; 730 data->text = NULL;
765 data->last_log = FALSE; 731 data->last_log = FALSE;
766 732
767 log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, msn_logger_parse_timestamp(message)); 733 log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, msn_logger_parse_timestamp(message));
768 log->logger = &msn_logger; 734 log->logger = msn_logger;
769 log->logger_data = data; 735 log->logger_data = data;
770 736
771 list = g_list_append(list, log); 737 list = g_list_append(list, log);
772 } 738 }
773 old_session_id = session_id; 739 old_session_id = session_id;
1061 1027
1062 if (data->text) 1028 if (data->text)
1063 g_string_free(data->text, FALSE); 1029 g_string_free(data->text, FALSE);
1064 } 1030 }
1065 1031
1066 static GaimLogLogger msn_logger = {
1067 N_("MSN Log Reader"), "msn",
1068 NULL, NULL,
1069 msn_logger_finalize,
1070 msn_logger_list,
1071 msn_logger_read,
1072 msn_logger_size,
1073 NULL,
1074 NULL,
1075 NULL
1076 };
1077
1078 1032
1079 /***************************************************************************** 1033 /*****************************************************************************
1080 * Trillian Logger * 1034 * Trillian Logger *
1081 *****************************************************************************/ 1035 *****************************************************************************/
1082 1036
1083 /* The trillian logger doesn't write logs, only reads them. This is to include 1037 /* The trillian logger doesn't write logs, only reads them. This is to include
1084 * Trillian logs in the log viewer transparently. 1038 * Trillian logs in the log viewer transparently.
1085 */ 1039 */
1086 1040
1087 static GaimLogLogger trillian_logger; 1041 static GaimLogLogger *trillian_logger;
1088 static void trillian_logger_finalize(GaimLog *log); 1042 static void trillian_logger_finalize(GaimLog *log);
1089 1043
1090 struct trillian_logger_data { 1044 struct trillian_logger_data {
1091 char *path; /* FIXME: Change this to use GaimStringref like log.c:old_logger_list */ 1045 char *path; /* FIXME: Change this to use GaimStringref like log.c:old_logger_list */
1092 int offset; 1046 int offset;
1289 data->their_nickname = 1243 data->their_nickname =
1290 g_strdup(their_nickname); 1244 g_strdup(their_nickname);
1291 1245
1292 log = gaim_log_new(GAIM_LOG_IM, 1246 log = gaim_log_new(GAIM_LOG_IM,
1293 sn, account, NULL, mktime(&tm)); 1247 sn, account, NULL, mktime(&tm));
1294 log->logger = &trillian_logger; 1248 log->logger = trillian_logger;
1295 log->logger_data = data; 1249 log->logger_data = data;
1296 1250
1297 list = g_list_append(list, log); 1251 list = g_list_append(list, log);
1298 } 1252 }
1299 } 1253 }
1430 while (*timestamp && *timestamp != ']') 1384 while (*timestamp && *timestamp != ']')
1431 timestamp++; 1385 timestamp++;
1432 if (*timestamp == ']') { 1386 if (*timestamp == ']') {
1433 *timestamp = '\0'; 1387 *timestamp = '\0';
1434 line++; 1388 line++;
1435 // TODO: Parse the timestamp and convert it to Gaim's format. 1389 /* TODO: Parse the timestamp and convert it to Gaim's format. */
1436 g_string_append_printf(formatted, 1390 g_string_append_printf(formatted,
1437 "<font size=\"2\">(%s)</font> ", line); 1391 "<font size=\"2\">(%s)</font> ", line);
1438 line = timestamp; 1392 line = timestamp;
1439 if (line[1] && line[2]) 1393 if (line[1] && line[2])
1440 line += 2; 1394 line += 2;
1600 g_free(data->path); 1554 g_free(data->path);
1601 g_free(data->their_nickname); 1555 g_free(data->their_nickname);
1602 1556
1603 } 1557 }
1604 1558
1605 static GaimLogLogger trillian_logger = {
1606 N_("Trillian Log Reader"), "trillian",
1607 NULL, NULL,
1608 trillian_logger_finalize,
1609 trillian_logger_list,
1610 trillian_logger_read,
1611 trillian_logger_size,
1612 NULL,
1613 NULL,
1614 NULL
1615 };
1616
1617 1559
1618 /***************************************************************************** 1560 /*****************************************************************************
1619 * Plugin Code * 1561 * Plugin Code *
1620 *****************************************************************************/ 1562 *****************************************************************************/
1621 1563
1684 #endif 1626 #endif
1685 path = g_build_filename( 1627 path = g_build_filename(
1686 #ifdef _WIN32 1628 #ifdef _WIN32
1687 folder, 1629 folder,
1688 #else 1630 #else
1689 LOG_READER_WINDOWS_MOUNT_POINT, "Documents and Settings", 1631 GAIM_LOG_READER_WINDOWS_MOUNT_POINT, "Documents and Settings",
1690 g_get_user_name(), "My Documents", 1632 g_get_user_name(), "My Documents",
1691 #endif 1633 #endif
1692 "My Chat Logs", NULL); 1634 "My Chat Logs", NULL);
1693 #ifdef _WIN32 1635 #ifdef _WIN32
1694 g_free(folder); 1636 g_free(folder);
1710 #endif 1652 #endif
1711 path = g_build_filename( 1653 path = g_build_filename(
1712 #ifdef _WIN32 1654 #ifdef _WIN32
1713 folder, 1655 folder,
1714 #else 1656 #else
1715 LOG_READER_WINDOWS_MOUNT_POINT, "Documents and Settings", 1657 GAIM_LOG_READER_WINDOWS_MOUNT_POINT, "Documents and Settings",
1716 g_get_user_name(), "My Documents", 1658 g_get_user_name(), "My Documents",
1717 #endif 1659 #endif
1718 "My Received Files", NULL); 1660 "My Received Files", NULL);
1719 #ifdef _WIN32 1661 #ifdef _WIN32
1720 g_free(folder); 1662 g_free(folder);
1863 #endif 1805 #endif
1864 path = g_build_filename( 1806 path = g_build_filename(
1865 #ifdef _WIN32 1807 #ifdef _WIN32
1866 folder, 1808 folder,
1867 #else 1809 #else
1868 LOG_READER_WINDOWS_MOUNT_POINT, "Program Files", 1810 GAIM_LOG_READER_WINDOWS_MOUNT_POINT, "Program Files",
1869 #endif 1811 #endif
1870 "Trillian", "users", "default", "logs", NULL); 1812 "Trillian", "users", "default", "logs", NULL);
1871 #ifdef _WIN32 1813 #ifdef _WIN32
1872 g_free(folder); 1814 g_free(folder);
1873 } else /* !folder */ 1815 } else /* !folder */
1885 static gboolean 1827 static gboolean
1886 plugin_load(GaimPlugin *plugin) 1828 plugin_load(GaimPlugin *plugin)
1887 { 1829 {
1888 g_return_val_if_fail(plugin != NULL, FALSE); 1830 g_return_val_if_fail(plugin != NULL, FALSE);
1889 1831
1890 gaim_log_logger_add(&adium_logger); 1832 adium_logger = gaim_log_logger_new("adium", "Adium", 6,
1891 gaim_log_logger_add(&fire_logger); 1833 NULL,
1892 gaim_log_logger_add(&messenger_plus_logger); 1834 NULL,
1893 gaim_log_logger_add(&msn_logger); 1835 adium_logger_finalize,
1894 gaim_log_logger_add(&trillian_logger); 1836 adium_logger_list,
1837 adium_logger_read,
1838 adium_logger_size);
1839 gaim_log_logger_add(adium_logger);
1840
1841 fire_logger = gaim_log_logger_new("fire", "Fire", 6,
1842 NULL,
1843 NULL,
1844 fire_logger_finalize,
1845 fire_logger_list,
1846 fire_logger_read,
1847 fire_logger_size);
1848 gaim_log_logger_add(fire_logger);
1849
1850 messenger_plus_logger = gaim_log_logger_new("messenger_plus", "Messenger Plus!", 6,
1851 NULL,
1852 NULL,
1853 messenger_plus_logger_finalize,
1854 messenger_plus_logger_list,
1855 messenger_plus_logger_read,
1856 messenger_plus_logger_size);
1857 gaim_log_logger_add(messenger_plus_logger);
1858
1859 msn_logger = gaim_log_logger_new("msn", "MSN Messenger", 6,
1860 NULL,
1861 NULL,
1862 msn_logger_finalize,
1863 msn_logger_list,
1864 msn_logger_read,
1865 msn_logger_size);
1866 gaim_log_logger_add(msn_logger);
1867
1868 trillian_logger = gaim_log_logger_new("trillian", "Trillian", 6,
1869 NULL,
1870 NULL,
1871 trillian_logger_finalize,
1872 trillian_logger_list,
1873 trillian_logger_read,
1874 trillian_logger_size);
1875 gaim_log_logger_add(trillian_logger);
1895 1876
1896 return TRUE; 1877 return TRUE;
1897 } 1878 }
1898 1879
1899 static gboolean 1880 static gboolean
1900 plugin_unload(GaimPlugin *plugin) 1881 plugin_unload(GaimPlugin *plugin)
1901 { 1882 {
1902 g_return_val_if_fail(plugin != NULL, FALSE); 1883 g_return_val_if_fail(plugin != NULL, FALSE);
1903 1884
1904 gaim_log_logger_remove(&adium_logger); 1885 gaim_log_logger_remove(adium_logger);
1905 gaim_log_logger_remove(&fire_logger); 1886 gaim_log_logger_remove(fire_logger);
1906 gaim_log_logger_remove(&messenger_plus_logger); 1887 gaim_log_logger_remove(messenger_plus_logger);
1907 gaim_log_logger_remove(&msn_logger); 1888 gaim_log_logger_remove(msn_logger);
1908 gaim_log_logger_remove(&trillian_logger); 1889 gaim_log_logger_remove(trillian_logger);
1909 1890
1910 return TRUE; 1891 return TRUE;
1911 } 1892 }
1912 1893
1913 static GaimPluginPrefFrame * 1894 static GaimPluginPrefFrame *
1989 N_("When viewing logs, this plugin will include " 1970 N_("When viewing logs, this plugin will include "
1990 "logs from other IM clients. Currently, this " 1971 "logs from other IM clients. Currently, this "
1991 "includes Adium, Fire, Messenger Plus!, " 1972 "includes Adium, Fire, Messenger Plus!, "
1992 "MSN Messenger, and Trillian."), 1973 "MSN Messenger, and Trillian."),
1993 1974
1994 "Richard Laager <rlaager@bigfoot.com>", /**< author */ 1975 "Richard Laager <rlaager@users.sf.net>", /**< author */
1995 GAIM_WEBSITE, /**< homepage */ 1976 GAIM_WEBSITE, /**< homepage */
1996 plugin_load, /**< load */ 1977 plugin_load, /**< load */
1997 plugin_unload, /**< unload */ 1978 plugin_unload, /**< unload */
1998 NULL, /**< destroy */ 1979 NULL, /**< destroy */
1999 NULL, /**< ui_info */ 1980 NULL, /**< ui_info */