|
|
|
|
@ -290,46 +290,15 @@ bool StorageModel::containsOutboundMessages() const |
|
|
|
|
return mFolder->whoField().toLower() == "to"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool StorageModel::initializeMessageItem( Core::MessageItem * mi, int row, bool bUseReceiver ) const |
|
|
|
|
/**
|
|
|
|
|
* Uses the KMMsgBase to fill a list of tags. It also picks out |
|
|
|
|
* the colors the message should use. |
|
|
|
|
*/ |
|
|
|
|
QList< Core::MessageItem::Tag * > * fillTagList( KMMsgBase * msg, |
|
|
|
|
QColor & textColor, QColor & backgroundColor ) |
|
|
|
|
{ |
|
|
|
|
KMMsgBase * msg = mFolder->getMsgBase( row ); |
|
|
|
|
if ( !msg ) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
QString sender = msg->fromStrip(); |
|
|
|
|
QString receiver = msg->toStrip(); |
|
|
|
|
|
|
|
|
|
// Static for speed reasons
|
|
|
|
|
static const QString noSubject = i18nc( "displayed as subject when the subject of a mail is empty", "No Subject" ); |
|
|
|
|
static const QString unknown( i18nc( "displayed when a mail has unknown sender, receiver or date", "Unknown" ) ); |
|
|
|
|
|
|
|
|
|
if ( sender.isEmpty() ) |
|
|
|
|
sender = unknown; |
|
|
|
|
if ( receiver.isEmpty() ) |
|
|
|
|
receiver = unknown; |
|
|
|
|
|
|
|
|
|
mi->initialSetup( |
|
|
|
|
msg->date(), |
|
|
|
|
mFolder->folderType() == KMFolderTypeImap ? msg->msgSizeServer() : msg->msgSize(), |
|
|
|
|
sender, receiver, |
|
|
|
|
bUseReceiver ? receiver : sender |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
mi->setUniqueId( msg->getMsgSerNum() ); |
|
|
|
|
|
|
|
|
|
KPIM::MessageStatus stat = msg->messageStatus(); |
|
|
|
|
|
|
|
|
|
QString subject = msg->subject(); |
|
|
|
|
if ( subject.isEmpty() ) |
|
|
|
|
subject = '(' + noSubject + ')'; |
|
|
|
|
mi->setSubjectAndStatus( |
|
|
|
|
subject, |
|
|
|
|
stat |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
QColor clr; |
|
|
|
|
|
|
|
|
|
// FIXME: Tags should be sorted by priority!
|
|
|
|
|
QList< Core::MessageItem::Tag * > * tagList = 0; |
|
|
|
|
|
|
|
|
|
if ( msg->tagList() ) |
|
|
|
|
{ |
|
|
|
|
@ -337,15 +306,16 @@ bool StorageModel::initializeMessageItem( Core::MessageItem * mi, int row, bool |
|
|
|
|
{ |
|
|
|
|
int bestPriority = -0xfffff; |
|
|
|
|
|
|
|
|
|
QList< Core::MessageItem::Tag * > * tagList = new QList< Core::MessageItem::Tag * >(); |
|
|
|
|
tagList = new QList< Core::MessageItem::Tag * >(); |
|
|
|
|
for ( KMMessageTagList::Iterator it = msg->tagList()->begin(); it != msg->tagList()->end(); ++it ) |
|
|
|
|
{ |
|
|
|
|
const KMMessageTagDescription * description = kmkernel->msgTagMgr()->find( *it ); |
|
|
|
|
if ( description ) |
|
|
|
|
{ |
|
|
|
|
if ( ( bestPriority < description->priority() ) || ( !clr.isValid() ) ) |
|
|
|
|
if ( ( bestPriority < description->priority() ) || ( !textColor.isValid() ) ) |
|
|
|
|
{ |
|
|
|
|
clr = description->textColor(); |
|
|
|
|
textColor = description->textColor(); |
|
|
|
|
backgroundColor = description->backgroundColor(); |
|
|
|
|
bestPriority = description->priority(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -358,14 +328,18 @@ bool StorageModel::initializeMessageItem( Core::MessageItem * mi, int row, bool |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if ( tagList->isEmpty() ) |
|
|
|
|
{ |
|
|
|
|
delete tagList; |
|
|
|
|
else |
|
|
|
|
mi->setTagList( tagList ); |
|
|
|
|
tagList = 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return tagList; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void setMessageItemEncryptionState( Core::MessageItem * mi, KMMsgBase * msg ) |
|
|
|
|
{ |
|
|
|
|
switch ( msg->encryptionState() ) |
|
|
|
|
{ |
|
|
|
|
case KMMsgFullyEncrypted: |
|
|
|
|
@ -375,13 +349,17 @@ bool StorageModel::initializeMessageItem( Core::MessageItem * mi, int row, bool |
|
|
|
|
mi->setEncryptionState( Core::MessageItem::PartiallyEncrypted ); |
|
|
|
|
break; |
|
|
|
|
case KMMsgEncryptionStateUnknown: |
|
|
|
|
case KMMsgEncryptionProblematic: |
|
|
|
|
mi->setEncryptionState( Core::MessageItem::EncryptionStateUnknown ); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
mi->setEncryptionState( Core::MessageItem::NotEncrypted ); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void setMessageItemSignatureState( Core::MessageItem * mi, KMMsgBase * msg ) |
|
|
|
|
{ |
|
|
|
|
switch ( msg->signatureState() ) |
|
|
|
|
{ |
|
|
|
|
case KMMsgFullySigned: |
|
|
|
|
@ -391,12 +369,60 @@ bool StorageModel::initializeMessageItem( Core::MessageItem * mi, int row, bool |
|
|
|
|
mi->setSignatureState( Core::MessageItem::PartiallySigned ); |
|
|
|
|
break; |
|
|
|
|
case KMMsgSignatureStateUnknown: |
|
|
|
|
case KMMsgSignatureProblematic: |
|
|
|
|
mi->setSignatureState( Core::MessageItem::SignatureStateUnknown ); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
mi->setSignatureState( Core::MessageItem::NotSigned ); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool StorageModel::initializeMessageItem( Core::MessageItem * mi, int row, bool bUseReceiver ) const |
|
|
|
|
{ |
|
|
|
|
KMMsgBase * msg = mFolder->getMsgBase( row ); |
|
|
|
|
if ( !msg ) |
|
|
|
|
return false; |
|
|
|
|
|
|
|
|
|
QString sender = msg->fromStrip(); |
|
|
|
|
QString receiver = msg->toStrip(); |
|
|
|
|
|
|
|
|
|
// Static for speed reasons
|
|
|
|
|
static const QString noSubject = i18nc( "displayed as subject when the subject of a mail is empty", "No Subject" ); |
|
|
|
|
static const QString unknown( i18nc( "displayed when a mail has unknown sender, receiver or date", "Unknown" ) ); |
|
|
|
|
|
|
|
|
|
if ( sender.isEmpty() ) |
|
|
|
|
sender = unknown; |
|
|
|
|
if ( receiver.isEmpty() ) |
|
|
|
|
receiver = unknown; |
|
|
|
|
|
|
|
|
|
mi->initialSetup( |
|
|
|
|
msg->date(), |
|
|
|
|
mFolder->folderType() == KMFolderTypeImap ? msg->msgSizeServer() : msg->msgSize(), |
|
|
|
|
sender, receiver, |
|
|
|
|
bUseReceiver ? receiver : sender |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
mi->setUniqueId( msg->getMsgSerNum() ); |
|
|
|
|
|
|
|
|
|
KPIM::MessageStatus stat = msg->messageStatus(); |
|
|
|
|
|
|
|
|
|
QString subject = msg->subject(); |
|
|
|
|
if ( subject.isEmpty() ) |
|
|
|
|
subject = '(' + noSubject + ')'; |
|
|
|
|
mi->setSubjectAndStatus( |
|
|
|
|
subject, |
|
|
|
|
stat |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
setMessageItemEncryptionState( mi, msg ); |
|
|
|
|
setMessageItemSignatureState( mi, msg ); |
|
|
|
|
|
|
|
|
|
QColor clr; |
|
|
|
|
QColor backClr; |
|
|
|
|
QList< Core::MessageItem::Tag * > * tagList; |
|
|
|
|
tagList = fillTagList( msg, clr, backClr ); |
|
|
|
|
mi->setTagList( tagList ); |
|
|
|
|
|
|
|
|
|
if ( !clr.isValid() ) |
|
|
|
|
{ |
|
|
|
|
@ -412,6 +438,8 @@ bool StorageModel::initializeMessageItem( Core::MessageItem * mi, int row, bool |
|
|
|
|
|
|
|
|
|
if ( clr.isValid() ) |
|
|
|
|
mi->setTextColor( clr ); |
|
|
|
|
if ( backClr.isValid() ) |
|
|
|
|
mi->setBackgroundColor( backClr ); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
@ -429,82 +457,17 @@ void StorageModel::updateMessageItemData( Core::MessageItem * mi, int row ) cons |
|
|
|
|
mi->recomputeMaxDate(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QColor clr; |
|
|
|
|
|
|
|
|
|
KPIM::MessageStatus stat = msg->messageStatus(); |
|
|
|
|
|
|
|
|
|
mi->setStatus( stat ); |
|
|
|
|
|
|
|
|
|
switch ( msg->encryptionState() ) |
|
|
|
|
{ |
|
|
|
|
case KMMsgFullyEncrypted: |
|
|
|
|
mi->setEncryptionState( Core::MessageItem::FullyEncrypted ); |
|
|
|
|
break; |
|
|
|
|
case KMMsgPartiallyEncrypted: |
|
|
|
|
mi->setEncryptionState( Core::MessageItem::PartiallyEncrypted ); |
|
|
|
|
break; |
|
|
|
|
case KMMsgEncryptionStateUnknown: |
|
|
|
|
case KMMsgEncryptionProblematic: |
|
|
|
|
mi->setEncryptionState( Core::MessageItem::EncryptionStateUnknown ); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
mi->setEncryptionState( Core::MessageItem::NotEncrypted ); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch ( msg->signatureState() ) |
|
|
|
|
{ |
|
|
|
|
case KMMsgFullySigned: |
|
|
|
|
mi->setSignatureState( Core::MessageItem::FullySigned ); |
|
|
|
|
break; |
|
|
|
|
case KMMsgPartiallySigned: |
|
|
|
|
mi->setSignatureState( Core::MessageItem::PartiallySigned ); |
|
|
|
|
break; |
|
|
|
|
case KMMsgSignatureStateUnknown: |
|
|
|
|
case KMMsgSignatureProblematic: |
|
|
|
|
mi->setSignatureState( Core::MessageItem::SignatureStateUnknown ); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
mi->setSignatureState( Core::MessageItem::NotSigned ); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QList< Core::MessageItem::Tag * > * tagList = 0; |
|
|
|
|
|
|
|
|
|
if ( msg->tagList() ) |
|
|
|
|
{ |
|
|
|
|
if ( !msg->tagList()->isEmpty() ) |
|
|
|
|
{ |
|
|
|
|
int bestPriority = -0xfffff; |
|
|
|
|
|
|
|
|
|
tagList = new QList< Core::MessageItem::Tag * >(); |
|
|
|
|
for ( KMMessageTagList::Iterator it = msg->tagList()->begin(); it != msg->tagList()->end(); ++it ) |
|
|
|
|
{ |
|
|
|
|
const KMMessageTagDescription * description = kmkernel->msgTagMgr()->find( *it ); |
|
|
|
|
if ( description ) |
|
|
|
|
{ |
|
|
|
|
if ( ( bestPriority < description->priority() ) || ( !clr.isValid() ) ) |
|
|
|
|
{ |
|
|
|
|
clr = description->textColor(); |
|
|
|
|
bestPriority = description->priority(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Core::MessageItem::Tag * tag; |
|
|
|
|
if ( description->toolbarIconName().isEmpty() ) |
|
|
|
|
tag = new Core::MessageItem::Tag( SmallIcon( "feed-subscribe" ), description->name(), *it ); |
|
|
|
|
else |
|
|
|
|
tag = new Core::MessageItem::Tag( SmallIcon( description->toolbarIconName() ), description->name(), *it ); |
|
|
|
|
tagList->append( tag ); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if ( tagList->isEmpty() ) |
|
|
|
|
{ |
|
|
|
|
delete tagList; |
|
|
|
|
tagList = 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
setMessageItemEncryptionState( mi, msg ); |
|
|
|
|
setMessageItemSignatureState( mi, msg ); |
|
|
|
|
|
|
|
|
|
QColor clr; |
|
|
|
|
QColor backClr; |
|
|
|
|
QList< Core::MessageItem::Tag * > * tagList; |
|
|
|
|
tagList = fillTagList( msg, clr, backClr ); |
|
|
|
|
mi->setTagList( tagList ); |
|
|
|
|
|
|
|
|
|
if ( !clr.isValid() ) |
|
|
|
|
@ -520,6 +483,7 @@ void StorageModel::updateMessageItemData( Core::MessageItem * mi, int row ) cons |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mi->setTextColor( clr ); // set even if invalid (->default color)
|
|
|
|
|
mi->setBackgroundColor( backClr ); |
|
|
|
|
|
|
|
|
|
// FIXME: Handle MDN State ?
|
|
|
|
|
} |
|
|
|
|
|