X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fpaging.c;h=4b3dc217a716983c01875f6c31fbf74fd74741b6;hb=HEAD;hp=ebe3a4e667d9cefaf25d2e1378c8373a135b2f41;hpb=f125458a206048a4c3fc9b8b061585eca9895fc8;p=citadel.git diff --git a/webcit/paging.c b/webcit/paging.c index ebe3a4e66..f022c48bc 100644 --- a/webcit/paging.c +++ b/webcit/paging.c @@ -1,170 +1,146 @@ -/* $Id$ */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +// This module handles instant message related functions. +// +// Copyright (c) 1996-2023 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 recp[SIZ]; -/* - * display the form for paging (x-messaging) another user - */ -void display_page(void) -{ - char buf[256]; - char user[256]; + strcpy(recp, bstr("recp")); - output_headers(1); + output_headers(1, 1, 1, 0, 0, 0); + wc_printf("
\n"); + wc_printf("

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

"); + wc_printf("
\n"); - wprintf("
"); - wprintf("Page another user\n"); - wprintf("
\n"); + 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(_("Send an instant message to: ")); + escputs(recp); + wc_printf("
\n"); - wprintf("Select a user to send a message to:
"); + wc_printf("\n"); + wc_printf("\n", WC->nonce); + wc_printf("\n"); - wprintf("\n"); - wprintf("
\n"); + wc_printf("
\n"); + + wc_printf("\n"); + + wc_printf(_("Enter message text:")); + wc_printf("
"); - wprintf("Enter message text:
"); - wprintf("\n"); - wprintf("

\n"); + wc_printf("\n"); - wprintf(""); - wprintf("
\n"); + wc_printf("

\n"); - wprintf("
\n"); + wc_printf("", _("Send message")); + wc_printf("
\n", _("Cancel")); + + wc_printf("\n"); + wc_printf("
\n"); wDumpContent(1); } -/* - * page another user - */ -void page_user(void) -{ + +// page another user +void page_user(void) { char recp[256]; - char msgtext[256]; - char sc[256]; - char buf[256]; + StrBuf *Line; - output_headers(1); + safestrncpy(recp, bstr("recp"), sizeof recp); - strcpy(recp, bstr("recp")); - strcpy(msgtext, bstr("msgtext")); - strcpy(sc, bstr("sc")); - - if (strcmp(sc, "Send message")) { - wprintf("Message was not sent.
\n"); - } 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]); + if (!havebstr("send_button")) { + AppendImportantMessage(_("Message was not sent."), -1); + } + else { + 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 - */ -void do_chat(void) -{ - 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("\n", WC->wc_roomname); - 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); +// 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. +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. } -/* - * - */ -void page_popup(void) -{ +void ajax_send_instant_message(void) { + char recp[256]; char buf[256]; - char pagefrom[256]; - /* suppress express message check, do headers but no fake frames */ - output_headers(0x08 | 0x03); + safestrncpy(recp, bstr("recp"), sizeof recp); - while (serv_puts("GEXP"), serv_gets(buf), buf[0]=='1') { + serv_printf("SEXP %s|-", recp); + serv_getln(buf, sizeof buf); - extract(pagefrom, &buf[4], 3); - - wprintf("
"); - wprintf("Express message from "); - escputs(pagefrom); - wprintf("
\n"); - - fmout(NULL); + if (buf[0] == '4') { + text_to_server(bstr("msg")); + serv_puts("000"); } - wprintf("
" - "" - "[ close window ]\n" - "
"); + escputs(buf); // doesn't really matter what we return - the client ignores it +} + - wDumpContent(1); - WC->HaveExpressMessages = 0; +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("COND:PAGE:WAITING", 0, Conditional_PAGE_WAITING, CTX_NONE); } +void +SessionDestroyModule_PAGING +(wcsession *sess) +{ + /* nothing here anymore */ +}