gnunet-svn
[Top][All Lists]
Advanced

[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); 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]