kmail
messageproperty.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifdef HAVE_CONFIG_H
00032 #include <config.h>
00033 #endif
00034
00035 #include "messageproperty.h"
00036 using namespace KMail;
00037
00038 QMap<Q_UINT32, QGuardedPtr<KMFolder> > MessageProperty::sFolders;
00039 QMap<Q_UINT32, bool> MessageProperty::sKeepSerialNumber;
00040 QMap<Q_UINT32, QGuardedPtr<ActionScheduler> > MessageProperty::sHandlers;
00041 QMap<Q_UINT32, int > MessageProperty::sTransfers;
00042 QMap<const KMMsgBase*, long > MessageProperty::sSerialCache;
00043
00044 bool MessageProperty::filtering( Q_UINT32 serNum )
00045 {
00046 return sFolders.contains( serNum );
00047 }
00048
00049 void MessageProperty::setFiltering( Q_UINT32 serNum, bool filter )
00050 {
00051 assert(!filtering(serNum) || !filter);
00052 if (filter && !filtering(serNum))
00053 sFolders.replace(serNum, QGuardedPtr<KMFolder>(0) );
00054 else if (!filter)
00055 sFolders.remove(serNum);
00056 }
00057
00058 bool MessageProperty::filtering( const KMMsgBase *msgBase )
00059 {
00060 return filtering( msgBase->getMsgSerNum() );
00061 }
00062
00063 void MessageProperty::setFiltering( const KMMsgBase *msgBase, bool filter )
00064 {
00065 setFiltering( msgBase->getMsgSerNum(), filter );
00066 }
00067
00068 KMFolder* MessageProperty::filterFolder( Q_UINT32 serNum )
00069 {
00070 QMap<Q_UINT32, QGuardedPtr<KMFolder> >::const_iterator it = sFolders.find( serNum );
00071 return it == sFolders.constEnd() ? 0 : (*it).operator->();
00072 }
00073
00074 void MessageProperty::setFilterFolder( Q_UINT32 serNum, KMFolder* folder )
00075 {
00076 sFolders.insert(serNum, QGuardedPtr<KMFolder>(folder) );
00077 }
00078
00079 KMFolder* MessageProperty::filterFolder( const KMMsgBase *msgBase )
00080 {
00081 return filterFolder( msgBase->getMsgSerNum() );
00082 }
00083
00084 void MessageProperty::setFilterFolder( const KMMsgBase *msgBase, KMFolder* folder )
00085 {
00086 setFilterFolder( msgBase->getMsgSerNum(), folder );
00087 }
00088
00089 ActionScheduler* MessageProperty::filterHandler( Q_UINT32 serNum )
00090 {
00091 QMap<Q_UINT32, QGuardedPtr<ActionScheduler> >::const_iterator it = sHandlers.find( serNum );
00092 return it == sHandlers.constEnd() ? 0 : (*it).operator->();
00093 }
00094
00095 void MessageProperty::setFilterHandler( Q_UINT32 serNum, ActionScheduler* handler )
00096 {
00097 if (handler)
00098 sHandlers.insert( serNum, QGuardedPtr<ActionScheduler>(handler) );
00099 else
00100 sHandlers.remove( serNum );
00101 }
00102
00103 ActionScheduler* MessageProperty::filterHandler( const KMMsgBase *msgBase )
00104 {
00105 return filterHandler( msgBase->getMsgSerNum() );
00106 }
00107
00108 void MessageProperty::setFilterHandler( const KMMsgBase *msgBase, ActionScheduler* handler )
00109 {
00110 setFilterHandler( msgBase->getMsgSerNum(), handler );
00111 }
00112
00113 bool MessageProperty::transferInProgress( Q_UINT32 serNum )
00114 {
00115 QMap<Q_UINT32, int >::const_iterator it = sTransfers.find( serNum );
00116 return it == sTransfers.constEnd() ? false : *it;
00117 }
00118
00119 void MessageProperty::setTransferInProgress( Q_UINT32 serNum, bool transfer, bool force )
00120 {
00121 int transferInProgress = 0;
00122 QMap<Q_UINT32, int >::const_iterator it = sTransfers.find( serNum );
00123 if (it != sTransfers.constEnd())
00124 transferInProgress = *it;
00125 if ( force && !transfer )
00126 transferInProgress = 0;
00127 else
00128 transfer ? ++transferInProgress : --transferInProgress;
00129 if ( transferInProgress < 0 )
00130 transferInProgress = 0;
00131 if (transferInProgress)
00132 sTransfers.insert( serNum, transferInProgress );
00133 else
00134 sTransfers.remove( serNum );
00135 }
00136
00137 bool MessageProperty::transferInProgress( const KMMsgBase *msgBase )
00138 {
00139 return transferInProgress( msgBase->getMsgSerNum() );
00140 }
00141
00142 void MessageProperty::setTransferInProgress( const KMMsgBase *msgBase, bool transfer, bool force )
00143 {
00144 setTransferInProgress( msgBase->getMsgSerNum(), transfer, force );
00145 }
00146
00147 Q_UINT32 MessageProperty::serialCache( const KMMsgBase *msgBase )
00148 {
00149 QMap<const KMMsgBase*, long >::const_iterator it = sSerialCache.find( msgBase );
00150 return it == sSerialCache.constEnd() ? 0 : *it;
00151 }
00152
00153 void MessageProperty::setSerialCache( const KMMsgBase *msgBase, Q_UINT32 serNum )
00154 {
00155 if (serNum)
00156 sSerialCache.insert( msgBase, serNum );
00157 else
00158 sSerialCache.remove( msgBase );
00159 }
00160
00161 void MessageProperty::setKeepSerialNumber( Q_UINT32 serialNumber, bool keepForMoving )
00162 {
00163 if ( serialNumber ) {
00164 if ( sKeepSerialNumber.contains( serialNumber ) )
00165 sKeepSerialNumber[ serialNumber ] = keepForMoving;
00166 else
00167 sKeepSerialNumber.insert( serialNumber, keepForMoving );
00168 }
00169 }
00170
00171 bool MessageProperty::keepSerialNumber( Q_UINT32 serialNumber )
00172 {
00173 if ( sKeepSerialNumber.contains( serialNumber ) )
00174 return sKeepSerialNumber[ serialNumber ];
00175 else
00176 return false;
00177 }
00178
00179 void MessageProperty::forget( const KMMsgBase *msgBase )
00180 {
00181 Q_UINT32 serNum = serialCache( msgBase );
00182 if (serNum) {
00183 Q_ASSERT( !transferInProgress( serNum ) );
00184 sTransfers.remove( serNum );
00185 sSerialCache.remove( msgBase );
00186 sKeepSerialNumber.remove( serNum );
00187 }
00188 }
00189
00190 #include "messageproperty.moc"
|