[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r6585 - gnunet-gtk/src/plugins/chat
From: |
gnunet |
Subject: |
[GNUnet-SVN] r6585 - gnunet-gtk/src/plugins/chat |
Date: |
Fri, 21 Mar 2008 16:54:08 -0600 (MDT) |
Author: nevans
Date: 2008-03-21 16:54:07 -0600 (Fri, 21 Mar 2008)
New Revision: 6585
Modified:
gnunet-gtk/src/plugins/chat/chat.c
gnunet-gtk/src/plugins/chat/chat.h
Log:
Modified: gnunet-gtk/src/plugins/chat/chat.c
===================================================================
--- gnunet-gtk/src/plugins/chat/chat.c 2008-03-21 19:26:54 UTC (rev 6584)
+++ gnunet-gtk/src/plugins/chat/chat.c 2008-03-21 22:54:07 UTC (rev 6585)
@@ -43,6 +43,8 @@
static struct GNUNET_CHAT_gui_chat_client *list;
+static struct GNUNET_CHAT_member_list *room_member_list;
+
static void *
write_save_call (void *arg)
{
@@ -60,6 +62,79 @@
return NULL;
}
+/* Safe call to add a nick to the chat room view */
+static void *
+write_nick_save_call (void *arg)
+{
+ struct GNUNET_CHAT_safe_nick_write_struct *writeholder = arg;
+
+ GtkTextBuffer *buffer;
+ char *message_buf;
+ int message_buf_size;
+ struct GNUNET_CHAT_member_list *pos = room_member_list;
+
+ g_print("received chat name %s\n",writeholder->nick);
+ while(pos != NULL)
+ {
+ if (strcmp(pos->nick,writeholder->nick) == 0)
+ return NULL;
+ pos = pos->next;
+ }
+
+ g_print("adding chat name %s to the list\n",writeholder->nick);
+
+ pos = GNUNET_malloc(sizeof(struct GNUNET_CHAT_member_list));
+ pos->nick = GNUNET_malloc(strlen(writeholder->nick) + 1);
+ strcpy(pos->nick,writeholder->nick);
+ pos->next = room_member_list;
+ if (room_member_list != NULL)
+ room_member_list->prev = pos;
+ room_member_list = pos;
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(writeholder->nickList));
+ message_buf_size = snprintf(NULL,0,"%s",writeholder->nick);
+ message_buf = GNUNET_malloc(message_buf_size + 2);
+ snprintf(message_buf,message_buf_size + 2,"%s\n",writeholder->nick);
+ gtk_text_buffer_insert_at_cursor(buffer,message_buf,message_buf_size +
1);
+
+ return NULL;
+}
+
+/* Safe call to remove a nick from the chat room view */
+static void *
+remove_nick_save_call (void *arg)
+{
+ struct GNUNET_CHAT_safe_nick_write_struct *writeholder = arg;
+
+ GtkTextBuffer *buffer =
gtk_text_view_get_buffer(GTK_TEXT_VIEW(writeholder->nickList));
+ char *message_buf;
+ int message_buf_size;
+ struct GNUNET_CHAT_member_list *pos = room_member_list;
+
+ while(pos != NULL)
+ {
+ if (strcmp(pos->nick,writeholder->nick) == 0)
+ {
+ pos->prev->next = pos->next;
+ pos->next->prev = pos->prev;
+ GNUNET_free(pos);
+ /*buffer =
gtk_text_view_get_buffer(GTK_TEXT_VIEW(writeholder->nickList));*/
+ buffer = gtk_text_buffer_new (NULL);
+ return NULL;
+ }
+ pos = pos->next;
+ }
+
+ return NULL;
+
+
+ message_buf_size = snprintf(NULL,0,"%s",writeholder->nick);
+ message_buf = GNUNET_malloc(message_buf_size + 2);
+ snprintf(message_buf,message_buf_size + 2,"%s\n",writeholder->nick);
+ gtk_text_buffer_insert_at_cursor(buffer,message_buf,message_buf_size +
1);
+
+ return NULL;
+}
+
/**
* A message was sent in the chat to us.
*
@@ -104,6 +179,48 @@
return GNUNET_OK;
}
+static int
+member_list_callback (void *cls,const char *senderNick, GNUNET_CronTime
timestamp)
+{
+ struct GNUNET_CHAT_gui_chat_client *client = cls;
+ GtkWidget *chatnicklist;
+
+ struct GNUNET_CHAT_safe_nick_write_struct writearg;
+
+ chatnicklist =
g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(client->chatFrame)),1);
+ chatnicklist =
g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(chatnicklist)),0);
+
+ /* chatnicklist is the GtkTextView object */
+ writearg.nick = senderNick;
+ writearg.nickList = chatnicklist;
+
+ g_print("received nick %s calling safe write call\n",writearg.nick);
+
+ GNUNET_GTK_save_call(&write_nick_save_call,&writearg);
+
+ return GNUNET_OK;
+}
+
+static int
+member_remove_callback (void *cls,const char *senderNick, GNUNET_CronTime
timestamp)
+{
+ struct GNUNET_CHAT_gui_chat_client *client = cls;
+ GtkWidget *chatnicklist;
+
+ struct GNUNET_CHAT_safe_nick_write_struct writearg;
+
+ chatnicklist =
g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(client->chatFrame)),1);
+ chatnicklist =
g_list_nth_data(gtk_container_get_children(GTK_CONTAINER(chatnicklist)),0);
+
+ /* chatnicklist is the GtkTextView object */
+ writearg.nick = senderNick;
+ writearg.nickList = chatnicklist;
+
+ GNUNET_GTK_save_call(&remove_nick_save_call,&writearg);
+
+ return GNUNET_OK;
+}
+
void
init_chat (struct GNUNET_GE_Context *ectx,
struct GNUNET_GC_Configuration *cfg)
@@ -112,6 +229,7 @@
chat_ectx = ectx;
chat_cfg = cfg;
+ room_member_list = NULL;
/*GNUNET_disable_entropy_gathering ();*/
/* FIXME: yes G, read key from disk */
@@ -175,7 +293,7 @@
/* We do a silly strdup later on member_info... either check for NULL
or only pass "" for member_info!! */
- chatRoom = GNUNET_CHAT_join_room
(chat_ectx,chat_cfg,nick,room_name,&pub_key,priv_key,"",&receive_callback,client);
+ chatRoom = GNUNET_CHAT_join_room
(chat_ectx,chat_cfg,nick,room_name,&pub_key,priv_key,"",&receive_callback,client,&member_list_callback,client,&member_remove_callback,client);
client->room = chatRoom;
client->chatFrame = newChatWindow;
Modified: gnunet-gtk/src/plugins/chat/chat.h
===================================================================
--- gnunet-gtk/src/plugins/chat/chat.h 2008-03-21 19:26:54 UTC (rev 6584)
+++ gnunet-gtk/src/plugins/chat/chat.h 2008-03-21 22:54:07 UTC (rev 6585)
@@ -61,6 +61,19 @@
const char *senderNick;
};
+struct GNUNET_CHAT_safe_nick_write_struct
+{
+ GtkWidget *nickList;
+ const char *nick;
+};
+
+struct GNUNET_CHAT_member_list
+{
+ struct GNUNET_CHAT_member_list *next;
+ struct GNUNET_CHAT_member_list *prev;
+ char *nick;
+};
+
void
on_chat_frame_send_button_click_event_chat(GtkWidget* widget, gpointer data);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r6585 - gnunet-gtk/src/plugins/chat,
gnunet <=