def _render_list(self, req, db, flatmode, month): target_category = req.args.get('category', '') data = {} from model import MailFinder data['mls'], data['name'], data['year'], data['month'], target_category \ = MailFinder.get_categories(req, db, target_category) results = MailFinder.find_by_category(self.env, target_category.encode('utf-8')) #pagelize pagelized = self._pagelize_list(req, results, data) #Thanks http://d.hatena.ne.jp/ohgui/20090806/1249579406 data['reversemode'] = reversemode = (req.args.get('reversemode', 'off') == 'on') data['flatmode'] = flatmode mails_per_page, cached_mails = self._get_mails_per_page(pagelized, reversemode, flatmode) idstext = self._collect_ids(pagelized.items, flatmode) self.log.debug("Idtext: %s" % idstext) req.session['mailarc_mails'] = idstext req.session['mailarc_category_href'] = get_category_href(req, target_category) data['mails'] = mails_per_page data['cached_mails'] = cached_mails return 'mailarchive.html', data, None
def _get_mails_per_page(self, pagelized, reversemode, flatmode): mails_per_page = [] if flatmode: mails_per_page = [mail for mail in pagelized.items] if reversemode: mails_per_page.reverse() return mails_per_page, [] else: #ツリー表示のため、rootだけを集める root_mails = [] for mail in pagelized.items: root_mail = mail.get_thread_root() if root_mail in mails_per_page: #ルートの場合最後に登録し直すため一度削除する mails_per_page.remove(root_mail) mails_per_page.append(root_mail) if root_mail not in root_mails: root_mails.append(root_mail) #ルートから関連メールを全てキャッシュする root_messageids = [x.messageid for x in root_mails] from model import MailFinder cached_mails = MailFinder.find_thread_mails(self.env, root_messageids) if reversemode: mails_per_page.reverse() return mails_per_page, cached_mails
def do_updatedb(self, line): db = self.db_open() self.env = self.env_open() from model import MailFinder mails = MailFinder.find_not_root(self.env) cursor = db.cursor() for mail in mails: root_id = mail.get_thread_root().messageid sql = "UPDATE mailarc SET threadroot = %s WHERE messageid = %s" printout(_('root_id=%s, messageid=%s' % (root_id, mail.messageid))) if root_id == mail.messageid: #自分が親(親メッセージIDのメールがDBに存在しない)場合、更新しない continue cursor.execute(sql, (root_id, mail.messageid)) self.print_info('%s' % sql) db.commit()