22 #include "signature.h"
24 #include <kdeversion.h>
25 #include <sonnet/globals.h>
27 #include <klocalizedstring.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 )
59 setProperty( QLatin1String(s_organization), organization );
60 setProperty( QLatin1String(s_replyto), replyToAddr );
61 setDictionary( Sonnet::defaultLanguageName() );
70 if ( !identityNull ) {
79 QHash<QString, QVariant>::const_iterator i = mPropertiesMap.constBegin();
80 while ( i != mPropertiesMap.constEnd() ) {
83 if ( i.key() == QLatin1String(s_dict) ) {
88 if( i.key() == QLatin1String(s_disabledFcc) && i.value().toBool() == false ) {
93 if ( !( i.key() == QLatin1String(s_uoid) && i.value().toUInt() == 0 ) ) {
94 if ( !i.value().isNull() ||
95 ( i.value().type() == QVariant::String && !i.value().toString().isEmpty() ) ) {
107 QMap<QString, QString> entries = config.entryMap();
108 QMap<QString, QString>::const_iterator i = entries.constBegin();
109 QMap<QString, QString>::const_iterator end = entries.constEnd();
111 if ( i.key() == QLatin1String(s_emailAliases) ) {
113 mPropertiesMap.insert( i.key(), config.readEntry( i.key(), QStringList() ) );
115 mPropertiesMap.insert( i.key(), config.readEntry( i.key() ) );
119 mSignature.readConfig( config );
124 QHash<QString, QVariant>::const_iterator i = mPropertiesMap.constBegin();
125 QHash<QString, QVariant>::const_iterator end = mPropertiesMap.constEnd();
127 config.writeEntry( i.key(), i.value() );
128 kDebug( 5325 ) <<
"Store:" << i.key() <<
":" << i.value();
131 mSignature.writeConfig( config );
136 return !
property( QLatin1String(s_email) ).toString().isEmpty();
139 QString Identity::mimeDataType()
141 return QLatin1String(
"application/x-kmail-identity-drag");
144 bool Identity::canDecode(
const QMimeData*md )
146 return md->hasFormat( mimeDataType() );
149 void Identity::populateMimeData( QMimeData*md )
153 QDataStream s( &a, QIODevice::WriteOnly );
156 md->setData( mimeDataType(), a );
159 Identity Identity::fromMimeData(
const QMimeData*md )
162 if ( canDecode( md ) ) {
163 QByteArray ba = md->data( mimeDataType() );
164 QDataStream s( &ba, QIODevice::ReadOnly );
172 QDataStream &KPIMIdentities::operator<<
175 return stream << static_cast<quint32>( i.
uoid() )
192 << i.mPropertiesMap[QLatin1String(s_signature)]
195 << i.preferredCryptoMessageFormat()
203 QDataStream &KPIMIdentities::operator>>
209 >> i.mPropertiesMap[QLatin1String(s_identity)]
210 >> i.mPropertiesMap[QLatin1String(s_name)]
211 >> i.mPropertiesMap[QLatin1String(s_organization)]
212 >> i.mPropertiesMap[QLatin1String(s_pgps)]
213 >> i.mPropertiesMap[QLatin1String(s_pgpe)]
214 >> i.mPropertiesMap[QLatin1String(s_smimes)]
215 >> i.mPropertiesMap[QLatin1String(s_smimee)]
216 >> i.mPropertiesMap[QLatin1String(s_email)]
217 >> i.mPropertiesMap[QLatin1String(s_emailAliases)]
218 >> i.mPropertiesMap[QLatin1String(s_replyto)]
219 >> i.mPropertiesMap[QLatin1String(s_bcc)]
220 >> i.mPropertiesMap[QLatin1String(s_vcard)]
221 >> i.mPropertiesMap[QLatin1String(s_transport)]
222 >> i.mPropertiesMap[QLatin1String(s_fcc)]
223 >> i.mPropertiesMap[QLatin1String(s_drafts)]
224 >> i.mPropertiesMap[QLatin1String(s_templates)]
225 >> i.mPropertiesMap[QLatin1String(s_signature)]
226 >> i.mPropertiesMap[QLatin1String(s_dict)]
227 >> i.mPropertiesMap[QLatin1String(s_xface)]
228 >> i.mPropertiesMap[QLatin1String(s_prefcrypt)]
229 >> i.mPropertiesMap[QLatin1String(s_cc)]
230 >> i.mPropertiesMap[QLatin1String(s_attachVcard)]
231 >> i.mPropertiesMap[QLatin1String(s_autocorrectionLanguage)]
232 >> i.mPropertiesMap[QLatin1String(s_disabledFcc)]
233 >> i.mPropertiesMap[QLatin1String(s_pgpautosign)];
273 return mPropertiesMap == other.mPropertiesMap &&
274 mSignature == other.mSignature;
286 return mPropertiesMap.value( key );
291 const QString name = mPropertiesMap.value( QLatin1String(s_name) ).toString();
292 const QString mail = mPropertiesMap.value( QLatin1String(s_email) ).toString();
294 if ( name.isEmpty() ) {
298 const QString specials( QLatin1String(
"()<>@,.;:[]") );
303 bool needsQuotes=
false;
304 const int nameLength( name.length() );
305 for (
int i=0; i < nameLength; i++ ) {
306 if ( specials.contains( name[i] ) ) {
308 }
else if ( name[i] == QLatin1Char(
'\\') || name[i] == QLatin1Char(
'"') ) {
310 result += QLatin1Char(
'\\');
316 result.insert( 0, QLatin1Char(
'"') );
317 result += QLatin1Char(
'"');
320 result += QLatin1String(
" <") + mail + QLatin1Char(
'>');
327 return property( QLatin1String( s_identity ) ).toString();
347 return property( QLatin1String( s_uoid ) ).toInt();
352 return property( QLatin1String( s_name ) ).toString();
357 return property( QLatin1String( s_organization ) ).toString();
362 return property( QLatin1String( s_pgpe ) ).toByteArray();
367 return property( QLatin1String( s_pgps ) ).toByteArray();
372 return property( QLatin1String( s_smimee ) ).toByteArray();
377 return property( QLatin1String( s_smimes ) ).toByteArray();
380 QString Identity::preferredCryptoMessageFormat()
const
382 return property( QLatin1String( s_prefcrypt ) ).toString();
392 return property( QLatin1String( s_email ) ).toString();
397 return property( QLatin1String( s_emailAliases ) ).toStringList();
402 return property( QLatin1String( s_vcard ) ).toString();
407 return property( QLatin1String( s_attachVcard ) ).toBool();
412 return property( QLatin1String( s_replyto ) ).toString();
417 return property( QLatin1String( s_bcc ) ).toString();
422 return property( QLatin1String( s_cc ) ).toString();
430 bool Identity::isXFaceEnabled()
const
432 return property( QLatin1String( s_xfaceenabled ) ).toBool();
437 return property( QLatin1String( s_xface ) ).toString();
442 return property( QLatin1String( s_dict ) ).toString();
447 const QString str =
property( QLatin1String( s_templates ) ).toString();
453 const QString str =
property( QLatin1String( s_drafts ) ).toString();
459 const QString str =
property( QLatin1String( s_fcc ) ).toString();
465 return property( QLatin1String( s_transport ) ).toString();
470 return mSignature.
type() == Signature::FromCommand;
475 return mSignature.
type() == Signature::FromFile;
480 return mSignature.
type() == Signature::Inlined;
490 return mSignature.text();
495 return mSignature.url();
500 return property( QLatin1String( s_autocorrectionLanguage ) ).toString();
507 if ( value.isNull() ||
508 ( value.type() == QVariant::String && value.toString().isEmpty() ) ) {
509 mPropertiesMap.remove( key );
511 mPropertiesMap.insert( key, value );
525 void Identity::setFullName(
const QString &str )
530 void Identity::setOrganization(
const QString &str )
535 void Identity::setPGPSigningKey(
const QByteArray &str )
537 setProperty( QLatin1String(s_pgps), QLatin1String( str ) );
540 void Identity::setPGPEncryptionKey(
const QByteArray &str )
542 setProperty( QLatin1String(s_pgpe), QLatin1String( str ) );
545 void Identity::setSMIMESigningKey(
const QByteArray &str )
547 setProperty( QLatin1String(s_smimes), QLatin1String( str ) );
550 void Identity::setSMIMEEncryptionKey(
const QByteArray &str )
552 setProperty( QLatin1String(s_smimee), QLatin1String( str ) );
555 void Identity::setEmailAddr(
const QString &str )
557 setPrimaryEmailAddress( str );
560 void Identity::setPrimaryEmailAddress(
const QString & email )
565 void Identity::setEmailAliases(
const QStringList & aliases )
567 setProperty( QLatin1String(s_emailAliases), aliases );
570 void Identity::setVCardFile(
const QString &str )
575 void Identity::setAttachVcard(
bool attachment)
577 setProperty( QLatin1String(s_attachVcard), attachment );
580 void Identity::setReplyToAddr(
const QString&str )
585 void Identity::setSignatureFile(
const QString &str )
590 void Identity::setSignatureInlineText(
const QString &str )
595 void Identity::setTransport(
const QString &str )
600 void Identity::setFcc(
const QString &str )
605 void Identity::setDrafts(
const QString &str )
610 void Identity::setTemplates(
const QString &str )
615 void Identity::setDictionary(
const QString &str )
620 void Identity::setBcc(
const QString &str )
625 void Identity::setCc(
const QString &str )
635 void Identity::setPreferredCryptoMessageFormat(
const QString &str )
640 void Identity::setXFace(
const QString &str )
642 QString strNew = str;
643 strNew.remove( QLatin1Char(
' ') );
644 strNew.remove( QLatin1Char(
'\n') );
645 strNew.remove( QLatin1Char(
'\r') );
649 void Identity::setXFaceEnabled(
const bool on )
654 void Identity::setSignature(
const Signature &sig )
661 const QString addrSpec = KPIMUtils::extractEmailAddress( addr ).toLower();
667 if ( alias.toLower() == addrSpec ) {
680 const qlonglong val = str.toLongLong(&ok);
689 void Identity::setAutocorrectionLanguage(
const QString& language)
691 setProperty( QLatin1String(s_autocorrectionLanguage), language );
697 const QVariant var =
property(QLatin1String( s_disabledFcc ));
705 void Identity::setDisabledFcc(
bool disable)
707 setProperty( QLatin1String(s_disabledFcc), disable );
712 const QVariant var =
property(QLatin1String( s_pgpautosign ));
720 void Identity::setPgpAutoSign(
bool autoSign)
722 setProperty( QLatin1String(s_pgpautosign), autoSign );
QString drafts() const
The folder where draft messages from this identity will be stored by default.
bool signatureIsPlainFile() const
QString identityName() const
Identity/nickname for this collection.
bool signatureIsCommand() const
QString xface() const
a X-Face header for this identity
QString transport() const
The transport that is set for this identity.
QString fcc() const
The folder where sent messages from this identity will be stored by default.
QByteArray smimeSigningKey() const
The user's S/MIME signing key.
KPIMIDENTITIES_DEPRECATED QString emailAddr() const
email address (without the user name - only name@host)
QString signatureInlineText() const
inline signature
QString vCardFile() const
vCard to attach to outgoing emails
void setIsDefault(bool flag)
Set whether this identity is the default identity.
void setText(const QString &text)
Set the signature text and mark this signature as being of "inline text" type.
QString signatureText(bool *ok=0) const
void setIdentityName(const QString &name)
Identity/nickname for this collection.
bool operator>=(const Identity &other) const
used for sorting
bool operator<=(const Identity &other) const
used for sorting
QString primaryEmailAddress() const
primary email address (without the user name - only name@host).
bool operator<(const Identity &other) const
used for sorting
uint uoid() const
Unique Object Identifier for this identity.
QString signatureFile() const
name of the signature file (with path)
QByteArray pgpEncryptionKey() const
The user's OpenPGP encryption key.
QString fullName() const
Full name of the user.
Identity(const QString &id=QString(), const QString &realName=QString(), const QString &emailAddr=QString(), const QString &organization=QString(), const QString &replyToAddress=QString())
Constructor.
bool isInlinedHtml() const
QString autocorrectionLanguage() const
QString verifyAkonadiId(const QString &str) const
during migration when it failed it can be a string => not a qlonglong akonadi::id => fix it ...
bool operator>(const Identity &other) const
used for sorting
QString cc() const
email addresses for the CC: field
bool signatureIsInline() const
Abstraction of a signature (aka "footer").
bool signatureIsInlinedHtml() const
bool mailingAllowed() const
Tests if there are enough values set to allow mailing.
bool matchesEmailAddress(const QString &addr) const
const QStringList emailAliases() const
email address aliases
QString templates() const
The folder where template messages from this identity will be stored by default.
User identity information.
QString dictionary() const
Dictionary which should be used for spell checking.
void setProperty(const QString &key, const QVariant &value)
Set random properties, when value is empty (for QStrings) or null, the property is deleted...
bool isNull() const
Returns true when the identity contains no values, all null values or only empty values.
bool operator==(const Identity &other) const
used for comparison
void setUoid(uint aUoid)
set the uiod
void writeConfig(KConfigGroup &) const
Write configuration to config.
QByteArray pgpSigningKey() const
The user's OpenPGP signing key.
QString replyToAddr() const
email address for the ReplyTo: field
QString bcc() const
email addresses for the BCC: field
void readConfig(const KConfigGroup &)
Read configuration from config.
QString withSeparator(bool *ok=0) const
QString fullEmailAddr() const
email address in the format "username " suitable for the "From:" field of email messages...
bool useSignatureFile() const
Inline or signature from a file.
QByteArray smimeEncryptionKey() const
The user's S/MIME encryption key.
void setUrl(const QString &url, bool isExecutable=false)
Set the signature URL and mark this signature as being of "from file" resp.
QVariant property(const QString &key) const
Get random properties.
bool operator!=(const Identity &other) const
used for comparison
QString organization() const
The user's organization (optional)