]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/image/serv_image.c
update the comments in cmd_dlui() to match what I put on the wiki docs
[citadel.git] / citadel / modules / image / serv_image.c
index 36f6838db2720f2c4dd65ee77b908c41beb22d0f..3f327324f1fedb876306c677e3075c68e6434170 100644 (file)
 #include <dirent.h>
 
 
+
+/*
+ * DownLoad User Image (see their avatar or photo or whatever)
+ * If this command succeeds, it follows the same protocol as the DLAT command.
+ */
+void cmd_dlui(char *cmdbuf)
+{
+       struct ctdluser ruser;
+       char buf[SIZ];
+
+       extract_token(buf, cmdbuf, 0, '|', sizeof buf);
+       if (CtdlGetUser(&ruser, buf) != 0) {
+               cprintf("%d No such user.\n", ERROR + NO_SUCH_USER);
+               return;
+       }
+       if (ruser.msgnum_pic < 1) {
+               cprintf("%d No image found.\n", ERROR + FILE_NOT_FOUND);
+               return;
+       }
+
+       struct CtdlMessage *msg = CtdlFetchMessage(ruser.msgnum_pic, 1, 1);
+       if (msg != NULL) {
+               // The call to CtdlOutputPreLoadedMsg() with MT_SPEW_SECTION will cause the DLUI command
+               // to have the same output format as the DLAT command, because it calls the same code.
+               // For example: 600 402132|-1||image/gif|
+               safestrncpy(CC->download_desired_section, "1", sizeof CC->download_desired_section);
+               CtdlOutputPreLoadedMsg(msg, MT_SPEW_SECTION, HEADERS_NONE, 1, 0, 0);
+               CM_Free(msg);
+       }
+       else {
+               cprintf("%d No image found.\n", ERROR + MESSAGE_NOT_FOUND);
+               return;
+       }
+}
+
+
+
+
 /*
  * Import function called by import_old_userpic_files() for a single user
  */
@@ -40,6 +78,7 @@ void import_one_userpic_file(char *username, long usernum, char *path)
                        fread(unencoded_data, data_length, 1, fp);
                        char *encoded_data = malloc((data_length * 2) + 100);
                        if (encoded_data) {
+                               // FIXME try to guess the content-type based on the filename, don't assume GIF
                                sprintf(encoded_data, "Content-type: image/gif\nContent-transfer-encoding: base64\n\n");
                                CtdlEncodeBase64(&encoded_data[strlen(encoded_data)], unencoded_data, data_length, 1);
 
@@ -159,6 +198,7 @@ CTDL_MODULE_INIT(image)
        if (!threading)
        {
                import_old_userpic_files();
+               CtdlRegisterProtoHook(cmd_dlui, "DLUI", "DownLoad User Image");
        }
        /* return our module name for the log */
         return "image";