X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fgraphics.c;h=8dbad904387810272212b1bcfcc30349dca6646f;hb=HEAD;hp=00fc5f052790864e7217d6d0f64cdb4a00f0c80b;hpb=aed955d774ebeee61f0022e4199f25c5ea0d8be0;p=citadel.git diff --git a/webcit/graphics.c b/webcit/graphics.c index 00fc5f052..98b063115 100644 --- a/webcit/graphics.c +++ b/webcit/graphics.c @@ -1,49 +1,93 @@ -/* - * Handles HTTP upload of graphics files into the system. - * - * Copyright (c) 1996-2011 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 as - * published by the Free Software Foundation; either version 3 of the - * License, or (at your option) any later version. - * - * 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 - */ +// Handles HTTP upload of graphics files into the system. +// +// Copyright (c) 1996-2022 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" extern void output_static(const char* What); -void display_graphics_upload(char *filename) -{ - StrBuf *Line; - Line = NewStrBuf(); - serv_printf("UIMG 0||%s", filename); - StrBuf_ServGetln(Line); - if (GetServerStatusMsg(Line, NULL, 1, 2) != 2) { +// display the picture (icon, photo, whatever) associated with the current room +void display_roompic(void) { + off_t bytes; + StrBuf *Buf = NewStrBuf(); + serv_printf("DLRI"); + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, NULL) == 6) { + StrBufCutLeft(Buf, 4); + bytes = StrBufExtract_long(Buf, 0, '|'); + StrBuf *content_type = NewStrBuf(); + StrBufExtract_token(content_type, Buf, 3, '|'); + WC->WBuf = NewStrBuf(); + StrBuf_ServGetBLOBBuffered(WC->WBuf, bytes); + http_transmit_thing(ChrPtr(content_type), 0); + FreeStrBuf(&content_type); + } + else { + output_error_pic("", ""); + } + FreeStrBuf(&Buf); +} + + +// upload the picture (icon, photo, whatever) associated with the current room +void common_code_for_editroompic_and_editpic(char *servcmd) { + if (havebstr("cancel_button")) { + AppendImportantMessage(_("Graphics upload has been cancelled."), -1); + display_main_menu(); + return; + } + + if (WC->upload_length == 0) { + AppendImportantMessage(_("You didn't upload a file."), -1); display_main_menu(); return; } - else - { - output_headers(1, 0, 0, 0, 1, 0); - do_template("files_graphicsupload"); - end_burst(); + + serv_printf("%s %ld|%s", servcmd, (long)WC->upload_length, GuessMimeType(ChrPtr(WC->upload), WC->upload_length)); + StrBuf *Line = NewStrBuf(); + StrBuf_ServGetln(Line); + if (GetServerStatusMsg(Line, NULL, 0, 0) == 7) { + serv_write(ChrPtr(WC->upload), WC->upload_length); + display_success(ChrPtr(Line) + 4); + } + else { + AppendImportantMessage((ChrPtr(Line) + 4), -1); + display_main_menu(); } FreeStrBuf(&Line); } -void do_graphics_upload(char *filename) -{ + +// upload the picture (icon, photo, whatever) associated with the current room +void editroompic(void) { + common_code_for_editroompic_and_editpic("ULRI"); +} + + +// upload the picture (icon, photo, whatever) associated with the current user +void editpic(void) { + common_code_for_editroompic_and_editpic("ULUI"); +} + + +// display the screen for uploading graphics to the server +void display_graphics_upload(char *filename) { + output_headers(1, 0, 0, 0, 1, 0); + do_template("files_graphicsupload"); + end_burst(); +} + + +void do_graphics_upload(char *filename) { StrBuf *Line; const char *MimeType; wcsession *WCC = WC; @@ -103,64 +147,38 @@ void do_graphics_upload(char *filename) void edithellopic(void) { do_graphics_upload("hello"); } -void editpic(void) { do_graphics_upload("_userpic_"); } -void editgoodbuyepic(void) { do_graphics_upload("UIMG 1|%s|goodbuye"); } +void editgoodbyepic(void) { do_graphics_upload("UIMG 1|%s|goodbye"); } -/* The users photo display / upload facility */ +// The user's photo display / upload facility void display_editpic(void) { - putbstr("__WHICHPIC", NewStrBufPlain(HKEY("_userpic_"))); putbstr("__PICDESC", NewStrBufPlain(_("your photo"), -1)); putbstr("__UPLURL", NewStrBufPlain(HKEY("editpic"))); display_graphics_upload("editpic"); } -/* room picture dispay / upload facility */ + +// room picture dispay / upload facility void display_editroompic(void) { - putbstr("__WHICHPIC", NewStrBufPlain(HKEY("_roompic_"))); putbstr("__PICDESC", NewStrBufPlain(_("the icon for this room"), -1)); putbstr("__UPLURL", NewStrBufPlain(HKEY("editroompic"))); display_graphics_upload("editroompic"); } -/* the greetingpage hello pic */ +// the login page graphics void display_edithello(void) { putbstr("__WHICHPIC", NewStrBufPlain(HKEY("hello"))); - putbstr("__PICDESC", NewStrBufPlain(_("the Greetingpicture for the login prompt"), -1)); + putbstr("__PICDESC", NewStrBufPlain(_("graphics to be displayed on the login screen"), -1)); putbstr("__UPLURL", NewStrBufPlain(HKEY("edithellopic"))); display_graphics_upload("edithellopic"); } -/* the logoff banner */ +// the logoff banner void display_editgoodbyepic(void) { - putbstr("__WHICHPIC", NewStrBufPlain(HKEY("UIMG 0|%s|goodbuye"))); + putbstr("__WHICHPIC", NewStrBufPlain(HKEY("UIMG 0|%s|goodbye"))); putbstr("__PICDESC", NewStrBufPlain(_("the Logoff banner picture"), -1)); - putbstr("__UPLURL", NewStrBufPlain(HKEY("editgoodbuyepic"))); - display_graphics_upload("editgoodbuyepic"); -} - -void display_editfloorpic(void) { - StrBuf *PicAction; - - PicAction = NewStrBuf(); - StrBufPrintf(PicAction, "_floorpic_|%s", bstr("which_floor")); - putbstr("__WHICHPIC", PicAction); - putbstr("__PICDESC", NewStrBufPlain(_("the icon for this floor"), -1)); - putbstr("__UPLURL", NewStrBufPlain(HKEY("editfloorpic"))); - display_graphics_upload("editfloorpic"); + putbstr("__UPLURL", NewStrBufPlain(HKEY("editgoodbyepic"))); + display_graphics_upload("editgoodbyepic"); } -void editroompic(void) { - char buf[SIZ]; - snprintf(buf, SIZ, "_roompic_|%s", - bstr("which_room")); - do_graphics_upload(buf); -} - -void editfloorpic(void){ - char buf[SIZ]; - snprintf(buf, SIZ, "_floorpic_|%s", - bstr("which_floor")); - do_graphics_upload(buf); -} void InitModule_GRAPHICS @@ -172,8 +190,7 @@ InitModule_GRAPHICS WebcitAddUrlHandler(HKEY("editroompic"), "", 0, editroompic, 0); WebcitAddUrlHandler(HKEY("display_edithello"), "", 0, display_edithello, 0); WebcitAddUrlHandler(HKEY("edithellopic"), "", 0, edithellopic, 0); - WebcitAddUrlHandler(HKEY("display_editgoodbuye"), "", 0, display_editgoodbyepic, 0); - WebcitAddUrlHandler(HKEY("editgoodbuyepic"), "", 0, editgoodbuyepic, 0); - WebcitAddUrlHandler(HKEY("display_editfloorpic"), "", 0, display_editfloorpic, 0); - WebcitAddUrlHandler(HKEY("editfloorpic"), "", 0, editfloorpic, 0); + WebcitAddUrlHandler(HKEY("display_editgoodbye"), "", 0, display_editgoodbyepic, 0); + WebcitAddUrlHandler(HKEY("editgoodbyepic"), "", 0, editgoodbyepic, 0); + WebcitAddUrlHandler(HKEY("roompic"), "", 0, display_roompic, 0); }