File: cmd_mark.c

package info (click to toggle)
prayer 1.3.5-dfsg1-8
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,596 kB
  • sloc: ansic: 43,163; makefile: 817; sh: 445; perl: 166
file content (62 lines) | stat: -rw-r--r-- 2,406 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* $Cambridge: hermes/src/prayer/cmd/cmd_mark.c,v 1.4 2008/09/17 17:20:25 dpc22 Exp $ */
/************************************************
 *    Prayer - a Webmail Interface              *
 ************************************************/

/* Copyright (c) University of Cambridge 2000 - 2008 */
/* See the file NOTICE for conditions of use and distribution. */

#include "prayer_session.h"

void cmd_mark(struct session *session)
{
    struct request *request = session->request;
    MAILSTREAM *stream = session->stream;

    if ((request->argc == 2) && (!strcmp(request->argv[1], "all"))) {
        struct msgmap *zm = session->zm;
        unsigned long count = zm->nmsgs - zm->marked;

        msgmap_mark_all(zm);
        if (count != 1)
            session_message(session, "Marked %lu messages", count);
        else
            session_message(session, "Marked 1 message");
    } else if ((request->argc == 4) && (!strcmp(request->argv[1], "read"))) {
        unsigned long msgno = atoi(request->argv[2]);
        unsigned long msguid = atoi(request->argv[3]);

        if (!(msgno = stream_check_uid(session, stream, msgno, msguid))) {
            session_redirect(session, request, "restart");
            return;
        }
        session->current = msgno;
        if (!ml_flag
            (session, stream, string_itoa_tmp(msgno), "\\SEEN", ST_SET)) {
            session_alert(session,
                          "Failed to mark message %lu as read: %s",
                          msgno, ml_errmsg());
            session_log(session,
                        "[cmd_mark] Failed to mark message number %lu as read: %s",
                        msgno, ml_errmsg());
            session_redirect(session, request, "restart");
            return;
        }
        session_message(session, "Marked message %lu as read", msgno);
    } else if (request->argc == 3) {
        unsigned long msgno = atoi(request->argv[1]);
        unsigned long msguid = atoi(request->argv[2]);

        if (!(msgno = stream_check_uid(session, stream, msgno, msguid))) {
            session_redirect(session, request, "restart");
            return;
        }

        if (msgmap_mark(session->zm, msgno))
            session_message(session, "Marked message %lu", msgno);
        else
            session_message(session, "Message %lu already marked", msgno);
    }

    session_redirect(session, request, "list");
}