diff options
author | Gregorio Guidi <greg_g@gentoo.org> | 2005-12-08 00:03:59 +0000 |
---|---|---|
committer | Gregorio Guidi <greg_g@gentoo.org> | 2005-12-08 00:03:59 +0000 |
commit | f146c61f1defc45a30b6b578746e757e60165fbc (patch) | |
tree | 2ef6e1059cbb052d056ce5f15222716300bd8ac4 /kde-base | |
parent | Stable on hppa. (diff) | |
download | historical-f146c61f1defc45a30b6b578746e757e60165fbc.tar.gz historical-f146c61f1defc45a30b6b578746e757e60165fbc.tar.bz2 historical-f146c61f1defc45a30b6b578746e757e60165fbc.zip |
New updates for kmail.
Package-Manager: portage-2.0.51.22-r3
Diffstat (limited to 'kde-base')
-rw-r--r-- | kde-base/kdepim/ChangeLog | 17 | ||||
-rw-r--r-- | kde-base/kdepim/files/digest-kdepim-3.5.0-r3 (renamed from kde-base/kdepim/files/digest-kdepim-3.5.0-r1) | 0 | ||||
-rw-r--r-- | kde-base/kdepim/files/kdepim-3.5.0-filter-crash.patch | 75 | ||||
-rw-r--r-- | kde-base/kdepim/files/kdepim-3.5.0-kmail-branch.patch | 288 | ||||
-rw-r--r-- | kde-base/kdepim/kdepim-3.5.0-r3.ebuild (renamed from kde-base/kdepim/kdepim-3.5.0-r1.ebuild) | 4 | ||||
-rw-r--r-- | kde-base/kmail/ChangeLog | 10 | ||||
-rw-r--r-- | kde-base/kmail/files/digest-kmail-3.5.0-r3 (renamed from kde-base/kmail/files/digest-kmail-3.5.0-r2) | 0 | ||||
-rw-r--r-- | kde-base/kmail/files/kdepim-3.5.0-filter-crash.patch | 135 | ||||
-rw-r--r-- | kde-base/kmail/files/kdepim-3.5.0-kmail-branch.patch | 288 | ||||
-rw-r--r-- | kde-base/kmail/kmail-3.5.0-r3.ebuild (renamed from kde-base/kmail/kmail-3.5.0-r2.ebuild) | 4 |
10 files changed, 605 insertions, 216 deletions
diff --git a/kde-base/kdepim/ChangeLog b/kde-base/kdepim/ChangeLog index 336cfc1dd305..d474c0e45214 100644 --- a/kde-base/kdepim/ChangeLog +++ b/kde-base/kdepim/ChangeLog @@ -1,10 +1,25 @@ # ChangeLog for kde-base/kdepim # Copyright 2002-2005 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/kde-base/kdepim/ChangeLog,v 1.185 2005/12/06 06:15:36 josejx Exp $ +# $Header: /var/cvsroot/gentoo-x86/kde-base/kdepim/ChangeLog,v 1.186 2005/12/08 00:03:59 greg_g Exp $ + +*kdepim-3.5.0-r3 (08 Dec 2005) + + 08 Dec 2005; Gregorio Guidi <greg_g@gentoo.org> + -files/kdepim-3.5.0-filter-crash.patch, + +files/kdepim-3.5.0-kmail-branch.patch, -kdepim-3.5.0-r1.ebuild, + +kdepim-3.5.0-r3.ebuild: + New updates for kmail. 06 Dec 2005; Joseph Jezak <josejx@gentoo.org> kdepim-3.4.3.ebuild: Marked ppc stable for bug #112842. +*kdepim-3.5.0-r2 (07 Dec 2005) + + 07 Dec 2005; Gregorio Guidi <greg_g@gentoo.org> + files/kdepim-3.5.0-filter-crash.patch, -kdepim-3.5.0-r1.ebuild, + +kdepim-3.5.0-r2.ebuild: + Update patch for crash when using filters (#114655). + *kdepim-3.5.0-r1 (05 Dec 2005) 05 Dec 2005; Gregorio Guidi <greg_g@gentoo.org> diff --git a/kde-base/kdepim/files/digest-kdepim-3.5.0-r1 b/kde-base/kdepim/files/digest-kdepim-3.5.0-r3 index 8cfd9db2e7e4..8cfd9db2e7e4 100644 --- a/kde-base/kdepim/files/digest-kdepim-3.5.0-r1 +++ b/kde-base/kdepim/files/digest-kdepim-3.5.0-r3 diff --git a/kde-base/kdepim/files/kdepim-3.5.0-filter-crash.patch b/kde-base/kdepim/files/kdepim-3.5.0-filter-crash.patch deleted file mode 100644 index 0120d7afc3a2..000000000000 --- a/kde-base/kdepim/files/kdepim-3.5.0-filter-crash.patch +++ /dev/null @@ -1,75 +0,0 @@ -diff -Nur kdepim-3.5.0.orig/kmail/kmcommands.cpp kdepim-3.5.0/kmail/kmcommands.cpp ---- kdepim-3.5.0.orig/kmail/kmcommands.cpp 2005-10-10 17:02:11.000000000 +0200 -+++ kdepim-3.5.0/kmail/kmcommands.cpp 2005-12-05 15:16:02.000000000 +0100 -@@ -1496,30 +1496,30 @@ - - void KMMetaFilterActionCommand::start() - { --#if 0 // use action scheduler -- KMFilterMgr::FilterSet set = KMFilterMgr::All; -- QPtrList<KMFilter> filters; -- filters.append( mFilter ); -- ActionScheduler *scheduler = new ActionScheduler( set, filters, mHeaders ); -- scheduler->setAlwaysMatch( true ); -- scheduler->setAutoDestruct( true ); -- -- int contentX, contentY; -- HeaderItem *nextItem = mHeaders->prepareMove( &contentX, &contentY ); -- QPtrList<KMMsgBase> msgList = *mHeaders->selectedMsgs(true); -- mHeaders->finalizeMove( nextItem, contentX, contentY ); -- -- -- for (KMMsgBase *msg = msgList.first(); msg; msg = msgList.next()) -- scheduler->execFilters( msg ); --#else -- KMCommand *filterCommand = new KMFilterActionCommand( mMainWidget, -- *mHeaders->selectedMsgs(), mFilter); -- filterCommand->start(); -- int contentX, contentY; -- HeaderItem *item = mHeaders->prepareMove( &contentX, &contentY ); -- mHeaders->finalizeMove( item, contentX, contentY ); --#endif -+ if (ActionScheduler::isEnabled() ) { -+ // use action scheduler -+ KMFilterMgr::FilterSet set = KMFilterMgr::All; -+ QValueList<KMFilter*> filters; -+ filters.append( mFilter ); -+ ActionScheduler *scheduler = new ActionScheduler( set, filters, mHeaders ); -+ scheduler->setAlwaysMatch( true ); -+ scheduler->setAutoDestruct( true ); -+ -+ int contentX, contentY; -+ HeaderItem *nextItem = mHeaders->prepareMove( &contentX, &contentY ); -+ QPtrList<KMMsgBase> msgList = *mHeaders->selectedMsgs(true); -+ mHeaders->finalizeMove( nextItem, contentX, contentY ); -+ -+ for (KMMsgBase *msg = msgList.first(); msg; msg = msgList.next()) -+ scheduler->execFilters( msg ); -+ } else { -+ KMCommand *filterCommand = new KMFilterActionCommand( mMainWidget, -+ *mHeaders->selectedMsgs(), mFilter); -+ filterCommand->start(); -+ int contentX, contentY; -+ HeaderItem *item = mHeaders->prepareMove( &contentX, &contentY ); -+ mHeaders->finalizeMove( item, contentX, contentY ); -+ } - } - - FolderShortcutCommand::FolderShortcutCommand( KMMainWidget *mainwidget, -diff -Nur kdepim-3.5.0.orig/kmail/kmkernel.cpp kdepim-3.5.0/kmail/kmkernel.cpp ---- kdepim-3.5.0.orig/kmail/kmkernel.cpp 2005-11-08 23:33:29.000000000 +0100 -+++ kdepim-3.5.0/kmail/kmkernel.cpp 2005-12-05 15:16:02.000000000 +0100 -@@ -1432,11 +1432,11 @@ - the_msgIndex = 0; - #endif - --#if 0 -+//#if 0 - the_weaver = new KPIM::ThreadWeaver::Weaver( this ); - the_weaverLogger = new KPIM::ThreadWeaver::WeaverThreadLogger(this); - the_weaverLogger->attach (the_weaver); --#endif -+//#endif - - connect( the_folderMgr, SIGNAL( folderRemoved(KMFolder*) ), - this, SIGNAL( folderRemoved(KMFolder*) ) ); diff --git a/kde-base/kdepim/files/kdepim-3.5.0-kmail-branch.patch b/kde-base/kdepim/files/kdepim-3.5.0-kmail-branch.patch new file mode 100644 index 000000000000..88d6aaa49f40 --- /dev/null +++ b/kde-base/kdepim/files/kdepim-3.5.0-kmail-branch.patch @@ -0,0 +1,288 @@ +diff -Nur kdepim-3.5.0.orig/kmail/actionscheduler.cpp kdepim-3.5.0/kmail/actionscheduler.cpp +--- kdepim-3.5.0.orig/kmail/actionscheduler.cpp 2005-09-10 10:24:02.000000000 +0200 ++++ kdepim-3.5.0/kmail/actionscheduler.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -570,7 +570,7 @@ + (!mAccount || + (mAccount && (*mFilterIt).applyOnAccount(mAccountId)))) || + ((mSet & KMFilterMgr::Explicit) && (*mFilterIt).applyOnExplicit())) { +- ++ + // filter is applicable + if ( FilterLog::instance()->isLogging() ) { + QString logText( i18n( "<b>Evaluating filter rules:</b> " ) ); +@@ -646,8 +646,11 @@ + if (!orgMsg || !orgMsg->parent()) { + // Original message is gone, no point filtering it anymore + mSrcFolder->removeMsg( mSrcFolder->find( msg ) ); ++ kdDebug(5006) << "The original serial number is missing. " ++ << "Cannot complete the filtering." << endl; + mExecutingLock = false; + processMessageTimer->start( 0, true ); ++ return; + } else { + if (!folder) // no filter folder specified leave in current place + folder = orgMsg->parent(); +@@ -659,7 +662,7 @@ + mSrcFolder->addMsg( msg ); + mIgnore = false; + +- if (msg && kmkernel->folderIsTrash( folder )) ++ if (msg && folder && kmkernel->folderIsTrash( folder )) + KMFilterAction::sendMDN( msg, KMime::MDN::Deleted ); + + timeOutTime = QTime::currentTime(); +@@ -722,8 +725,6 @@ + + void ActionScheduler::copyMessageFinished( KMCommand *command ) + { +- // FIXME remove the debug output +- kdDebug(5006) << "##### ActionScheduler::copyMessageFinished( KMCommand *command )" << endl; + if ( command->result() != KMCommand::OK ) + actionMessage( KMFilterAction::ErrorButGoOn ); + else +@@ -803,4 +804,11 @@ + return sEnabled; + } + ++bool ActionScheduler::ignoreChanges( bool ignore ) ++{ ++ bool oldValue = mIgnore; ++ mIgnore = ignore; ++ return oldValue; ++} ++ + #include "actionscheduler.moc" +diff -Nur kdepim-3.5.0.orig/kmail/actionscheduler.h kdepim-3.5.0/kmail/actionscheduler.h +--- kdepim-3.5.0.orig/kmail/actionscheduler.h 2005-09-10 10:24:02.000000000 +0200 ++++ kdepim-3.5.0/kmail/actionscheduler.h 2005-12-07 23:34:28.000000000 +0100 +@@ -77,10 +77,10 @@ + of messages left to process is empty */ + void setFilterList( QValueList<KMFilter*> filters ); + +- /* Set the id of the account associated with this scheduler */ ++ /** Set the id of the account associated with this scheduler */ + void setAccountId( uint id ) { mAccountId = id; mAccount = true; } + +- /* Clear the id of the account associated with this scheduler */ ++ /** Clear the id of the account associated with this scheduler */ + void clearAccountId() { mAccountId = 0; mAccount = false; } + + /** Queue a message for filtering */ +@@ -88,9 +88,16 @@ + void execFilters(const QPtrList<KMMsgBase> msgList); + void execFilters(KMMsgBase* msgBase); + void execFilters(Q_UINT32 serNum); ++ + static QString debug(); + static bool isEnabled(); + ++ /** Allow or deny manipulations on the message to be filtered. ++ This is needed when using pipe-through filters, because the ++ changes made by the filter have to be written back. ++ The old value before applying the new value is returned. */ ++ bool ignoreChanges( bool ignore ); ++ + signals: + /** Emitted when filtering is completed */ + void result(ReturnCode); +diff -Nur kdepim-3.5.0.orig/kmail/kmcommands.cpp kdepim-3.5.0/kmail/kmcommands.cpp +--- kdepim-3.5.0.orig/kmail/kmcommands.cpp 2005-10-10 17:02:11.000000000 +0200 ++++ kdepim-3.5.0/kmail/kmcommands.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -1464,15 +1464,20 @@ + + KMCommand::Result KMFilterActionCommand::execute() + { ++ KCursorSaver busy( KBusyPtr::busy() ); + QPtrList<KMMessage> msgList = retrievedMsgs(); + + for (KMMessage *msg = msgList.first(); msg; msg = msgList.next()) + if( msg->parent() ) + kmkernel->filterMgr()->tempOpenFolder(msg->parent()); + ++ int counter = 0; + for (KMMessage *msg = msgList.first(); msg; msg = msgList.next()) { + msg->setTransferInProgress(false); + ++ if ( !( ++counter % 20 ) ) ++ KApplication::kApplication()->processEvents( 50 ); ++ + int filterResult = kmkernel->filterMgr()->process(msg, mFilter); + if (filterResult == 2) { + // something went horribly wrong (out of space?) +@@ -1496,30 +1501,30 @@ + + void KMMetaFilterActionCommand::start() + { +-#if 0 // use action scheduler +- KMFilterMgr::FilterSet set = KMFilterMgr::All; +- QPtrList<KMFilter> filters; +- filters.append( mFilter ); +- ActionScheduler *scheduler = new ActionScheduler( set, filters, mHeaders ); +- scheduler->setAlwaysMatch( true ); +- scheduler->setAutoDestruct( true ); +- +- int contentX, contentY; +- HeaderItem *nextItem = mHeaders->prepareMove( &contentX, &contentY ); +- QPtrList<KMMsgBase> msgList = *mHeaders->selectedMsgs(true); +- mHeaders->finalizeMove( nextItem, contentX, contentY ); +- +- +- for (KMMsgBase *msg = msgList.first(); msg; msg = msgList.next()) +- scheduler->execFilters( msg ); +-#else +- KMCommand *filterCommand = new KMFilterActionCommand( mMainWidget, +- *mHeaders->selectedMsgs(), mFilter); +- filterCommand->start(); +- int contentX, contentY; +- HeaderItem *item = mHeaders->prepareMove( &contentX, &contentY ); +- mHeaders->finalizeMove( item, contentX, contentY ); +-#endif ++ if (ActionScheduler::isEnabled() ) { ++ // use action scheduler ++ KMFilterMgr::FilterSet set = KMFilterMgr::All; ++ QValueList<KMFilter*> filters; ++ filters.append( mFilter ); ++ ActionScheduler *scheduler = new ActionScheduler( set, filters, mHeaders ); ++ scheduler->setAlwaysMatch( true ); ++ scheduler->setAutoDestruct( true ); ++ ++ int contentX, contentY; ++ HeaderItem *nextItem = mHeaders->prepareMove( &contentX, &contentY ); ++ QPtrList<KMMsgBase> msgList = *mHeaders->selectedMsgs(true); ++ mHeaders->finalizeMove( nextItem, contentX, contentY ); ++ ++ for (KMMsgBase *msg = msgList.first(); msg; msg = msgList.next()) ++ scheduler->execFilters( msg ); ++ } else { ++ KMCommand *filterCommand = new KMFilterActionCommand( mMainWidget, ++ *mHeaders->selectedMsgs(), mFilter); ++ filterCommand->start(); ++ int contentX, contentY; ++ HeaderItem *item = mHeaders->prepareMove( &contentX, &contentY ); ++ mHeaders->finalizeMove( item, contentX, contentY ); ++ } + } + + FolderShortcutCommand::FolderShortcutCommand( KMMainWidget *mainwidget, +diff -Nur kdepim-3.5.0.orig/kmail/kmfilteraction.cpp kdepim-3.5.0/kmail/kmfilteraction.cpp +--- kdepim-3.5.0.orig/kmail/kmfilteraction.cpp 2005-09-10 10:24:02.000000000 +0200 ++++ kdepim-3.5.0/kmail/kmfilteraction.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -1617,6 +1617,9 @@ + FILE *p; + QByteArray ba; + ++ // backup the serial number in case the header gets lost ++ QString origSerNum = mMsg->headerField( "X-KMail-Filtered" ); ++ + p = popen(QFile::encodeName(mCmd), "r"); + int len =100; + char buffer[100]; +@@ -1630,7 +1633,20 @@ + pclose(p); + if ( !ba.isEmpty() ) { + KPIM::ThreadWeaver::debug (1, "PipeJob::run: %s", QString(ba).latin1() ); ++ KMFolder *filterFolder = mMsg->parent(); ++ ActionScheduler *handler = MessageProperty::filterHandler( mMsg->getMsgSerNum() ); ++ + mMsg->fromByteArray( ba ); ++ if ( !origSerNum.isEmpty() ) ++ mMsg->setHeaderField( "X-KMail-Filtered", origSerNum ); ++ if ( filterFolder && handler ) { ++ bool oldStatus = handler->ignoreChanges( true ); ++ filterFolder->take( filterFolder->find( mMsg ) ); ++ filterFolder->addMsg( mMsg ); ++ handler->ignoreChanges( oldStatus ); ++ } else { ++ kdDebug(5006) << "Warning: Cannot refresh the message from the external filter." << endl; ++ } + } + + KPIM::ThreadWeaver::debug (1, "PipeJob::run: done.\n" ); +diff -Nur kdepim-3.5.0.orig/kmail/kmfolder.cpp kdepim-3.5.0/kmail/kmfolder.cpp +--- kdepim-3.5.0.orig/kmail/kmfolder.cpp 2005-11-19 11:56:46.000000000 +0100 ++++ kdepim-3.5.0/kmail/kmfolder.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -263,8 +263,13 @@ + } + } + +- mChild = new KMFolderDir( this, parent(), childName, +- (folderType() == KMFolderTypeImap) ? KMImapDir : KMStandardDir); ++ KMFolderDirType newType = KMStandardDir; ++ if( folderType() == KMFolderTypeCachedImap ) ++ newType = KMDImapDir; ++ else if( folderType() == KMFolderTypeImap ) ++ newType = KMImapDir; ++ ++ mChild = new KMFolderDir( this, parent(), childName, newType ); + if( !mChild ) + return 0; + mChild->reload(); +diff -Nur kdepim-3.5.0.orig/kmail/kmheaders.cpp kdepim-3.5.0/kmail/kmheaders.cpp +--- kdepim-3.5.0.orig/kmail/kmheaders.cpp 2005-10-10 17:02:11.000000000 +0200 ++++ kdepim-3.5.0/kmail/kmheaders.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -1339,7 +1339,11 @@ + CREATE_TIMER(filter); + START_TIMER(filter); + ++ KCursorSaver busy( KBusyPtr::busy() ); ++ int counter = 0; + for (KMMsgBase* msgBase=msgList->first(); msgBase; msgBase=msgList->next()) { ++ if ( !( ++counter % 20 ) ) ++ KApplication::kApplication()->processEvents( 50 ); + int idx = msgBase->parent()->find(msgBase); + assert(idx != -1); + KMMessage * msg = msgBase->parent()->getMsg(idx); +diff -Nur kdepim-3.5.0.orig/kmail/kmkernel.cpp kdepim-3.5.0/kmail/kmkernel.cpp +--- kdepim-3.5.0.orig/kmail/kmkernel.cpp 2005-11-08 23:33:29.000000000 +0100 ++++ kdepim-3.5.0/kmail/kmkernel.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -1432,11 +1432,11 @@ + the_msgIndex = 0; + #endif + +-#if 0 ++//#if 0 + the_weaver = new KPIM::ThreadWeaver::Weaver( this ); + the_weaverLogger = new KPIM::ThreadWeaver::WeaverThreadLogger(this); + the_weaverLogger->attach (the_weaver); +-#endif ++//#endif + + connect( the_folderMgr, SIGNAL( folderRemoved(KMFolder*) ), + this, SIGNAL( folderRemoved(KMFolder*) ) ); +diff -Nur kdepim-3.5.0.orig/kmail/kmmainwidget.cpp kdepim-3.5.0/kmail/kmmainwidget.cpp +--- kdepim-3.5.0.orig/kmail/kmmainwidget.cpp 2005-10-10 17:02:11.000000000 +0200 ++++ kdepim-3.5.0/kmail/kmmainwidget.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -1644,11 +1644,11 @@ + { + if ( GlobalSettings::self()->networkState() == GlobalSettings::EnumNetworkState::Online ) { + // if online; then toggle and set it offline. +- actionCollection()->action( "online_status" )->setText( i18n("Network State (online)") ); ++ actionCollection()->action( "online_status" )->setText( i18n("Go Online") ); + kmkernel->stopNetworkJobs(); + BroadcastStatus::instance()->setStatusMsg( i18n("KMail is set to be offline; all network jobs are suspended")); + } else { +- actionCollection()->action( "online_status" )->setText( i18n("Network State (offline)") ); ++ actionCollection()->action( "online_status" )->setText( i18n("Go Offline") ); + kmkernel->resumeNetworkJobs(); + BroadcastStatus::instance()->setStatusMsg( i18n("KMail is set to be online; all network jobs resumed")); + } +@@ -3000,9 +3000,9 @@ + actionCollection()->action( "send_queued" )->setEnabled( kmkernel->outboxFolder()->count() > 0 ); + actionCollection()->action( "send_queued_via" )->setEnabled( kmkernel->outboxFolder()->count() > 0 ); + if ( GlobalSettings::self()->networkState() == GlobalSettings::EnumNetworkState::Online ) +- actionCollection()->action( "online_status" )->setText( i18n("Network State (offline)") ); ++ actionCollection()->action( "online_status" )->setText( i18n("Go Offline") ); + else +- actionCollection()->action( "online_status" )->setText( i18n("Network State (online)") ); ++ actionCollection()->action( "online_status" )->setText( i18n("Go Online") ); + if (action( "edit_undo" )) + action( "edit_undo" )->setEnabled( mHeaders->canUndo() ); + +@@ -3311,6 +3311,7 @@ + if(!addedSeparator) { + mApplyFilterActionsMenu->popupMenu()->insertSeparator(); + addedSeparator = !addedSeparator; ++ mFilterMenuActions.append( new KActionSeparator()); + } + filterAction->plug( mApplyFilterActionsMenu->popupMenu() ); + mFilterMenuActions.append(filterAction); diff --git a/kde-base/kdepim/kdepim-3.5.0-r1.ebuild b/kde-base/kdepim/kdepim-3.5.0-r3.ebuild index 50fdaff2871c..b6ea609c8228 100644 --- a/kde-base/kdepim/kdepim-3.5.0-r1.ebuild +++ b/kde-base/kdepim/kdepim-3.5.0-r3.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2005 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/kde-base/kdepim/kdepim-3.5.0-r1.ebuild,v 1.1 2005/12/05 16:44:06 greg_g Exp $ +# $Header: /var/cvsroot/gentoo-x86/kde-base/kdepim/kdepim-3.5.0-r3.ebuild,v 1.1 2005/12/08 00:03:59 greg_g Exp $ inherit kde-dist @@ -19,7 +19,7 @@ src_unpack() { kde_src_unpack # Fix crash when applying filters (kde bug 113730). applied for 3.5.1. - epatch "${FILESDIR}/${P}-filter-crash.patch" + epatch "${FILESDIR}/${P}-kmail-branch.patch" } src_compile() { diff --git a/kde-base/kmail/ChangeLog b/kde-base/kmail/ChangeLog index 33ecd412b26d..971676a0d73c 100644 --- a/kde-base/kmail/ChangeLog +++ b/kde-base/kmail/ChangeLog @@ -1,6 +1,14 @@ # ChangeLog for kde-base/kmail # Copyright 1999-2005 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/kde-base/kmail/ChangeLog,v 1.44 2005/12/07 15:10:00 greg_g Exp $ +# $Header: /var/cvsroot/gentoo-x86/kde-base/kmail/ChangeLog,v 1.45 2005/12/08 00:00:32 greg_g Exp $ + +*kmail-3.5.0-r3 (07 Dec 2005) + + 07 Dec 2005; Gregorio Guidi <greg_g@gentoo.org> + -files/kdepim-3.5.0-filter-crash.patch, + +files/kdepim-3.5.0-kmail-branch.patch, -kmail-3.5.0-r2.ebuild, + +kmail-3.5.0-r3.ebuild: + New updates for kmail. *kmail-3.5.0-r2 (07 Dec 2005) diff --git a/kde-base/kmail/files/digest-kmail-3.5.0-r2 b/kde-base/kmail/files/digest-kmail-3.5.0-r3 index 8cfd9db2e7e4..8cfd9db2e7e4 100644 --- a/kde-base/kmail/files/digest-kmail-3.5.0-r2 +++ b/kde-base/kmail/files/digest-kmail-3.5.0-r3 diff --git a/kde-base/kmail/files/kdepim-3.5.0-filter-crash.patch b/kde-base/kmail/files/kdepim-3.5.0-filter-crash.patch deleted file mode 100644 index 90193e24574d..000000000000 --- a/kde-base/kmail/files/kdepim-3.5.0-filter-crash.patch +++ /dev/null @@ -1,135 +0,0 @@ -diff -Nur kdepim-3.5.0.orig/kmail/actionscheduler.cpp kdepim-3.5.0/kmail/actionscheduler.cpp ---- kdepim-3.5.0.orig/kmail/actionscheduler.cpp 2005-09-10 10:24:02.000000000 +0200 -+++ kdepim-3.5.0/kmail/actionscheduler.cpp 2005-12-07 14:48:06.000000000 +0100 -@@ -570,7 +570,7 @@ - (!mAccount || - (mAccount && (*mFilterIt).applyOnAccount(mAccountId)))) || - ((mSet & KMFilterMgr::Explicit) && (*mFilterIt).applyOnExplicit())) { -- -+ - // filter is applicable - if ( FilterLog::instance()->isLogging() ) { - QString logText( i18n( "<b>Evaluating filter rules:</b> " ) ); -@@ -646,8 +646,11 @@ - if (!orgMsg || !orgMsg->parent()) { - // Original message is gone, no point filtering it anymore - mSrcFolder->removeMsg( mSrcFolder->find( msg ) ); -+ kdDebug(5006) << "The original serial number is missing. " -+ << "Cannot complete the filtering." << endl; - mExecutingLock = false; - processMessageTimer->start( 0, true ); -+ return; - } else { - if (!folder) // no filter folder specified leave in current place - folder = orgMsg->parent(); -@@ -659,7 +662,7 @@ - mSrcFolder->addMsg( msg ); - mIgnore = false; - -- if (msg && kmkernel->folderIsTrash( folder )) -+ if (msg && folder && kmkernel->folderIsTrash( folder )) - KMFilterAction::sendMDN( msg, KMime::MDN::Deleted ); - - timeOutTime = QTime::currentTime(); -@@ -722,8 +725,6 @@ - - void ActionScheduler::copyMessageFinished( KMCommand *command ) - { -- // FIXME remove the debug output -- kdDebug(5006) << "##### ActionScheduler::copyMessageFinished( KMCommand *command )" << endl; - if ( command->result() != KMCommand::OK ) - actionMessage( KMFilterAction::ErrorButGoOn ); - else -diff -Nur kdepim-3.5.0.orig/kmail/kmcommands.cpp kdepim-3.5.0/kmail/kmcommands.cpp ---- kdepim-3.5.0.orig/kmail/kmcommands.cpp 2005-10-10 17:02:11.000000000 +0200 -+++ kdepim-3.5.0/kmail/kmcommands.cpp 2005-12-05 15:16:02.000000000 +0100 -@@ -1496,30 +1496,30 @@ - - void KMMetaFilterActionCommand::start() - { --#if 0 // use action scheduler -- KMFilterMgr::FilterSet set = KMFilterMgr::All; -- QPtrList<KMFilter> filters; -- filters.append( mFilter ); -- ActionScheduler *scheduler = new ActionScheduler( set, filters, mHeaders ); -- scheduler->setAlwaysMatch( true ); -- scheduler->setAutoDestruct( true ); -- -- int contentX, contentY; -- HeaderItem *nextItem = mHeaders->prepareMove( &contentX, &contentY ); -- QPtrList<KMMsgBase> msgList = *mHeaders->selectedMsgs(true); -- mHeaders->finalizeMove( nextItem, contentX, contentY ); -- -- -- for (KMMsgBase *msg = msgList.first(); msg; msg = msgList.next()) -- scheduler->execFilters( msg ); --#else -- KMCommand *filterCommand = new KMFilterActionCommand( mMainWidget, -- *mHeaders->selectedMsgs(), mFilter); -- filterCommand->start(); -- int contentX, contentY; -- HeaderItem *item = mHeaders->prepareMove( &contentX, &contentY ); -- mHeaders->finalizeMove( item, contentX, contentY ); --#endif -+ if (ActionScheduler::isEnabled() ) { -+ // use action scheduler -+ KMFilterMgr::FilterSet set = KMFilterMgr::All; -+ QValueList<KMFilter*> filters; -+ filters.append( mFilter ); -+ ActionScheduler *scheduler = new ActionScheduler( set, filters, mHeaders ); -+ scheduler->setAlwaysMatch( true ); -+ scheduler->setAutoDestruct( true ); -+ -+ int contentX, contentY; -+ HeaderItem *nextItem = mHeaders->prepareMove( &contentX, &contentY ); -+ QPtrList<KMMsgBase> msgList = *mHeaders->selectedMsgs(true); -+ mHeaders->finalizeMove( nextItem, contentX, contentY ); -+ -+ for (KMMsgBase *msg = msgList.first(); msg; msg = msgList.next()) -+ scheduler->execFilters( msg ); -+ } else { -+ KMCommand *filterCommand = new KMFilterActionCommand( mMainWidget, -+ *mHeaders->selectedMsgs(), mFilter); -+ filterCommand->start(); -+ int contentX, contentY; -+ HeaderItem *item = mHeaders->prepareMove( &contentX, &contentY ); -+ mHeaders->finalizeMove( item, contentX, contentY ); -+ } - } - - FolderShortcutCommand::FolderShortcutCommand( KMMainWidget *mainwidget, -diff -Nur kdepim-3.5.0.orig/kmail/kmfilteraction.cpp kdepim-3.5.0/kmail/kmfilteraction.cpp ---- kdepim-3.5.0.orig/kmail/kmfilteraction.cpp 2005-09-10 10:24:02.000000000 +0200 -+++ kdepim-3.5.0/kmail/kmfilteraction.cpp 2005-12-07 14:48:06.000000000 +0100 -@@ -1630,7 +1630,14 @@ - pclose(p); - if ( !ba.isEmpty() ) { - KPIM::ThreadWeaver::debug (1, "PipeJob::run: %s", QString(ba).latin1() ); -+ KMFolder *filterFolder = mMsg->parent(); - mMsg->fromByteArray( ba ); -+ if ( filterFolder ) { -+ filterFolder->take( filterFolder->find( mMsg ) ); -+ filterFolder->addMsg( mMsg ); -+ } else { -+ kdDebug(5006) << "Warning: Cannot refresh the message from the external filter." << endl; -+ } - } - - KPIM::ThreadWeaver::debug (1, "PipeJob::run: done.\n" ); -diff -Nur kdepim-3.5.0.orig/kmail/kmkernel.cpp kdepim-3.5.0/kmail/kmkernel.cpp ---- kdepim-3.5.0.orig/kmail/kmkernel.cpp 2005-11-08 23:33:29.000000000 +0100 -+++ kdepim-3.5.0/kmail/kmkernel.cpp 2005-12-05 15:16:02.000000000 +0100 -@@ -1432,11 +1432,11 @@ - the_msgIndex = 0; - #endif - --#if 0 -+//#if 0 - the_weaver = new KPIM::ThreadWeaver::Weaver( this ); - the_weaverLogger = new KPIM::ThreadWeaver::WeaverThreadLogger(this); - the_weaverLogger->attach (the_weaver); --#endif -+//#endif - - connect( the_folderMgr, SIGNAL( folderRemoved(KMFolder*) ), - this, SIGNAL( folderRemoved(KMFolder*) ) ); diff --git a/kde-base/kmail/files/kdepim-3.5.0-kmail-branch.patch b/kde-base/kmail/files/kdepim-3.5.0-kmail-branch.patch new file mode 100644 index 000000000000..88d6aaa49f40 --- /dev/null +++ b/kde-base/kmail/files/kdepim-3.5.0-kmail-branch.patch @@ -0,0 +1,288 @@ +diff -Nur kdepim-3.5.0.orig/kmail/actionscheduler.cpp kdepim-3.5.0/kmail/actionscheduler.cpp +--- kdepim-3.5.0.orig/kmail/actionscheduler.cpp 2005-09-10 10:24:02.000000000 +0200 ++++ kdepim-3.5.0/kmail/actionscheduler.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -570,7 +570,7 @@ + (!mAccount || + (mAccount && (*mFilterIt).applyOnAccount(mAccountId)))) || + ((mSet & KMFilterMgr::Explicit) && (*mFilterIt).applyOnExplicit())) { +- ++ + // filter is applicable + if ( FilterLog::instance()->isLogging() ) { + QString logText( i18n( "<b>Evaluating filter rules:</b> " ) ); +@@ -646,8 +646,11 @@ + if (!orgMsg || !orgMsg->parent()) { + // Original message is gone, no point filtering it anymore + mSrcFolder->removeMsg( mSrcFolder->find( msg ) ); ++ kdDebug(5006) << "The original serial number is missing. " ++ << "Cannot complete the filtering." << endl; + mExecutingLock = false; + processMessageTimer->start( 0, true ); ++ return; + } else { + if (!folder) // no filter folder specified leave in current place + folder = orgMsg->parent(); +@@ -659,7 +662,7 @@ + mSrcFolder->addMsg( msg ); + mIgnore = false; + +- if (msg && kmkernel->folderIsTrash( folder )) ++ if (msg && folder && kmkernel->folderIsTrash( folder )) + KMFilterAction::sendMDN( msg, KMime::MDN::Deleted ); + + timeOutTime = QTime::currentTime(); +@@ -722,8 +725,6 @@ + + void ActionScheduler::copyMessageFinished( KMCommand *command ) + { +- // FIXME remove the debug output +- kdDebug(5006) << "##### ActionScheduler::copyMessageFinished( KMCommand *command )" << endl; + if ( command->result() != KMCommand::OK ) + actionMessage( KMFilterAction::ErrorButGoOn ); + else +@@ -803,4 +804,11 @@ + return sEnabled; + } + ++bool ActionScheduler::ignoreChanges( bool ignore ) ++{ ++ bool oldValue = mIgnore; ++ mIgnore = ignore; ++ return oldValue; ++} ++ + #include "actionscheduler.moc" +diff -Nur kdepim-3.5.0.orig/kmail/actionscheduler.h kdepim-3.5.0/kmail/actionscheduler.h +--- kdepim-3.5.0.orig/kmail/actionscheduler.h 2005-09-10 10:24:02.000000000 +0200 ++++ kdepim-3.5.0/kmail/actionscheduler.h 2005-12-07 23:34:28.000000000 +0100 +@@ -77,10 +77,10 @@ + of messages left to process is empty */ + void setFilterList( QValueList<KMFilter*> filters ); + +- /* Set the id of the account associated with this scheduler */ ++ /** Set the id of the account associated with this scheduler */ + void setAccountId( uint id ) { mAccountId = id; mAccount = true; } + +- /* Clear the id of the account associated with this scheduler */ ++ /** Clear the id of the account associated with this scheduler */ + void clearAccountId() { mAccountId = 0; mAccount = false; } + + /** Queue a message for filtering */ +@@ -88,9 +88,16 @@ + void execFilters(const QPtrList<KMMsgBase> msgList); + void execFilters(KMMsgBase* msgBase); + void execFilters(Q_UINT32 serNum); ++ + static QString debug(); + static bool isEnabled(); + ++ /** Allow or deny manipulations on the message to be filtered. ++ This is needed when using pipe-through filters, because the ++ changes made by the filter have to be written back. ++ The old value before applying the new value is returned. */ ++ bool ignoreChanges( bool ignore ); ++ + signals: + /** Emitted when filtering is completed */ + void result(ReturnCode); +diff -Nur kdepim-3.5.0.orig/kmail/kmcommands.cpp kdepim-3.5.0/kmail/kmcommands.cpp +--- kdepim-3.5.0.orig/kmail/kmcommands.cpp 2005-10-10 17:02:11.000000000 +0200 ++++ kdepim-3.5.0/kmail/kmcommands.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -1464,15 +1464,20 @@ + + KMCommand::Result KMFilterActionCommand::execute() + { ++ KCursorSaver busy( KBusyPtr::busy() ); + QPtrList<KMMessage> msgList = retrievedMsgs(); + + for (KMMessage *msg = msgList.first(); msg; msg = msgList.next()) + if( msg->parent() ) + kmkernel->filterMgr()->tempOpenFolder(msg->parent()); + ++ int counter = 0; + for (KMMessage *msg = msgList.first(); msg; msg = msgList.next()) { + msg->setTransferInProgress(false); + ++ if ( !( ++counter % 20 ) ) ++ KApplication::kApplication()->processEvents( 50 ); ++ + int filterResult = kmkernel->filterMgr()->process(msg, mFilter); + if (filterResult == 2) { + // something went horribly wrong (out of space?) +@@ -1496,30 +1501,30 @@ + + void KMMetaFilterActionCommand::start() + { +-#if 0 // use action scheduler +- KMFilterMgr::FilterSet set = KMFilterMgr::All; +- QPtrList<KMFilter> filters; +- filters.append( mFilter ); +- ActionScheduler *scheduler = new ActionScheduler( set, filters, mHeaders ); +- scheduler->setAlwaysMatch( true ); +- scheduler->setAutoDestruct( true ); +- +- int contentX, contentY; +- HeaderItem *nextItem = mHeaders->prepareMove( &contentX, &contentY ); +- QPtrList<KMMsgBase> msgList = *mHeaders->selectedMsgs(true); +- mHeaders->finalizeMove( nextItem, contentX, contentY ); +- +- +- for (KMMsgBase *msg = msgList.first(); msg; msg = msgList.next()) +- scheduler->execFilters( msg ); +-#else +- KMCommand *filterCommand = new KMFilterActionCommand( mMainWidget, +- *mHeaders->selectedMsgs(), mFilter); +- filterCommand->start(); +- int contentX, contentY; +- HeaderItem *item = mHeaders->prepareMove( &contentX, &contentY ); +- mHeaders->finalizeMove( item, contentX, contentY ); +-#endif ++ if (ActionScheduler::isEnabled() ) { ++ // use action scheduler ++ KMFilterMgr::FilterSet set = KMFilterMgr::All; ++ QValueList<KMFilter*> filters; ++ filters.append( mFilter ); ++ ActionScheduler *scheduler = new ActionScheduler( set, filters, mHeaders ); ++ scheduler->setAlwaysMatch( true ); ++ scheduler->setAutoDestruct( true ); ++ ++ int contentX, contentY; ++ HeaderItem *nextItem = mHeaders->prepareMove( &contentX, &contentY ); ++ QPtrList<KMMsgBase> msgList = *mHeaders->selectedMsgs(true); ++ mHeaders->finalizeMove( nextItem, contentX, contentY ); ++ ++ for (KMMsgBase *msg = msgList.first(); msg; msg = msgList.next()) ++ scheduler->execFilters( msg ); ++ } else { ++ KMCommand *filterCommand = new KMFilterActionCommand( mMainWidget, ++ *mHeaders->selectedMsgs(), mFilter); ++ filterCommand->start(); ++ int contentX, contentY; ++ HeaderItem *item = mHeaders->prepareMove( &contentX, &contentY ); ++ mHeaders->finalizeMove( item, contentX, contentY ); ++ } + } + + FolderShortcutCommand::FolderShortcutCommand( KMMainWidget *mainwidget, +diff -Nur kdepim-3.5.0.orig/kmail/kmfilteraction.cpp kdepim-3.5.0/kmail/kmfilteraction.cpp +--- kdepim-3.5.0.orig/kmail/kmfilteraction.cpp 2005-09-10 10:24:02.000000000 +0200 ++++ kdepim-3.5.0/kmail/kmfilteraction.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -1617,6 +1617,9 @@ + FILE *p; + QByteArray ba; + ++ // backup the serial number in case the header gets lost ++ QString origSerNum = mMsg->headerField( "X-KMail-Filtered" ); ++ + p = popen(QFile::encodeName(mCmd), "r"); + int len =100; + char buffer[100]; +@@ -1630,7 +1633,20 @@ + pclose(p); + if ( !ba.isEmpty() ) { + KPIM::ThreadWeaver::debug (1, "PipeJob::run: %s", QString(ba).latin1() ); ++ KMFolder *filterFolder = mMsg->parent(); ++ ActionScheduler *handler = MessageProperty::filterHandler( mMsg->getMsgSerNum() ); ++ + mMsg->fromByteArray( ba ); ++ if ( !origSerNum.isEmpty() ) ++ mMsg->setHeaderField( "X-KMail-Filtered", origSerNum ); ++ if ( filterFolder && handler ) { ++ bool oldStatus = handler->ignoreChanges( true ); ++ filterFolder->take( filterFolder->find( mMsg ) ); ++ filterFolder->addMsg( mMsg ); ++ handler->ignoreChanges( oldStatus ); ++ } else { ++ kdDebug(5006) << "Warning: Cannot refresh the message from the external filter." << endl; ++ } + } + + KPIM::ThreadWeaver::debug (1, "PipeJob::run: done.\n" ); +diff -Nur kdepim-3.5.0.orig/kmail/kmfolder.cpp kdepim-3.5.0/kmail/kmfolder.cpp +--- kdepim-3.5.0.orig/kmail/kmfolder.cpp 2005-11-19 11:56:46.000000000 +0100 ++++ kdepim-3.5.0/kmail/kmfolder.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -263,8 +263,13 @@ + } + } + +- mChild = new KMFolderDir( this, parent(), childName, +- (folderType() == KMFolderTypeImap) ? KMImapDir : KMStandardDir); ++ KMFolderDirType newType = KMStandardDir; ++ if( folderType() == KMFolderTypeCachedImap ) ++ newType = KMDImapDir; ++ else if( folderType() == KMFolderTypeImap ) ++ newType = KMImapDir; ++ ++ mChild = new KMFolderDir( this, parent(), childName, newType ); + if( !mChild ) + return 0; + mChild->reload(); +diff -Nur kdepim-3.5.0.orig/kmail/kmheaders.cpp kdepim-3.5.0/kmail/kmheaders.cpp +--- kdepim-3.5.0.orig/kmail/kmheaders.cpp 2005-10-10 17:02:11.000000000 +0200 ++++ kdepim-3.5.0/kmail/kmheaders.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -1339,7 +1339,11 @@ + CREATE_TIMER(filter); + START_TIMER(filter); + ++ KCursorSaver busy( KBusyPtr::busy() ); ++ int counter = 0; + for (KMMsgBase* msgBase=msgList->first(); msgBase; msgBase=msgList->next()) { ++ if ( !( ++counter % 20 ) ) ++ KApplication::kApplication()->processEvents( 50 ); + int idx = msgBase->parent()->find(msgBase); + assert(idx != -1); + KMMessage * msg = msgBase->parent()->getMsg(idx); +diff -Nur kdepim-3.5.0.orig/kmail/kmkernel.cpp kdepim-3.5.0/kmail/kmkernel.cpp +--- kdepim-3.5.0.orig/kmail/kmkernel.cpp 2005-11-08 23:33:29.000000000 +0100 ++++ kdepim-3.5.0/kmail/kmkernel.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -1432,11 +1432,11 @@ + the_msgIndex = 0; + #endif + +-#if 0 ++//#if 0 + the_weaver = new KPIM::ThreadWeaver::Weaver( this ); + the_weaverLogger = new KPIM::ThreadWeaver::WeaverThreadLogger(this); + the_weaverLogger->attach (the_weaver); +-#endif ++//#endif + + connect( the_folderMgr, SIGNAL( folderRemoved(KMFolder*) ), + this, SIGNAL( folderRemoved(KMFolder*) ) ); +diff -Nur kdepim-3.5.0.orig/kmail/kmmainwidget.cpp kdepim-3.5.0/kmail/kmmainwidget.cpp +--- kdepim-3.5.0.orig/kmail/kmmainwidget.cpp 2005-10-10 17:02:11.000000000 +0200 ++++ kdepim-3.5.0/kmail/kmmainwidget.cpp 2005-12-07 23:34:28.000000000 +0100 +@@ -1644,11 +1644,11 @@ + { + if ( GlobalSettings::self()->networkState() == GlobalSettings::EnumNetworkState::Online ) { + // if online; then toggle and set it offline. +- actionCollection()->action( "online_status" )->setText( i18n("Network State (online)") ); ++ actionCollection()->action( "online_status" )->setText( i18n("Go Online") ); + kmkernel->stopNetworkJobs(); + BroadcastStatus::instance()->setStatusMsg( i18n("KMail is set to be offline; all network jobs are suspended")); + } else { +- actionCollection()->action( "online_status" )->setText( i18n("Network State (offline)") ); ++ actionCollection()->action( "online_status" )->setText( i18n("Go Offline") ); + kmkernel->resumeNetworkJobs(); + BroadcastStatus::instance()->setStatusMsg( i18n("KMail is set to be online; all network jobs resumed")); + } +@@ -3000,9 +3000,9 @@ + actionCollection()->action( "send_queued" )->setEnabled( kmkernel->outboxFolder()->count() > 0 ); + actionCollection()->action( "send_queued_via" )->setEnabled( kmkernel->outboxFolder()->count() > 0 ); + if ( GlobalSettings::self()->networkState() == GlobalSettings::EnumNetworkState::Online ) +- actionCollection()->action( "online_status" )->setText( i18n("Network State (offline)") ); ++ actionCollection()->action( "online_status" )->setText( i18n("Go Offline") ); + else +- actionCollection()->action( "online_status" )->setText( i18n("Network State (online)") ); ++ actionCollection()->action( "online_status" )->setText( i18n("Go Online") ); + if (action( "edit_undo" )) + action( "edit_undo" )->setEnabled( mHeaders->canUndo() ); + +@@ -3311,6 +3311,7 @@ + if(!addedSeparator) { + mApplyFilterActionsMenu->popupMenu()->insertSeparator(); + addedSeparator = !addedSeparator; ++ mFilterMenuActions.append( new KActionSeparator()); + } + filterAction->plug( mApplyFilterActionsMenu->popupMenu() ); + mFilterMenuActions.append(filterAction); diff --git a/kde-base/kmail/kmail-3.5.0-r2.ebuild b/kde-base/kmail/kmail-3.5.0-r3.ebuild index a87ba3510338..d90f6e0839d5 100644 --- a/kde-base/kmail/kmail-3.5.0-r2.ebuild +++ b/kde-base/kmail/kmail-3.5.0-r3.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2005 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/kde-base/kmail/kmail-3.5.0-r2.ebuild,v 1.1 2005/12/07 15:10:00 greg_g Exp $ +# $Header: /var/cvsroot/gentoo-x86/kde-base/kmail/kmail-3.5.0-r3.ebuild,v 1.1 2005/12/08 00:00:32 greg_g Exp $ KMNAME=kdepim MAXKDEVER=$PV @@ -54,4 +54,4 @@ KMEXTRA=" kontact/plugins/kmail/" # We add here the kontact's plugin instead of compiling it with kontact because it needs a lot of this programs deps. # Fix crash when applying filters (kde bug 113730). applied for 3.5.1. -PATCHES="${FILESDIR}/kdepim-3.5.0-filter-crash.patch" +PATCHES="${FILESDIR}/kdepim-3.5.0-kmail-branch.patch" |