File: cmd_change.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 (58 lines) | stat: -rw-r--r-- 2,025 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
/* $Cambridge: hermes/src/prayer/cmd/cmd_change.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_change(struct session *session)
{
    struct request *request = session->request;
    char *name;

    if (request->method == POST) {
        request_decode_form(request);

        if (!(name = utf8_to_imaputf7(request->pool, assoc_lookup(request->form, "folder")))) {
            session_redirect(session, request, "error");
            return;
        }
        string_canon_decode(name);
    } else if (request->argc < 2) {
        session_redirect(session, request, "error");
        return;
    } else {
        name = pool_strdup(session->pool, request->argv[1]);
        string_canon_decode(name);
    }

    if (!session_streams_change(session, name)) {
        session_alert(session, "Unable to switch to folder: %s",
                      utf8_from_imaputf7(request->pool, name));
        session_redirect(session, request, "restart");
        return;
    }

    if (!strcasecmp(name, "inbox")) {
        unsigned long msgno = stream_find_unread(session, session->stream);

        if (msgno > 0) {
            if (session->options->prefs->use_unread) {
                session->current = msgno;
                session->last_displayed = msgno;
            }
            session_message(session, "First unread message: %lu", msgno);
        } else
            session_message(session, "No unread messages in inbox");
    }

    session_message(session, "Switched to mailbox: %s",
                    utf8_from_imaputf7(request->pool, session->foldername));
    session_log(session, "[cmd_change] Switched to mailbox: %s",
                session->foldername);

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