X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fdownloads.c;h=a130c6392c86cc27a011039e5c2d2fe9b097242e;hb=a15ba5c1ede7c86a85d62ed5b539dcfc9f415bc1;hp=03b7b8fc72397eaf02c3ed4fe558f75d5877a973;hpb=95a9d30497849472db7135888eb2df1fc4a721b9;p=citadel.git diff --git a/webcit/downloads.c b/webcit/downloads.c index 03b7b8fc7..a130c6392 100644 --- a/webcit/downloads.c +++ b/webcit/downloads.c @@ -1,9 +1,26 @@ /* - * $Id$ + * Copyright (c) 1996-2010 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 */ + #include "webcit.h" #include "webserver.h" +extern void output_static(const char* What); + extern char* static_dirs[]; typedef struct _FileListStruct { @@ -172,10 +189,10 @@ HashList* LoadFileList(StrBuf *Target, WCTemplputParams *TP) int sequence = 0; char buf[1024]; CompareFunc SortIt; - int HavePic; + int HavePic = 0; WCTemplputParams SubTP; - memset(&TP, 0, sizeof(WCTemplputParams)); + memset(&SubTP, 0, sizeof(WCTemplputParams)); serv_puts("RDIR"); serv_getln(buf, sizeof buf); if (buf[0] != '1') return NULL; @@ -210,6 +227,8 @@ HashList* LoadFileList(StrBuf *Target, WCTemplputParams *TP) } Put(Files, SKEY(Entry->Filename), Entry, FreeFiles); } + if (HavePic) + putbstr("__HAVE_PIC", NewStrBufPlain(HKEY("1"))); SubTP.Filter.ContextType = CTX_FILELIST; SortIt = RetrieveSort(&SubTP, NULL, 0, HKEY("fileunsorted"), 0); if (SortIt != NULL) @@ -217,7 +236,6 @@ HashList* LoadFileList(StrBuf *Target, WCTemplputParams *TP) else SortByPayload(Files, CompareFilelistBySequence); FreeStrBuf(&Buf); - svputlong("FILE:HAVEPICS", HavePic); return Files; } @@ -232,7 +250,7 @@ void display_mime_icon(void) FileName = GetIconFilename(MimeType, tlen); if (FileName == NULL) - snprintf (FileBuf, SIZ, "%s%s", static_dirs[0], "/diskette_24x.gif"); + snprintf (FileBuf, SIZ, "%s%s", static_dirs[0], "/webcit_icons/essen/16x16/file.png"); else snprintf (FileBuf, SIZ, "%s%s", static_dirs[3], FileName); output_static(FileBuf); @@ -259,7 +277,7 @@ void download_file(void) if (!force_download) { StrBufExtract_token(ContentType, Buf, 3, '|'); } - read_server_binary(WCC->WBuf, bytes, Buf); + serv_read_binary(WCC->WBuf, bytes, Buf); serv_puts("CLOS"); StrBuf_ServGetln(Buf); http_transmit_thing(ChrPtr(ContentType), 0); @@ -268,7 +286,7 @@ void download_file(void) hprintf("HTTP/1.1 404 %s\n", ChrPtr(Buf)); output_headers(0, 0, 0, 0, 0, 0); hprintf("Content-Type: text/plain\r\n"); - wprintf(_("An error occurred while retrieving this file: %s\n"), + wc_printf(_("An error occurred while retrieving this file: %s\n"), ChrPtr(Buf)); end_burst(); } @@ -280,6 +298,7 @@ void download_file(void) void delete_file(void) { + const StrBuf *MimeType; StrBuf *Buf; char buf[256]; @@ -291,9 +310,8 @@ void delete_file(void) GetServerStatus(Buf, NULL); StrBufCutLeft(Buf, 4); strcpy(WC->ImportantMessage, ChrPtr(Buf)); - do_template("files", CTX_NONE); - output_headers(0, 0, 0, 0, 0, 0); - end_burst(); + MimeType = DoTemplate(HKEY("files"), NULL, &NoCtx); + http_transmit_thing(ChrPtr(MimeType), 0); FreeStrBuf(&Buf); } @@ -301,21 +319,29 @@ void delete_file(void) void upload_file(void) { + const StrBuf *RetMimeType; const char *MimeType; char buf[1024]; long bytes_transmitted = 0; long blocksize; + const StrBuf *Desc; wcsession *WCC = WC; /* stack this for faster access (WC is a function) */ MimeType = GuessMimeType(ChrPtr(WCC->upload), WCC->upload_length); - serv_printf("UOPN %s|%s|%s", WCC->upload_filename, MimeType, bstr("description")); + + Desc = sbstr("description"); + + serv_printf("UOPN %s|%s|%s", + ChrPtr(WCC->upload_filename), + MimeType, + ChrPtr(Desc)); + serv_getln(buf, sizeof buf); if (buf[0] != '2') { strcpy(WCC->ImportantMessage, &buf[4]); - do_template("files", NULL); - output_headers(0, 0, 0, 0, 0, 0); - end_burst(); + RetMimeType = DoTemplate(HKEY("files"), NULL, &NoCtx); + http_transmit_thing(ChrPtr(RetMimeType), 0); return; } @@ -339,9 +365,8 @@ void upload_file(void) serv_puts("UCLS 1"); serv_getln(buf, sizeof buf); strcpy(WCC->ImportantMessage, &buf[4]); - do_template("files", CTX_NONE); - output_headers(0, 0, 0, 0, 0, 0); - end_burst(); + RetMimeType = DoTemplate(HKEY("files"), NULL, &NoCtx); + http_transmit_thing(ChrPtr(RetMimeType), 0); } @@ -361,15 +386,17 @@ void output_image(void) serv_printf("OIMG %s|%s", bstr("name"), bstr("parm")); StrBuf_ServGetln(Buf); if (GetServerStatus(Buf, NULL) == 2) { + int rc; StrBufCutLeft(Buf, 4); bytes = StrBufExtract_long(Buf, 0, '|'); /** Read it from the server */ - if (read_server_binary(WCC->WBuf, bytes, Buf) > 0) { - serv_puts("CLOS"); - StrBuf_ServGetln(Buf); + rc = serv_read_binary(WCC->WBuf, bytes, Buf); + serv_puts("CLOS"); + StrBuf_ServGetln(Buf); + if (rc > 0) { MimeType = GuessMimeType (ChrPtr(WCC->WBuf), StrLength(WCC->WBuf)); /** Write it to the browser */ if (!IsEmptyStr(MimeType)) @@ -387,7 +414,7 @@ void output_image(void) * Instead of an ugly 404, send a 1x1 transparent GIF * when there's no such image on the server. */ - StrBufPrintf (Buf, "%s%s", static_dirs[0], "/blank.gif"); + StrBufPrintf (Buf, "%s%s", static_dirs[0], "/webcit_icons/blank.gif"); output_static(ChrPtr(Buf)); FreeStrBuf(&Buf); } @@ -432,16 +459,16 @@ InitModule_DOWNLOAD GroupchangeFilelistBySequence, CTX_FILELIST); - RegisterNamespace("FILE:NAME", 0, 2, tmplput_FILE_NAME, CTX_FILELIST); - RegisterNamespace("FILE:SIZE", 0, 1, tmplput_FILE_SIZE, CTX_FILELIST); - RegisterNamespace("FILE:MIMETYPE", 0, 2, tmplput_FILEMIMETYPE, CTX_FILELIST); - RegisterNamespace("FILE:COMMENT", 0, 2, tmplput_FILE_COMMENT, CTX_FILELIST); + RegisterNamespace("FILE:NAME", 0, 2, tmplput_FILE_NAME, NULL, CTX_FILELIST); + RegisterNamespace("FILE:SIZE", 0, 1, tmplput_FILE_SIZE, NULL, CTX_FILELIST); + RegisterNamespace("FILE:MIMETYPE", 0, 2, tmplput_FILEMIMETYPE, NULL, CTX_FILELIST); + RegisterNamespace("FILE:COMMENT", 0, 2, tmplput_FILE_COMMENT, NULL, CTX_FILELIST); RegisterConditional(HKEY("COND:FILE:ISPIC"), 0, Conditional_FILE_ISPIC, CTX_FILELIST); - WebcitAddUrlHandler(HKEY("image"), output_image, ANONYMOUS); - WebcitAddUrlHandler(HKEY("display_mime_icon"), display_mime_icon , ANONYMOUS); - WebcitAddUrlHandler(HKEY("download_file"), download_file, NEED_URL); - WebcitAddUrlHandler(HKEY("delete_file"), delete_file, NEED_URL); - WebcitAddUrlHandler(HKEY("upload_file"), upload_file, 0); + WebcitAddUrlHandler(HKEY("image"), "", 0, output_image, ANONYMOUS); + WebcitAddUrlHandler(HKEY("display_mime_icon"), "", 0, display_mime_icon , ANONYMOUS); + WebcitAddUrlHandler(HKEY("download_file"), "", 0, download_file, NEED_URL); + WebcitAddUrlHandler(HKEY("delete_file"), "", 0, delete_file, NEED_URL); + WebcitAddUrlHandler(HKEY("upload_file"), "", 0, upload_file, 0); }