22 #include "signature.h"
24 #include <kdeversion.h>
25 #include <sonnet/globals.h>
28 #include <kmessagebox.h>
29 #include <kconfiggroup.h>
32 #include <kpimutils/kfileio.h>
33 #include <kpimutils/email.h>
39 #include <sys/types.h>
45 using namespace KPIMIdentities;
51 const QString &emailAddr,
const QString &organization,
52 const QString &replyToAddr )
61 setDictionary( Sonnet::defaultLanguageName() );
69 if ( !identityNull ) {
78 QHash<QString, QVariant>::const_iterator i = mPropertiesMap.constBegin();
79 while ( i != mPropertiesMap.constEnd() ) {
82 if ( i.key() == s_dict ) {
88 if ( !( i.key() == s_uoid && i.value().toUInt() == 0 ) ) {
89 if ( !i.value().isNull() ||
90 ( i.value().type() == QVariant::String && !i.value().toString().isEmpty() ) ) {
102 QMap<QString, QString> entries = config.entryMap();
103 QMap<QString, QString>::const_iterator i = entries.constBegin();
104 QMap<QString, QString>::const_iterator end = entries.constEnd();
106 if ( i.key() == s_emailAliases ) {
108 mPropertiesMap.insert( i.key(), config.readEntry( i.key(), QStringList() ) );
110 mPropertiesMap.insert( i.key(), config.readEntry( i.key() ) );
114 mSignature.readConfig( config );
119 QHash<QString, QVariant>::const_iterator i = mPropertiesMap.constBegin();
120 QHash<QString, QVariant>::const_iterator end = mPropertiesMap.constEnd();
122 config.writeEntry( i.key(), i.value() );
123 kDebug( 5325 ) <<
"Store:" << i.key() <<
":" << i.value();
126 mSignature.writeConfig( config );
131 return !
property( s_email ).toString().isEmpty();
134 QString Identity::mimeDataType()
136 return "application/x-kmail-identity-drag";
139 bool Identity::canDecode(
const QMimeData*md )
141 return md->hasFormat( mimeDataType() );
144 void Identity::populateMimeData( QMimeData*md )
148 QDataStream s( &a, QIODevice::WriteOnly );
151 md->setData( mimeDataType(), a );
154 Identity Identity::fromMimeData(
const QMimeData*md )
157 if ( canDecode( md ) ) {
158 QByteArray ba = md->data( mimeDataType() );
159 QDataStream s( &ba, QIODevice::ReadOnly );
167 QDataStream &KPIMIdentities::operator<<
170 return stream << static_cast<quint32>( i.
uoid() )
187 << i.mPropertiesMap[s_signature]
190 << i.preferredCryptoMessageFormat()
198 QDataStream &KPIMIdentities::operator>>
204 >> i.mPropertiesMap[s_identity]
205 >> i.mPropertiesMap[s_name]
206 >> i.mPropertiesMap[s_organization]
207 >> i.mPropertiesMap[s_pgps]
208 >> i.mPropertiesMap[s_pgpe]
209 >> i.mPropertiesMap[s_smimes]
210 >> i.mPropertiesMap[s_smimee]
211 >> i.mPropertiesMap[s_email]
212 >> i.mPropertiesMap[s_emailAliases]
213 >> i.mPropertiesMap[s_replyto]
214 >> i.mPropertiesMap[s_bcc]
215 >> i.mPropertiesMap[s_vcard]
216 >> i.mPropertiesMap[s_transport]
217 >> i.mPropertiesMap[s_fcc]
218 >> i.mPropertiesMap[s_drafts]
219 >> i.mPropertiesMap[s_templates]
220 >> i.mPropertiesMap[s_signature]
221 >> i.mPropertiesMap[s_dict]
222 >> i.mPropertiesMap[s_xface]
223 >> i.mPropertiesMap[s_prefcrypt]
224 >> i.mPropertiesMap[s_cc]
225 >> i.mPropertiesMap[s_attachVcard]
226 >> i.mPropertiesMap[s_autocorrectionLanguage];
266 return mPropertiesMap == other.mPropertiesMap &&
267 mSignature == other.mSignature;
279 return mPropertiesMap.value( key );
284 const QString name = mPropertiesMap.value( s_name ).toString();
285 const QString mail = mPropertiesMap.value( s_email ).toString();
287 if ( name.isEmpty() ) {
291 const QString specials(
"()<>@,.;:[]" );
296 bool needsQuotes=
false;
297 const int nameLength( name.length() );
298 for (
int i=0; i < nameLength; i++ ) {
299 if ( specials.contains( name[i] ) ) {
301 }
else if ( name[i] ==
'\\' || name[i] ==
'"' ) {
309 result.insert( 0,
'"' );
313 result +=
" <" + mail +
'>';
320 return property( QLatin1String( s_identity ) ).toString();
340 return property( QLatin1String( s_uoid ) ).toInt();
345 return property( QLatin1String( s_name ) ).toString();
350 return property( QLatin1String( s_organization ) ).toString();
355 return property( QLatin1String( s_pgpe ) ).toByteArray();
360 return property( QLatin1String( s_pgps ) ).toByteArray();
365 return property( QLatin1String( s_smimee ) ).toByteArray();
370 return property( QLatin1String( s_smimes ) ).toByteArray();
373 QString Identity::preferredCryptoMessageFormat()
const
375 return property( QLatin1String( s_prefcrypt ) ).toString();
385 return property( QLatin1String( s_email ) ).toString();
390 return property( QLatin1String( s_emailAliases ) ).toStringList();
395 return property( QLatin1String( s_vcard ) ).toString();
400 return property( QLatin1String( s_attachVcard ) ).toBool();
405 return property( QLatin1String( s_replyto ) ).toString();
410 return property( QLatin1String( s_bcc ) ).toString();
415 return property( QLatin1String( s_cc ) ).toString();
423 bool Identity::isXFaceEnabled()
const
425 return property( QLatin1String( s_xfaceenabled ) ).toBool();
430 return property( QLatin1String( s_xface ) ).toString();
435 return property( QLatin1String( s_dict ) ).toString();
440 const QString str =
property( QLatin1String( s_templates ) ).toString();
446 const QString str =
property( QLatin1String( s_drafts ) ).toString();
452 const QString str =
property( QLatin1String( s_fcc ) ).toString();
458 return property( QLatin1String( s_transport ) ).toString();
463 return mSignature.
type() == Signature::FromCommand;
468 return mSignature.
type() == Signature::FromFile;
473 return mSignature.
type() == Signature::Inlined;
483 return mSignature.text();
488 return mSignature.url();
493 return property( QLatin1String( s_autocorrectionLanguage ) ).toString();
500 if ( value.isNull() ||
501 ( value.type() == QVariant::String && value.toString().isEmpty() ) ) {
502 mPropertiesMap.remove( key );
504 mPropertiesMap.insert( key, value );
518 void Identity::setFullName(
const QString &str )
523 void Identity::setOrganization(
const QString &str )
528 void Identity::setPGPSigningKey(
const QByteArray &str )
533 void Identity::setPGPEncryptionKey(
const QByteArray &str )
538 void Identity::setSMIMESigningKey(
const QByteArray &str )
543 void Identity::setSMIMEEncryptionKey(
const QByteArray &str )
548 void Identity::setEmailAddr(
const QString &str )
550 setPrimaryEmailAddress( str );
553 void Identity::setPrimaryEmailAddress(
const QString & email )
558 void Identity::setEmailAliases(
const QStringList & aliases )
563 void Identity::setVCardFile(
const QString &str )
568 void Identity::setAttachVcard(
bool attachment)
573 void Identity::setReplyToAddr(
const QString&str )
578 void Identity::setSignatureFile(
const QString &str )
583 void Identity::setSignatureInlineText(
const QString &str )
588 void Identity::setTransport(
const QString &str )
593 void Identity::setFcc(
const QString &str )
598 void Identity::setDrafts(
const QString &str )
603 void Identity::setTemplates(
const QString &str )
608 void Identity::setDictionary(
const QString &str )
613 void Identity::setBcc(
const QString &str )
618 void Identity::setCc(
const QString &str )
628 void Identity::setPreferredCryptoMessageFormat(
const QString &str )
633 void Identity::setXFace(
const QString &str )
635 QString strNew = str;
636 strNew.remove(
' ' );
637 strNew.remove(
'\n' );
638 strNew.remove(
'\r' );
642 void Identity::setXFaceEnabled(
const bool on )
647 void Identity::setSignature(
const Signature &sig )
654 const QString addrSpec = KPIMUtils::extractEmailAddress( addr ).toLower();
660 if ( alias.toLower() == addrSpec ) {
673 const qlonglong val = str.toLongLong(&ok);
682 void Identity::setAutocorrectionLanguage(
const QString& language)