def listmailbox(request, defmailbox="INBOX", update_session=True): """Mailbox content listing. Return a list of messages contained in the specified mailbox. The number of elements returned depends on the ``MESSAGES_PER_PAGE`` parameter. (user preferences) :param request: a ``Request`` object :param defmailbox: the default mailbox (when not present inside request arguments) :return: a dictionnary """ navparams = WebmailNavigationParameters(request, defmailbox) previous_page_id = int(navparams["page"]) if "page" in navparams else None if update_session: navparams.store() mbox = navparams.get('mbox') page_id = int(navparams["page"]) mbc = get_imapconnector(request) mbc.parse_search_parameters(navparams.get("criteria"), navparams.get("pattern")) sort_order = navparams.get("order") paginator = Paginator( mbc.messages_count(folder=mbox, order=sort_order), request.user.parameters.get_value("messages_per_page")) page = paginator.getpage(page_id) content = "" if page is not None: email_list = mbc.fetch(page.id_start, page.id_stop, mbox) content = render_to_string( "modoboa_webmail/email_list.html", { "email_list": email_list, "page": page_id, "with_top_div": request.GET.get("scroll", "false") == "false" }, request) length = len(content) else: if page_id == 1: content = u"<div class='alert alert-info'>{0}</div>".format( _("Empty mailbox")) length = 0 if previous_page_id is not None: navparams["page"] = previous_page_id return { "listing": content, "length": length, "pages": [page_id], "menuargs": { "sort_order": sort_order } }
def get_listing_pages(request, connector): """Return listing pages.""" paginator = Paginator( connector.messages_count(), request.user.parameters.get_value("messages_per_page")) page_id = int(connector.navparams.get("page")) page = paginator.getpage(page_id) if not page: return None pages = [page] if not page.has_next and page.has_previous and page.items < 40: pages = [paginator.getpage(page_id - 1)] + pages email_list = [] for page in pages: email_list += connector.fetch(page.id_start, page.id_stop) return {"pages": [page.number for page in pages], "rows": email_list}
def get_listing_pages(request, connector): """Return listing pages.""" paginator = Paginator( connector.messages_count(), int(parameters.get_user(request.user, "MESSAGES_PER_PAGE")) ) page_id = int(connector.navparams.get("page")) page = paginator.getpage(page_id) if not page: return None pages = [page] if not page.has_next and page.has_previous and page.items < 40: pages = [paginator.getpage(page_id - 1)] + pages email_list = [] for page in pages: email_list += connector.fetch(page.id_start, page.id_stop) return {"pages": [page.number for page in pages], "rows": email_list}
def listmailbox(request, defmailbox="INBOX", update_session=True): """Mailbox content listing. Return a list of messages contained in the specified mailbox. The number of elements returned depends on the ``MESSAGES_PER_PAGE`` parameter. (user preferences) :param request: a ``Request`` object :param defmailbox: the default mailbox (when not present inside request arguments) :return: a dictionnary """ navparams = WebmailNavigationParameters(request, defmailbox) previous_page_id = int(navparams["page"]) if "page" in navparams else None if update_session: navparams.store() mbox = navparams.get('mbox') page_id = int(navparams["page"]) mbc = get_imapconnector(request) mbc.parse_search_parameters( navparams.get("criteria"), navparams.get("pattern")) paginator = Paginator( mbc.messages_count(folder=mbox, order=navparams.get("order")), int(parameters.get_user(request.user, "MESSAGES_PER_PAGE")) ) page = paginator.getpage(page_id) content = "" if page is not None: email_list = mbc.fetch(page.id_start, page.id_stop, mbox) content = _render_to_string( request, "modoboa_webmail/email_list.html", { "email_list": email_list, "page": page_id, "with_top_div": request.GET.get("scroll", "false") == "false" }) length = len(content) else: if page_id == 1: content = "<div class='alert alert-info'>{0}</div>".format( _("Empty mailbox") ) length = 0 if previous_page_id is not None: navparams["page"] = previous_page_id return {"listing": content, "length": length, "pages": [page_id]}