From 1e79d42b743e98abb1ff6530376a07e393851b61 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Thu, 12 Jan 2006 04:23:38 +0000 Subject: [PATCH] * More updates to instant messenger: - Better delineation of input box. Added an icon and a slightly darker background color so you can see where the input box actually is. - Auto refresh every 5 seconds instead of 30 - WebCit now fires off a JavaScript test after 30 seconds of inactivity to see if the instant messenger window needs to be opened --- webcit/ChangeLog | 8 ++++++ webcit/paging.c | 19 +++++++++++++- webcit/static/instant_messenger.html | 11 ++++---- webcit/webcit.c | 38 +++++++++++++++++++++++++--- 4 files changed, 67 insertions(+), 9 deletions(-) diff --git a/webcit/ChangeLog b/webcit/ChangeLog index 4794c837f..923041109 100644 --- a/webcit/ChangeLog +++ b/webcit/ChangeLog @@ -1,5 +1,13 @@ $Id$ +Wed Jan 11 23:20:48 EST 2006 ajc +* More updates to instant messenger: + - Better delineation of input box. Added an icon and a slightly darker + background color so you can see where the input box actually is. + - Auto refresh every 5 seconds instead of 30 + - WebCit now fires off a JavaScript test after 30 seconds of inactivity + to see if the instant messenger window needs to be opened + Wed Jan 11 16:59:54 EST 2006 ajc * More updates to instant messenger. When new messages arrive, the window automatically scrolls to the bottom and the input box is refocused. diff --git a/webcit/paging.c b/webcit/paging.c index a72dba26b..e15515691 100644 --- a/webcit/paging.c +++ b/webcit/paging.c @@ -156,17 +156,34 @@ void page_popup(void) { char buf[SIZ]; + /* First, do the check as part of our page load. */ serv_puts("NOOP"); serv_getln(buf, sizeof buf); if (buf[3] == '*') { if ((time(NULL) - WC->last_pager_check) > 60) { wprintf("" ); } } + + /* Then schedule it to happen again a minute from now if the user is idle. */ + wprintf("\n" + ); } diff --git a/webcit/static/instant_messenger.html b/webcit/static/instant_messenger.html index 57666ac8c..87f9ab533 100644 --- a/webcit/static/instant_messenger.html +++ b/webcit/static/instant_messenger.html @@ -4,7 +4,7 @@ - +

@@ -115,13 +115,14 @@ function ShowNewMsg(gexp_xmlresponse) { + '
' + '
' + '
' - + '
' + + '
' + '
' - + '' + + ' ' + + '' + '
' - + '
' + + '
' + '
\n'; $('tab_bar').innerHTML = $('tab_bar').innerHTML @@ -196,7 +197,7 @@ function GrabMyName(greg_xmlresponse) { // Cause FetchNewMsgs() to be called periodically. -new PeriodicalExecuter(FetchNewMsgs, 3); +new PeriodicalExecuter(FetchNewMsgs, 5); diff --git a/webcit/webcit.c b/webcit/webcit.c index 046c603d7..92eed0d93 100644 --- a/webcit/webcit.c +++ b/webcit/webcit.c @@ -407,7 +407,6 @@ void output_headers( int do_httpheaders, /* 1 = output HTTP headers if ( (WC->logged_in) && (!unset_cookies) ) { wprintf("
"); do_selected_iconbar(); - wprintf("
\n"); } if (do_room_banner == 1) { wprintf("
\n"); @@ -819,11 +818,9 @@ void ajax_servcmd(void) begin_ajax_response(); - /* lprintf(9, "Sending cmd: %s\n", bstr("g_cmd")); */ serv_printf("%s", bstr("g_cmd")); serv_getln(buf, sizeof buf); wprintf("%s\n", buf); - /* lprintf(9, " Response: %s\n", buf); */ if (buf[0] == '8') { serv_printf("\n\n000"); @@ -853,9 +850,42 @@ void ajax_servcmd(void) } end_ajax_response(); + + /* This is kind of an ugly hack, but this is the only place it can go. + * If the command was GEXP, then the instant messenger window must be + * running, so reset the "last_pager_check" watchdog timer so + * that page_popup() doesn't try to open it a second time. + */ + if (!strncasecmp(bstr("g_cmd"), "GEXP", 4)) { + WC->last_pager_check = time(NULL); + } } +/* + * Helper function for the asynchronous check to see if we need + * to open the instant messenger window. + */ +void seconds_since_last_gexp(void) +{ + char buf[256]; + + begin_ajax_response(); + if ( (time(NULL) - WC->last_pager_check) < 30) { + wprintf("NO\n"); + } + else { + serv_puts("NOOP"); + serv_getln(buf, sizeof buf); + if (buf[3] == '*') { + wprintf("YES"); + } + else { + wprintf("NO"); + } + } + end_ajax_response(); +} @@ -1248,6 +1278,8 @@ void session_loop(struct httprequest *req) display_main_menu(); } else if (!strcasecmp(action, "who")) { who(); + } else if (!strcasecmp(action, "sslg")) { + seconds_since_last_gexp(); } else if (!strcasecmp(action, "who_inner_html")) { begin_ajax_response(); who_inner_div(); -- 2.39.2