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
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