Mercurial > pidgin.yaz
comparison finch/gntlog.c @ 23290:5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
logs.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Thu, 05 Jun 2008 10:23:58 +0000 |
parents | adde385c7904 |
children | 53c27ca1bb71 3da0957e7821 |
comparison
equal
deleted
inserted
replaced
23289:173c612752ea | 23290:5f9793c8510a |
---|---|
59 const struct log_viewer_hash_t *viewer = data; | 59 const struct log_viewer_hash_t *viewer = data; |
60 | 60 |
61 if (viewer->contact != NULL) | 61 if (viewer->contact != NULL) |
62 return g_direct_hash(viewer->contact); | 62 return g_direct_hash(viewer->contact); |
63 | 63 |
64 return g_str_hash(viewer->screenname) + | 64 if (viewer->account) { |
65 g_str_hash(purple_account_get_username(viewer->account)); | 65 return g_str_hash(viewer->screenname) + |
66 g_str_hash(purple_account_get_username(viewer->account)); | |
67 } | |
68 | |
69 return (guint)viewer; | |
66 } | 70 } |
67 | 71 |
68 static gboolean log_viewer_equal(gconstpointer y, gconstpointer z) | 72 static gboolean log_viewer_equal(gconstpointer y, gconstpointer z) |
69 { | 73 { |
70 const struct log_viewer_hash_t *a, *b; | 74 const struct log_viewer_hash_t *a, *b; |
82 } else { | 86 } else { |
83 if (b->contact != NULL) | 87 if (b->contact != NULL) |
84 return FALSE; | 88 return FALSE; |
85 } | 89 } |
86 | 90 |
87 normal = g_strdup(purple_normalize(a->account, a->screenname)); | 91 if (a->screenname && b->screenname) { |
88 ret = (a->account == b->account) && | 92 normal = g_strdup(purple_normalize(a->account, a->screenname)); |
89 !strcmp(normal, purple_normalize(b->account, b->screenname)); | 93 ret = (a->account == b->account) && |
90 g_free(normal); | 94 !strcmp(normal, purple_normalize(b->account, b->screenname)); |
95 g_free(normal); | |
96 } else { | |
97 ret = (a == b); | |
98 } | |
91 | 99 |
92 return ret; | 100 return ret; |
93 } | 101 } |
94 | 102 |
95 static const char *log_get_date(PurpleLog *log) | 103 static const char *log_get_date(PurpleLog *log) |
346 gnt_widget_show(lv->window); | 354 gnt_widget_show(lv->window); |
347 | 355 |
348 return lv; | 356 return lv; |
349 } | 357 } |
350 | 358 |
351 void finch_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account) { | 359 static void |
360 our_logging_blows(PurpleLogSet *set, PurpleLogSet *setagain, GList **list) | |
361 { | |
362 /* The iteration happens on the first list. So we use the shorter list in front */ | |
363 if (set->type != PURPLE_LOG_IM) | |
364 return; | |
365 *list = g_list_concat(purple_log_get_logs(PURPLE_LOG_IM, set->name, set->account), *list); | |
366 } | |
367 | |
368 void finch_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account) | |
369 { | |
352 struct log_viewer_hash_t *ht; | 370 struct log_viewer_hash_t *ht; |
353 FinchLogViewer *lv = NULL; | 371 FinchLogViewer *lv = NULL; |
354 const char *name = screenname; | 372 const char *name = screenname; |
355 char *title; | 373 char *title; |
356 | 374 GList *logs = NULL; |
357 g_return_if_fail(account != NULL); | 375 int size = 0; |
358 g_return_if_fail(screenname != NULL); | 376 |
377 if (type != PURPLE_LOG_IM) { | |
378 g_return_if_fail(account != NULL); | |
379 g_return_if_fail(screenname != NULL); | |
380 } | |
359 | 381 |
360 ht = g_new0(struct log_viewer_hash_t, 1); | 382 ht = g_new0(struct log_viewer_hash_t, 1); |
361 | 383 |
362 ht->type = type; | 384 ht->type = type; |
363 ht->screenname = g_strdup(screenname); | 385 ht->screenname = g_strdup(screenname); |
381 | 403 |
382 title = g_strdup_printf(_("Conversations in %s"), name); | 404 title = g_strdup_printf(_("Conversations in %s"), name); |
383 } else { | 405 } else { |
384 PurpleBuddy *buddy; | 406 PurpleBuddy *buddy; |
385 | 407 |
386 buddy = purple_find_buddy(account, screenname); | 408 if (screenname) { |
387 if (buddy != NULL) | 409 buddy = purple_find_buddy(account, screenname); |
388 name = purple_buddy_get_contact_alias(buddy); | 410 if (buddy != NULL) |
389 | 411 name = purple_buddy_get_contact_alias(buddy); |
390 title = g_strdup_printf(_("Conversations with %s"), name); | 412 title = g_strdup_printf(_("Conversations with %s"), name); |
391 } | 413 } else { |
392 | 414 title = g_strdup(_("All Conversations")); |
393 display_log_viewer(ht, purple_log_get_logs(type, screenname, account), | 415 } |
394 title, purple_log_get_total_size(type, screenname, account)); | 416 } |
417 | |
418 if (screenname) { | |
419 logs = purple_log_get_logs(type, screenname, account); | |
420 size = purple_log_get_total_size(type, screenname, account); | |
421 } else { | |
422 /* This will happen only for IMs */ | |
423 GHashTable *table = purple_log_get_log_sets(); | |
424 g_hash_table_foreach(table, (GHFunc)our_logging_blows, &logs); | |
425 g_hash_table_destroy(table); | |
426 logs = g_list_sort(logs, purple_log_compare); | |
427 size = 0; | |
428 } | |
429 | |
430 display_log_viewer(ht, logs, title, size); | |
395 | 431 |
396 g_free(title); | 432 g_free(title); |
397 } | 433 } |
398 | 434 |
399 void finch_log_show_contact(PurpleContact *contact) { | 435 void finch_log_show_contact(PurpleContact *contact) |
436 { | |
400 struct log_viewer_hash_t *ht; | 437 struct log_viewer_hash_t *ht; |
401 PurpleBlistNode *child; | 438 PurpleBlistNode *child; |
402 FinchLogViewer *lv = NULL; | 439 FinchLogViewer *lv = NULL; |
403 GList *logs = NULL; | 440 GList *logs = NULL; |
404 const char *name = NULL; | 441 const char *name = NULL; |