X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fdownloads.c;h=60783c5685cad880b94c1f877dc821c473891218;hb=fb6f6fa4ec4e3277e30d84326d48e6850822d318;hp=137a6389dafb0e3951dc607c295d017ed9d3006c;hpb=23fcabeb4944b5e79e80a37127ed84ec8a639ed8;p=citadel.git diff --git a/webcit/downloads.c b/webcit/downloads.c index 137a6389d..60783c568 100644 --- a/webcit/downloads.c +++ b/webcit/downloads.c @@ -1,9 +1,20 @@ /* - * $Id$ + * 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" #include "webserver.h" +extern void output_static(const char* What); + extern char* static_dirs[]; typedef struct _FileListStruct { @@ -172,7 +183,7 @@ HashList* LoadFileList(StrBuf *Target, WCTemplputParams *TP) int sequence = 0; char buf[1024]; CompareFunc SortIt; - int HavePic; + int HavePic = 0; WCTemplputParams SubTP; memset(&SubTP, 0, sizeof(WCTemplputParams)); @@ -210,6 +221,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 +230,6 @@ HashList* LoadFileList(StrBuf *Target, WCTemplputParams *TP) else SortByPayload(Files, CompareFilelistBySequence); FreeStrBuf(&Buf); - svputlong("FILE:HAVEPICS", HavePic); return Files; } @@ -232,7 +244,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); @@ -281,20 +293,19 @@ void download_file(void) void delete_file(void) { const StrBuf *MimeType; - StrBuf *Buf; + StrBuf *Line; char buf[256]; safestrncpy(buf, bstr("file"), sizeof buf); unescape_input(buf); serv_printf("DELF %s", buf); - Buf = NewStrBuf(); - StrBuf_ServGetln(Buf); - GetServerStatus(Buf, NULL); - StrBufCutLeft(Buf, 4); - strcpy(WC->ImportantMessage, ChrPtr(Buf)); + + StrBuf_ServGetln(Line); + GetServerStatusMsg(Line, NULL, 1, 0); + MimeType = DoTemplate(HKEY("files"), NULL, &NoCtx); http_transmit_thing(ChrPtr(MimeType), 0); - FreeStrBuf(&Buf); + FreeStrBuf(&Line); } @@ -303,19 +314,26 @@ void upload_file(void) { const StrBuf *RetMimeType; const char *MimeType; - char buf[1024]; + StrBuf *Line; 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")); - serv_getln(buf, sizeof buf); - if (buf[0] != '2') - { - strcpy(WCC->ImportantMessage, &buf[4]); + + Desc = sbstr("description"); + + serv_printf("UOPN %s|%s|%s", + ChrPtr(WCC->upload_filename), + MimeType, + ChrPtr(Desc)); + Line = NewStrBuf(); + StrBuf_ServGetln(Line); + if (GetServerStatusMsg(Line, NULL, 1, 2) != 2) { RetMimeType = DoTemplate(HKEY("files"), NULL, &NoCtx); http_transmit_thing(ChrPtr(RetMimeType), 0); + FreeStrBuf(&Line); return; } @@ -327,20 +345,22 @@ void upload_file(void) blocksize = (WCC->upload_length - bytes_transmitted); } serv_printf("WRIT %ld", blocksize); - serv_getln(buf, sizeof buf); - if (buf[0] == '7') - { - blocksize = atoi(&buf[4]); + StrBuf_ServGetln(Line); + if (GetServerStatusMsg(Line, NULL, 0, 0) == 7) { + blocksize = atoi(ChrPtr(Line) + 4); serv_write(&ChrPtr(WCC->upload)[bytes_transmitted], blocksize); bytes_transmitted += blocksize; } + else + break; } serv_puts("UCLS 1"); - serv_getln(buf, sizeof buf); - strcpy(WCC->ImportantMessage, &buf[4]); + StrBuf_ServGetln(Line); + GetServerStatusMsg(Line, NULL, 1, 0); RetMimeType = DoTemplate(HKEY("files"), NULL, &NoCtx); http_transmit_thing(ChrPtr(RetMimeType), 0); + FreeStrBuf(&Line); } @@ -381,14 +401,17 @@ void output_image(void) } } /* hm... unknown mimetype? fallback to blank gif */ - } + } + else { + syslog(LOG_DEBUG, "OIMG failed: %s", ChrPtr(Buf)); + } /* * 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); }