X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fpaging.c;h=38b8b541d482befa0408e5231fb5bd773f966856;hb=fb6f6fa4ec4e3277e30d84326d48e6850822d318;hp=51611c2ea5eea55568f2dd58b36c5a095fdedf60;hpb=f0bdfb5861cdd973591b47ba7bdc2661d92dcd2e;p=citadel.git diff --git a/webcit/paging.c b/webcit/paging.c index 51611c2ea..38b8b541d 100644 --- a/webcit/paging.c +++ b/webcit/paging.c @@ -1,72 +1,66 @@ -/* $Id$ */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "webcit.h" +/* + * This module handles instant message related functions. + * + * Copyright (c) 1996-2012 by the citadel.org team + * + * 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. + */ +#include "webcit.h" /* * display the form for paging (x-messaging) another user */ void display_page(void) { - char buf[256]; - char user[256]; + char recp[SIZ]; - wprintf("HTTP/1.0 200 OK\n"); - output_headers(1); + strcpy(recp, bstr("recp")); - wprintf("
"); - wprintf("Page another user\n"); - wprintf("
\n"); + output_headers(1, 1, 1, 0, 0, 0); + wc_printf("
\n"); + wc_printf("

"); + wc_printf(_("Send instant message")); + wc_printf("

"); + wc_printf("
\n"); - wprintf("This command sends a near-real-time message to any currently\n"); - wprintf("logged in user.

\n"); + wc_printf("
\n"); - wprintf("
\n"); + wc_printf("
\n"); - wprintf("Select a user to send a message to:
"); + wc_printf(_("Send an instant message to: ")); + escputs(recp); + wc_printf("
\n"); - wprintf("\n"); - wprintf("
\n"); + wc_printf("\n"); + wc_printf("\n", WC->nonce); + wc_printf("\n"); + + wc_printf("
\n"); + + wc_printf("\n"); - wprintf("Enter message text:
"); - wprintf("\n"); - wprintf("

\n"); + wc_printf(_("Enter message text:")); + wc_printf("
"); - wprintf(""); - wprintf("
\n"); + wc_printf("\n"); - wprintf("\n"); + wc_printf("

\n"); + + wc_printf("", _("Send message")); + wc_printf("
\n", _("Cancel")); + + wc_printf("\n"); + wc_printf("
\n"); wDumpContent(1); } @@ -76,61 +70,87 @@ void display_page(void) void page_user(void) { char recp[256]; - char msgtext[256]; - char sc[256]; - char buf[256]; + StrBuf *Line; - wprintf("HTTP/1.0 200 OK\n"); - output_headers(1); - - strcpy(recp, bstr("recp")); - strcpy(msgtext, bstr("msgtext")); - strcpy(sc, bstr("sc")); + safestrncpy(recp, bstr("recp"), sizeof recp); - if (strcmp(sc, "Send message")) { - wprintf("Message was not sent.
\n"); + if (!havebstr("send_button")) { + AppendImportantMessage(_("Message was not sent."), -1); } else { - serv_printf("SEXP %s|%s", recp, msgtext); - serv_gets(buf); - - if (buf[0] == '2') { - wprintf("Message has been sent to "); - escputs(recp); - wprintf(".
\n"); - } else { - wprintf("%s
\n", &buf[4]); + Line = NewStrBuf(); + serv_printf("SEXP %s|-", recp); + StrBuf_ServGetln(Line); + if (GetServerStatusMsg(Line, NULL, 0, 0) == 4) { + char buf[256]; + text_to_server(bstr("msgtext")); + serv_puts("000"); + stresc(buf, 256, recp, 0, 0); + AppendImportantMessage(buf, -1); + AppendImportantMessage(_("Message has been sent to "), -1); } } - wDumpContent(1); + + url_do_template(); } /* - * multiuser chat + * display page popup + * If there are instant messages waiting, and we notice that we haven't checked them in + * a while, it probably means that we need to open the instant messenger window. */ -void do_chat(void) +int Conditional_PAGE_WAITING(StrBuf *Target, WCTemplputParams *TP) { + int len; + char buf[SIZ]; + + /** JavaScript function to alert the user that popups are probably blocked */ + /** First, do the check as part of our page load. */ + serv_puts("NOOP"); + len = serv_getln(buf, sizeof buf); + if ((len >= 3) && (buf[3] == '*')) { + if ((time(NULL) - WC->last_pager_check) > 60) { + return 1; + } + } + return 0; + /* Then schedule it to happen again a minute from now if the user is idle. */ +} - wprintf("HTTP/1.0 200 OK\n"); - output_headers(1); - - wprintf("
"); - wprintf("Real-time chat\n"); - wprintf("
\n"); - - wprintf("A chat window should be appearing on your screen "); - wprintf("momentarily. When you're "); - wprintf("done, type /quit to exit. You can also "); - wprintf("type /help for more commands.\n"); - - wprintf("\n"); - wprintf("\n", WC->wc_username); - wprintf("\n", WC->wc_password); - wprintf("

Oops!

Looks like your browser doesn't support Java, "); - wprintf("so you won't be able to access Chat. Sorry.\n"); - wprintf("
\n"); - wDumpContent(1); + +void ajax_send_instant_message(void) { + char recp[256]; + char buf[256]; + + safestrncpy(recp, bstr("recp"), sizeof recp); + + serv_printf("SEXP %s|-", recp); + serv_getln(buf, sizeof buf); + + if (buf[0] == '4') { + text_to_server(bstr("msg")); + serv_puts("000"); + } + + escputs(buf); /* doesn't really matter what we return - the client ignores it */ +} + + +void +InitModule_PAGING +(void) +{ + WebcitAddUrlHandler(HKEY("display_page"), "", 0, display_page, 0); + WebcitAddUrlHandler(HKEY("page_user"), "", 0, page_user, 0); + WebcitAddUrlHandler(HKEY("ajax_send_instant_message"), "", 0, ajax_send_instant_message, AJAX); + RegisterConditional(HKEY("COND:PAGE:WAITING"), 0, Conditional_PAGE_WAITING, CTX_NONE); +} + + +void +SessionDestroyModule_PAGING +(wcsession *sess) +{ + /* nothing here anymore */ }