From kde-commits Mon Nov 13 20:55:19 2006 From: Tom Albers Date: Mon, 13 Nov 2006 20:55:19 +0000 To: kde-commits Subject: playground/pim/mailody Message-Id: <1163451319.192145.16721.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=116345134711364 SVN commit 604701 by toma: - Speed up for opening large mailboxes. I already wrote that the code was slow for threading; it had to determine if a message was Unseen, to determine if a thread should be open. This improves that part of the code. - prevent a popup when opening a mailbox with new mail. - use short date format in headerlist - update unseen count to 0 when mark all as read is used. This saves a round trip to the server to determine it. M +0 -1 TODO M +1 -1 src/db.cpp M +4 -1 src/imap.cpp M +13 -6 src/mainwindow.cpp M +1 -1 src/messagedata.h M +19 -1 src/tooltip.cpp M +29 -9 src/tooltip.h --- trunk/playground/pim/mailody/TODO #604700:604701 @@ -6,7 +6,6 @@ ------------------------------------ Notifications: -dont show the popup when it is the current mailbox [allee] make an area clickable to go to that mailbox [allee] ----------------------------------- --- trunk/playground/pim/mailody/src/db.cpp #604700:604701 @@ -397,7 +397,7 @@ if (mb == "*") getResult( "SELECT uid, mailbox, header FROM messages ", values ); else - getResult( QString("SELECT uid, mailbox, header FROM messages " + getResult( QString("SELECT uid, mailbox, header, flags FROM messages " "where mailbox = '%2'") .arg( escapeString(mb)), values ); } --- trunk/playground/pim/mailody/src/imap.cpp #604700:604701 @@ -436,6 +436,8 @@ headersToSend.append(rx.cap(1)); headersToSend.append(m_currentQueueItem.mailbox()); headersToSend.append(text); + headersToSend.append(m_db->getFlags(rx.cap(1).toInt(), + m_currentQueueItem.mailbox())); if (text.isEmpty()) text = "Message corrupt"; @@ -559,7 +561,8 @@ void Imap::moveMessage(const int uid, const QString& origbox, const QString& destbox) { - kdDebug() << "Move " << origbox << " - " << uid << " -> " << destbox << endl; + // kdDebug() << "Move " << origbox + // << " - " << uid << " -> " << destbox << endl; m_queue.append(Queue(Queue::Move, origbox, "UID COPY " + QString::number(uid) + " \"" + destbox+ "\"")); addFlag(uid, origbox, "\\Deleted"); --- trunk/playground/pim/mailody/src/mainwindow.cpp #604700:604701 @@ -482,8 +482,9 @@ const QStringList& values) { slotUpdateStatusBar(i18n("Opening %1").arg(mailbox)); - //kdDebug() << "SlotAddHeaderList called " << mailbox - // << " msg: " << values.count() << endl; + // kdDebug() << "SlotAddHeaderList called " << mailbox + // << " msg: " << values.count() + // << " time" << QDateTime::currentDateTime() << endl; MailBoxListViewItem* mbi = static_cast(m_mailboxList->currentItem()); @@ -503,6 +504,9 @@ QString headers = (*it); ++it; + QString flags = (*it); + ++it; + HeaderListViewItem* exists = m_headerMap[uid]; if (!exists || mbi->fullName() == "All") { @@ -514,7 +518,7 @@ { exists = new HeaderListViewItem(threadTo, r); // if this is a new item, make the parents open.... - if (r->isNew()) + if (!flags.contains("\\Seen")) { while (threadTo) { @@ -532,6 +536,8 @@ if (!m_headerList->selectedItems().count()) m_headerList->ensureItemVisible( m_headerList->lastItem()); + // kdDebug() << "done time" << QDateTime::currentDateTime() << endl; + m_searchLine->searchLine()->updateSearch(); slotClearStatusBar(); } @@ -572,6 +578,7 @@ QListViewItem* item = m_mailboxList->currentItem(); //kdDebug() << "slotCheckMailBox:" << item->text(0) << endl; slotOpenMailBox( item ); + m_tooltip->addToBlockList( ((MailBoxListViewItem*)item)->fullName() ); if (item != m_searchMailBox) m_connection->checkMailBox( retrieveMailboxName(item) ); @@ -956,7 +963,7 @@ if (KNotifyClient::getPresentation("newmail") & KNotifyClient::PassivePopup) - m_tooltip->setText(t); + m_tooltip->setText(mb->fullName(), t); else KNotifyClient::event(winId(), "newmail", t); } @@ -1119,6 +1126,7 @@ { m_connection->addFlag(mb->fullName(), "\\Seen"); m_headerList->triggerUpdate(); + mb->updateUnseen(0); } } @@ -1138,8 +1146,7 @@ QString destbox = i->fullName(); QString text; - if ( QTextDrag::decode( e, text ) ) - kdDebug() << text << " dropped on " << destbox << endl; + QTextDrag::decode( e, text ); QStringList movable = QStringList::split("\n", text); QStringList::Iterator it = movable.begin(); QMap origBoxesUsed; --- trunk/playground/pim/mailody/src/messagedata.h #604700:604701 @@ -150,7 +150,7 @@ /** Returns a QString with the date, which you can use to present to the user */ QString vDate() const { - return KGlobal::locale()->formatDateTime(m_date, false); } + return KGlobal::locale()->formatDateTime(m_date, true); } /** * Returns the name of the sender, including the emailaddress --- trunk/playground/pim/mailody/src/tooltip.cpp #604700:604701 @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -55,14 +56,31 @@ mText = new QLabel( vbox ); setView( hbox ); + + m_clearTimer = new QTimer( this ); + connect( m_clearTimer , SIGNAL(timeout()), SLOT(clearBlockList()) ); } ToolTip::~ToolTip() { } -void ToolTip::setText( const QString &text ) +void ToolTip::addToBlockList(const QString& mb) { + m_blockList[mb] = true; + m_clearTimer->start(10000, true); +} + +void ToolTip::clearBlockList() +{ + m_blockList.clear(); +} + +void ToolTip::setText( const QString &mb, const QString& text) +{ + if (m_blockList[mb]) + return; + if (isVisible()) mText->setText( mText->text() + " \n" + text ); else --- trunk/playground/pim/mailody/src/tooltip.h #604700:604701 @@ -34,17 +34,37 @@ */ class ToolTip : public KPassivePopup { - Q_OBJECT - public: - ToolTip( QWidget *parent = 0, const char *name = 0 ); - ~ToolTip(); + Q_OBJECT + public: + /** + * Constructor + */ + ToolTip( QWidget *parent = 0, const char *name = 0 ); - public slots: - /** Sets the tooltip to @param text */ - void setText( const QString &text); + /** + * Destruction + */ + ~ToolTip(); - private: - QLabel *mText; + /** + * Adds this mb to the blocklist. It will not popup for 10 seconds. + */ + void addToBlockList(const QString& mb); + + public slots: + /** + * Sets the tooltip to display @p text text + * But not when @p mb is on the block list + */ + void setText( const QString &mb, const QString &text); + + private: + QLabel *mText; + QTimer* m_clearTimer; + QMap m_blockList; + + private slots: + void clearBlockList(); }; }