Mercurial > pidgin
changeset 5321:21b303d09752
[gaim-migrate @ 5693]
faceprint's work removes the need for this thing. :)
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 07 May 2003 01:41:07 +0000 |
parents | 9445d59d9db8 |
children | a4d017bee1de |
files | plugins/chatlist.c |
diffstat | 1 files changed, 0 insertions(+), 417 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/chatlist.c Wed May 07 01:40:51 2003 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,417 +0,0 @@ -#include "config.h" - -#ifndef GAIM_PLUGINS -#define GAIM_PLUGINS -#endif - -#ifdef GTK_DISABLE_DEPRECATED -#undef GTK_DISABLE_DEPRECATED -#endif - -#define GTK_ENABLE_BROKEN - -#include "proxy.h" -#include "gaim.h" - -#include <stdlib.h> -#include <string.h> -#ifdef _WIN32 -#include "win32dep.h" -#endif - -#define AOL_SRCHSTR "aim:GoChat?RoomName=" - -struct chat_page { - GtkWidget *list1; - GtkWidget *list2; -}; - -struct chat_room { - char name[80]; - int exchange; -}; - -static GtkWidget *item = NULL; /* this is the parent tree */ -static GList *chat_rooms = NULL; - -static struct chat_page *cp = NULL; - -static void des_item() -{ - if (item) - gtk_widget_destroy(item); - item = NULL; -} - -static void handle_click_chat(GtkWidget *widget, GdkEventButton * event, struct chat_room *cr) -{ - if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { - GList *m = g_list_append(NULL, cr->name); - int *x = g_new0(int, 1); - *x = cr->exchange; - m = g_list_append(m, x); - serv_join_chat(connections->data, m); - g_free(x); - g_list_free(m); - } -} - -static void setup_buddy_chats() -{ - GList *crs = chat_rooms; - GtkWidget *tree; - - if (!blist) - return; - - if (item) - gtk_tree_remove_item(GTK_TREE(buddies), item); - item = NULL; - - if (!chat_rooms) - return; - - item = gtk_tree_item_new_with_label(_("Buddy Chat")); - g_signal_connect(G_OBJECT(item), "destroy", G_CALLBACK(des_item), NULL); - gtk_tree_append(GTK_TREE(buddies), item); - gtk_tree_item_expand(GTK_TREE_ITEM(item)); - gtk_widget_show(item); - - tree = gtk_tree_new(); - gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), tree); - gtk_widget_show(tree); - - while (crs) { - struct chat_room *cr = (struct chat_room *)crs->data; - GtkWidget *titem = gtk_tree_item_new_with_label(cr->name); - gtk_object_set_user_data(G_OBJECT(titem), cr); - gtk_tree_append(GTK_TREE(tree), titem); - gtk_widget_show(titem); - g_signal_connect(G_OBJECT(titem), "button_press_event", - G_CALLBACK(handle_click_chat), cr); - crs = crs->next; - } - - gtk_tree_item_expand(GTK_TREE_ITEM(item)); -} - -static void save_chat_prefs() -{ - FILE *f; - char path[1024]; - char *x = gaim_user_dir(); - GList *crs = chat_rooms; - - g_snprintf(path, sizeof(path), "%s/%s", x, "chats"); - f = fopen(path, "w"); - if (!f) - return; - while (crs) { - struct chat_room *cr = crs->data; - crs = crs->next; - fprintf(f, "%s\n%d\n", cr->name, cr->exchange); - } - fclose(f); -} - -static void restore_chat_prefs() -{ - FILE *f; - char path[1024]; - char *x = gaim_user_dir(); - char buf[1024]; - - g_snprintf(path, sizeof(path), "%s/%s", x, "chats"); - f = fopen(path, "r"); - if (!f) - return; - while (fgets(buf, 1024, f)) { - struct chat_room *cr = g_new0(struct chat_room, 1); - g_snprintf(cr->name, sizeof(cr->name), "%s", g_strchomp(buf)); - if (!fgets(buf, 1024, f)) { - g_free(cr); - break; - } - cr->exchange = atoi(buf); - chat_rooms = g_list_append(chat_rooms, cr); - } - fclose(f); - setup_buddy_chats(); -} - -static void ref_list_callback(gpointer data, char *text, unsigned long len) -{ - char *c; - GtkWidget *item; - GList *items = GTK_LIST(cp->list1)->children; - struct chat_room *cr; - c = text; - - if (!text) - return; - - while (items) { - g_free(gtk_object_get_user_data(G_OBJECT(items->data))); - items = items->next; - } - - items = NULL; - - gtk_list_clear_items(GTK_LIST(cp->list1), 0, -1); - - item = gtk_list_item_new_with_label(_("Gaim Chat")); - cr = g_new0(struct chat_room, 1); - strcpy(cr->name, _("Gaim Chat")); - cr->exchange = 4; - gtk_object_set_user_data(G_OBJECT(item), cr); - gtk_widget_show(item); - - items = g_list_append(NULL, item); - - while (c) { - if (c - text > len - 30) - break; /* assume no chat rooms 30 from end, padding */ - if (!g_strncasecmp(AOL_SRCHSTR, c, strlen(AOL_SRCHSTR))) { - char *t; - int len = 0; - int exchange = 5; - char *name = NULL; - - c += strlen(AOL_SRCHSTR); - t = c; - while (t) { - len++; - name = g_realloc(name, len); - if (*t == '+') - name[len - 1] = ' '; - else if (*t == '&') { - name[len - 1] = 0; - sscanf(t, "&Exchange=%d", &exchange); - c = t + strlen("&Exchange=x"); - break; - } else - name[len - 1] = *t; - t++; - } - cr = g_new0(struct chat_room, 1); - strcpy(cr->name, name); - cr->exchange = exchange; - printf("Adding '%s'\n", name); - item = gtk_list_item_new_with_label(name); - gtk_widget_show(item); - items = g_list_append(items, item); - gtk_object_set_user_data(G_OBJECT(item), cr); - g_free(name); - } - c++; - } - gtk_list_append_items(GTK_LIST(cp->list1), items); -} - -static void refresh_list(GtkWidget *w, gpointer *m) -{ - grab_url("http://www.aim.com/community/chats.adp", FALSE, ref_list_callback, NULL); -} - -static void add_chat(GtkWidget *w, gpointer *m) -{ - GList *sel = GTK_LIST(cp->list1)->selection; - struct chat_room *cr, *cr2; - GList *crs = chat_rooms; - GtkWidget *item; - - if (sel) { - cr = (struct chat_room *)gtk_object_get_user_data(G_OBJECT(sel->data)); - } else - return; - - while (crs) { - cr2 = (struct chat_room *)crs->data; - if (!g_strcasecmp(cr->name, cr2->name)) - return; - crs = crs->next; - } - item = gtk_list_item_new_with_label(cr->name); - cr2 = g_new0(struct chat_room, 1); - strcpy(cr2->name, cr->name); - cr2->exchange = cr->exchange; - gtk_object_set_user_data(G_OBJECT(item), cr2); - gtk_widget_show(item); - sel = g_list_append(NULL, item); - gtk_list_append_items(GTK_LIST(cp->list2), sel); - chat_rooms = g_list_append(chat_rooms, cr2); - - setup_buddy_chats(); - save_chat_prefs(); -} - -static void remove_chat(GtkWidget *w, gpointer *m) -{ - GList *sel = GTK_LIST(cp->list2)->selection; - struct chat_room *cr; - GList *crs; - GtkWidget *item; - - if (sel) { - item = (GtkWidget *)sel->data; - cr = (struct chat_room *)gtk_object_get_user_data(G_OBJECT(item)); - } else - return; - - chat_rooms = g_list_remove(chat_rooms, cr); - - - gtk_list_clear_items(GTK_LIST(cp->list2), 0, -1); - - if (g_list_length(chat_rooms) == 0) - chat_rooms = NULL; - - crs = chat_rooms; - - while (crs) { - cr = (struct chat_room *)crs->data; - item = gtk_list_item_new_with_label(cr->name); - gtk_object_set_user_data(G_OBJECT(item), cr); - gtk_widget_show(item); - gtk_list_append_items(GTK_LIST(cp->list2), g_list_append(NULL, item)); - - - crs = crs->next; - } - - setup_buddy_chats(); - save_chat_prefs(); -} - -G_MODULE_EXPORT GtkWidget *gaim_plugin_config_gtk() -{ - GtkWidget *ret, *vbox; - GtkWidget *list1, *list2; - GtkWidget *sw1, *sw2; - GtkWidget *ref_button, *add_button, *rem_button; - GtkWidget *table, *label; - struct chat_room *cr = NULL; - GList *items = NULL; - GList *crs = chat_rooms; - - if (cp) - g_free(cp); - cp = g_new0(struct chat_page, 1); - - - ret = gtk_vbox_new(FALSE, 18); - gtk_container_set_border_width (GTK_CONTAINER (ret), 12); - - vbox = make_frame(ret, _("Chat Rooms")); - - table = gtk_table_new(4, 2, FALSE); - - gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 0); - - list1 = gtk_list_new(); - list2 = gtk_list_new(); - sw1 = gtk_scrolled_window_new(NULL, NULL); - sw2 = gtk_scrolled_window_new(NULL, NULL); - - ref_button = gaim_pixbuf_button_from_stock(_("Refresh"), GTK_STOCK_REFRESH, GAIM_BUTTON_HORIZONTAL); - add_button = gaim_pixbuf_button_from_stock(_("Add"), GTK_STOCK_ADD, GAIM_BUTTON_HORIZONTAL); - rem_button = gaim_pixbuf_button_from_stock(_("Remove"), GTK_STOCK_REMOVE, GAIM_BUTTON_HORIZONTAL); - - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw1), list1); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw2), list2); - - cp->list1 = list1; - cp->list2 = list2; - - g_signal_connect(G_OBJECT(ref_button), "clicked", G_CALLBACK(refresh_list), cp); - g_signal_connect(G_OBJECT(rem_button), "clicked", G_CALLBACK(remove_chat), cp); - g_signal_connect(G_OBJECT(add_button), "clicked", G_CALLBACK(add_chat), cp); - - label = gtk_label_new(_("List of available chats")); - - gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0); - gtk_table_attach(GTK_TABLE(table), ref_button, 0, 1, 1, 2, GTK_SHRINK, GTK_SHRINK, 0, 0); - gtk_table_attach(GTK_TABLE(table), sw1, 0, 1, 2, 3, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 5, 5); - gtk_table_attach(GTK_TABLE(table), add_button, 0, 1, 3, 4, GTK_SHRINK, GTK_SHRINK, 0, 0); - - - label = gtk_label_new(_("List of subscribed chats")); - - gtk_table_attach(GTK_TABLE(table), label, 1, 2, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0); - gtk_table_attach(GTK_TABLE(table), sw2, 1, 2, 2, 3, - GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 5, 5); - gtk_table_attach(GTK_TABLE(table), rem_button, 1, 2, 3, 4, GTK_SHRINK, GTK_SHRINK, 0, 0); - - - item = gtk_list_item_new_with_label(_("Gaim Chat")); - cr = g_new0(struct chat_room, 1); - strcpy(cr->name, _("Gaim Chat")); - cr->exchange = 4; - gtk_object_set_user_data(G_OBJECT(item), cr); - gtk_list_append_items(GTK_LIST(list1), g_list_append(NULL, item)); - - - while (crs) { - cr = (struct chat_room *)crs->data; - item = gtk_list_item_new_with_label(cr->name); - gtk_object_set_user_data(G_OBJECT(item), cr); - items = g_list_append(items, item); - - crs = crs->next; - } - - gtk_list_append_items(GTK_LIST(list2), items); - gtk_widget_show_all(ret); - return ret; -} - -static void handle_signon(struct gaim_connection *gc) -{ - setup_buddy_chats(); -} - -G_MODULE_EXPORT char *gaim_plugin_init(GModule *m) -{ - restore_chat_prefs(); - gaim_signal_connect(m, event_signon, handle_signon, NULL); - return NULL; -} - -G_MODULE_EXPORT void gaim_plugin_remove() -{ - if (item) - gtk_tree_remove_item(GTK_TREE(buddies), item); - item = NULL; - - while (chat_rooms) { - g_free(chat_rooms->data); - chat_rooms = g_list_remove(chat_rooms, chat_rooms->data); - } - - if (cp) - g_free(cp); - cp = NULL; -} - -struct gaim_plugin_description desc; -struct gaim_plugin_description *gaim_plugin_desc() { - desc.api_version = GAIM_PLUGIN_API_VERSION; - desc.name = g_strdup(_("Chat List")); - desc.version = g_strdup(VERSION); - desc.description = g_strdup(_("Allows you to add chat rooms to your buddy list.")); - desc.authors = g_strdup("Eric Warmenhoven <eric@warmenhoven.org>"); - desc.url = g_strdup(WEBSITE); - return &desc; -} - -G_MODULE_EXPORT char *name() -{ - return _("Chat List"); -} - -G_MODULE_EXPORT char *description() -{ - return _("Allows you to add chat rooms to your buddy list. Click the configure button to choose" - " which rooms."); -}