removed a bunch of blank comment lines
[citadel.git] / webcit / roomchat.c
index 0933fa6168e1647a91300e3f57ff813306c73a5b..3b0091e441a3d55799b1ce56e836c03705990eb7 100644 (file)
@@ -1,27 +1,19 @@
 /*
- * $Id$
- *
  * This module handles multiuser chat.
  *
- * Copyright (c) 1996-2010 by the citadel.org team
+ * Copyright (c) 1996-2012 by the citadel.org team
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * This program is open source software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 3.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
 #include "webcit.h"
-
+#include "webserver.h"
 
 /*
  * Display the screen containing multiuser chat for a room.
@@ -34,7 +26,7 @@ void do_chat(void)
        WC->last_chat_user[0] = 0;
 
        output_headers(1, 1, 1, 0, 0, 0);
-       do_template("roomchat", NULL);
+       do_template("roomchat");
 
        serv_puts("RCHT enter");
        serv_getln(buf, sizeof buf);
@@ -51,73 +43,38 @@ void do_chat(void)
 void chat_recv(void) {
        char buf[SIZ];
        char cl_user[SIZ];
-       char cl_text[SIZ];
-       int cl_text_len = 0;
-
-       begin_ajax_response();
 
        serv_printf("RCHT poll|%d", WC->last_chat_seq);
        serv_getln(buf, sizeof buf);
        if (buf[0] == '1') {
                WC->last_chat_seq = extract_int(&buf[4], 0);
                extract_token(cl_user, &buf[4], 2, '|', sizeof cl_user);
-               cl_text[0] = 0;
-               cl_text_len = 0;
-               while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
-                       safestrncpy(&cl_text[cl_text_len], buf, (sizeof(cl_text) - cl_text_len));
-                       cl_text_len += strlen(buf);
-               }
-
-               wc_printf("<div id=\"chat_seq_%d\">", WC->last_chat_seq);
 
+               /* who is speaking ... */
                if (strcasecmp(cl_user, WC->last_chat_user)) {
-                       wc_printf("<table border=0 width=100%% "
-                               "cellspacing=1 cellpadding=0 "
-                               "bgcolor=&quot;#ffffff&quot;>"
-                               "<tr><td></tr></td></table>"
-                       );
-
-               }
-
-               wc_printf("<table border=0 width=100%% cellspacing=0 cellpadding=0 "
-                       "bgcolor=&quot;#eeeeee&quot;>");
-
-               wc_printf("<tr><td>");
-
-               if (!strcasecmp(cl_user, ":")) {
-                       wc_printf("<I>");
-               }
-
-               if (strcasecmp(cl_user, WC->last_chat_user)) {
-                       wc_printf("<B>");
-
+                       wc_printf("<br>\n");
                        if (!strcasecmp(cl_user, ChrPtr(WC->wc_fullname))) {
-                               wc_printf("<FONT COLOR=&quot;#FF0000&quot;>");
+                               wc_printf("<span class=\"chat_myname_class\">");
                        }
                        else {
-                               wc_printf("<FONT COLOR=&quot;#0000FF&quot;>");
+                               wc_printf("<span class=\"chat_notmyname_class\">");
                        }
-                       jsescputs(cl_user);
+                       escputs(cl_user);
+                       strcpy(WC->last_chat_user, cl_user);
 
-                       wc_printf("</FONT>: </B>");
+                       wc_printf(": </span>");
                }
                else {
                        wc_printf("&nbsp;&nbsp;&nbsp;");
                }
-               jsescputs(cl_text);
-               if (!strcasecmp(cl_user, ":")) {
-                       wc_printf("</I>");
-               }
-
-               wc_printf("</TD></TR></TABLE>\n");
-               wc_printf("</div>\n");
 
-               strcpy(WC->last_chat_user, cl_user);
-               /* FIXME make this work wc_printf("parent.chat_transcript.scrollTo(999999,999999);\">\n"); */
+               /* what did they say ... */
+               wc_printf("<span class=\"chat_text_class\">");
+               while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
+                       escputs(buf);
+               }
+               wc_printf("<br></span>\n");
        }
-
-       end_ajax_response();
-
 }
 
 
@@ -137,14 +94,6 @@ void chat_send(void) {
                strcpy(send_this, "");
        }
 
-       if (havebstr("help_button")) {
-               strcpy(send_this, "/help");
-       }
-
-       if (havebstr("list_button")) {
-               strcpy(send_this, "/who");
-       }
-
        if (havebstr("exit_button")) {
                strcpy(send_this, "/quit");
        }
@@ -161,12 +110,50 @@ void chat_send(void) {
 }
 
 
+/*
+ * wholist for chat
+ */
+void chat_rwho(void) {
+       char buf[1024];
+
+       serv_puts("RCHT rwho");
+       serv_getln(buf, sizeof buf);
+       if (buf[0] == '1') {
+               while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
+                       if (!strcasecmp(buf, ChrPtr(WC->wc_fullname))) {
+                               wc_printf("<span class=\"chat_myname_class\">");
+                       }
+                       else {
+                               wc_printf("<span class=\"chat_notmyname_class\">");
+                       }
+                       wc_printf("<img src=\"static/webcit_icons/essen/16x16/chat.png\">");
+                       escputs(buf);
+                       wc_printf("</span><br>\n");
+               }
+       }
+}
+
+
+/*
+ * advise the Citadel server that the user is navigating away from the chat window
+ */
+void chat_exit(void) {
+       char buf[1024];
+
+       serv_puts("RCHT exit");
+       serv_getln(buf, sizeof buf);            /* Throw away the server reply */
+}
+
+
+
 void 
 InitModule_ROOMCHAT
 (void)
 {
        WebcitAddUrlHandler(HKEY("chat"), "", 0, do_chat, 0);
-       WebcitAddUrlHandler(HKEY("chat_recv"), "", 0, chat_recv, 0);
+       WebcitAddUrlHandler(HKEY("chat_recv"), "", 0, chat_recv, AJAX);
+       WebcitAddUrlHandler(HKEY("chat_rwho"), "", 0, chat_rwho, AJAX);
+       WebcitAddUrlHandler(HKEY("chat_exit"), "", 0, chat_exit, AJAX);
        WebcitAddUrlHandler(HKEY("chat_send"), "", 0, chat_send, 0);
 }