Esempio n. 1
0
def show_mbox_thread(context, request):
    user = authenticated_userid(request)

    thread_id = request.params.get('thread_id', '')
    mbox_type = _get_mbox_type(request)

    mbt = MailboxTool()
    queues = []
    if mbt.has_queue(context, user, 'inbox', thread_id):
        inbox_q, _, _ = mbt.get_queue_data(context, user, 'inbox', thread_id)
        queues.append(inbox_q)
    if mbt.has_queue(context, user, 'sent', thread_id):
        sent_q, _, _ = mbt.get_queue_data(context, user, 'sent', thread_id)
        queues.append(sent_q)
    unread = mbt.get_unread(context, user, 'inbox')

    messages = []

    return_data = {}

    for q in queues:
        for msg_no in q._messages:
            msg_dict = {}
            raw_msg = q._messages[msg_no]
            raw_msg.flags.append(STATUS_READ)
            message = raw_msg.get()
            from_ = message['From']
            from_profile = request.api.find_profile(from_)

            msg_dict['queue_id'] = q.id
            msg_dict['message_id'] = raw_msg.message_id
            msg_dict['raw_date'] = message['Date']
            msg_dict['date'] = _format_date(context, message['Date'])
            msg_dict['subject'] = message['Subject']
            msg_dict['flags'] = raw_msg.flags

            msg_dict['from'] = from_
            if 'reply_recipients' not in return_data:
                return_data['reply_recipients'] = message['X-people-list'].split(",")
            msg_dict['from_photo'] = _user_photo_url(request, message['From'])
            msg_dict['from_firstname'] = from_profile.firstname
            msg_dict['from_lastname'] = from_profile.lastname
            msg_dict['from_country'] = from_profile.country
            msg_dict['from_organization'] = from_profile.organization
            msg_dict['payload'] = message.get_payload().decode('utf-8')

            to_data = []
            for name in sorted(_to_from_to_header(message)):
                to_datum = {}
                to_profile = request.api.find_profile(name)

                to_datum['name'] = name
                to_datum['firstname'] = to_profile.firstname
                to_datum['lastname'] = to_profile.lastname
                to_datum['photo_url'] = _user_photo_url(request, name)
                to_datum['country'] = to_profile.country
                to_data.append(to_datum)

            msg_dict['to_data'] = to_data

            messages.append(msg_dict)

    return_data['reply_recipients'].remove(user)

    messages.sort(key=itemgetter('raw_date'))

    return_data['profile'] = _get_profile_details(context, request, user)
    return_data['messages'] = messages
    return_data['api'] = request.api
    return_data['mbox_type'] = mbox_type
    return_data['unread'] = unread

    return return_data
Esempio n. 2
0
def show_mbox(context, request):
    user = authenticated_userid(request)

    page = request.params.get('page', 1)
    mbox_type = _get_mbox_type(request)

    if not page:
        page = 1

    try:
        page = int(page)
    except ValueError:
        page = 1

    if page < 1:
        page = 1

    mbt = MailboxTool()
    mbox_queues = mbt.get_queues(context, user, mbox_type)
    alternate_mbox_type = 'sent' if mbox_type == 'inbox' else 'inbox'
    unread = mbt.get_unread(context, user, 'inbox')

    pagination = Pagination(page, PER_PAGE, len(mbox_queues))

    # We always count lists from 0, unlike what people do.
    actual_page = page - 1

    # First page ..
    if actual_page == 0:
        start_idx = 0
        end_idx = PER_PAGE

    # .. last page ..
    if not pagination.has_next:
        start_idx = actual_page * PER_PAGE
        end_idx = pagination.total_count

    # .. anything in between
    else:
        start_idx = actual_page * PER_PAGE
        end_idx = (actual_page + 1) * PER_PAGE

    queues = []
    for mbox_q in mbox_queues[start_idx:end_idx]:
        queue = {}
        queue['id'] = mbox_q.id
        queue['name'] = mbox_q.name
        messages = list(mbox_q)
        if mbt.has_queue(context, user, alternate_mbox_type, queue['id']):
            alternate_queue, _, _ = mbt.get_queue_data(context, user,
                    alternate_mbox_type, queue['id'])
            messages += list(alternate_queue)

        sender_names = get_sender_names(request, user, messages)

        queue['total_messages'] = len(messages)
        queue['thread_from'] = ', '.join(sender_names)
        last_message = messages[queue['total_messages'] - 1]
        queue['thread_last_date'] = _format_date(context, last_message['Date'])
        queue['unread'] = mbox_q.get_unread()


        queues.append(queue)

    return_data = {}
    return_data['profile'] = _get_profile_details(context, request, user)
    return_data['queues'] = queues
    return_data['api'] = request.api
    return_data['mbox_type'] = mbox_type
    return_data['unread'] = unread
    return_data['page'] = page

    return return_data