24#include <sonnet/globals.h>
26#include <kconfiggroup.h>
27#include <kpimutils/email.h>
33using namespace KPIMIdentities;
39 const QString &emailAddr,
const QString &organization,
40 const QString &replyToAddr )
50 setProperty( QLatin1String(s_defaultDomainName), QHostInfo::localHostName());
58 if ( !identityNull ) {
67 QHash<QString, QVariant>::const_iterator i = mPropertiesMap.constBegin();
68 while ( i != mPropertiesMap.constEnd() ) {
70 if ( i.key() == QLatin1String(s_defaultDomainName) ) {
75 if( i.key() == QLatin1String(s_disabledFcc) && i.value().toBool() ==
false ) {
80 if ( !( i.key() == QLatin1String(s_uoid) && i.value().toUInt() == 0 ) ) {
81 if ( !i.value().isNull() ||
82 ( i.value().type() == QVariant::String && !i.value().toString().isEmpty() ) ) {
94 QMap<QString, QString> entries = config.entryMap();
95 QMap<QString, QString>::const_iterator i = entries.constBegin();
96 QMap<QString, QString>::const_iterator end = entries.constEnd();
98 if ( i.key() == QLatin1String(s_emailAliases) ) {
100 mPropertiesMap.insert( i.key(), config.readEntry( i.key(), QStringList() ) );
102 mPropertiesMap.insert( i.key(), config.readEntry( i.key() ) );
106 mSignature.readConfig( config );
111 QHash<QString, QVariant>::const_iterator i = mPropertiesMap.constBegin();
112 QHash<QString, QVariant>::const_iterator end = mPropertiesMap.constEnd();
114 config.writeEntry( i.key(), i.value() );
115 kDebug( 5325 ) <<
"Store:" << i.key() <<
":" << i.value();
118 mSignature.writeConfig( config );
123 return !
property( QLatin1String(s_email) ).toString().isEmpty();
126QString Identity::mimeDataType()
128 return QLatin1String(
"application/x-kmail-identity-drag");
131bool Identity::canDecode(
const QMimeData*md )
133 return md->hasFormat( mimeDataType() );
136void Identity::populateMimeData( QMimeData*md )
140 QDataStream s( &a, QIODevice::WriteOnly );
143 md->setData( mimeDataType(), a );
146Identity Identity::fromMimeData(
const QMimeData*md )
149 if ( canDecode( md ) ) {
150 QByteArray ba = md->data( mimeDataType() );
151 QDataStream s( &ba, QIODevice::ReadOnly );
159QDataStream &KPIMIdentities::operator<<
162 return stream << static_cast<quint32>( i.
uoid() )
179 << i.mPropertiesMap[QLatin1String(s_signature)]
182 << i.preferredCryptoMessageFormat()
191QDataStream &KPIMIdentities::operator>>
197 >> i.mPropertiesMap[QLatin1String(s_identity)]
198 >> i.mPropertiesMap[QLatin1String(s_name)]
199 >> i.mPropertiesMap[QLatin1String(s_organization)]
200 >> i.mPropertiesMap[QLatin1String(s_pgps)]
201 >> i.mPropertiesMap[QLatin1String(s_pgpe)]
202 >> i.mPropertiesMap[QLatin1String(s_smimes)]
203 >> i.mPropertiesMap[QLatin1String(s_smimee)]
204 >> i.mPropertiesMap[QLatin1String(s_email)]
205 >> i.mPropertiesMap[QLatin1String(s_emailAliases)]
206 >> i.mPropertiesMap[QLatin1String(s_replyto)]
207 >> i.mPropertiesMap[QLatin1String(s_bcc)]
208 >> i.mPropertiesMap[QLatin1String(s_vcard)]
209 >> i.mPropertiesMap[QLatin1String(s_transport)]
210 >> i.mPropertiesMap[QLatin1String(s_fcc)]
211 >> i.mPropertiesMap[QLatin1String(s_drafts)]
212 >> i.mPropertiesMap[QLatin1String(s_templates)]
213 >> i.mPropertiesMap[QLatin1String(s_signature)]
214 >> i.mPropertiesMap[QLatin1String(s_dict)]
215 >> i.mPropertiesMap[QLatin1String(s_xface)]
216 >> i.mPropertiesMap[QLatin1String(s_prefcrypt)]
217 >> i.mPropertiesMap[QLatin1String(s_cc)]
218 >> i.mPropertiesMap[QLatin1String(s_attachVcard)]
219 >> i.mPropertiesMap[QLatin1String(s_autocorrectionLanguage)]
220 >> i.mPropertiesMap[QLatin1String(s_disabledFcc)]
221 >> i.mPropertiesMap[QLatin1String(s_pgpautosign)]
222 >> i.mPropertiesMap[QLatin1String(s_defaultDomainName)];
262 return mPropertiesMap == other.mPropertiesMap &&
263 mSignature == other.mSignature;
275 return mPropertiesMap.value( key );
280 const QString name = mPropertiesMap.value( QLatin1String(s_name) ).toString();
281 const QString mail = mPropertiesMap.value( QLatin1String(s_email) ).toString();
283 if ( name.isEmpty() ) {
287 const QString specials( QLatin1String(
"()<>@,.;:[]") );
292 bool needsQuotes=
false;
293 const int nameLength( name.length() );
294 for (
int i=0; i < nameLength; i++ ) {
295 if ( specials.contains( name[i] ) ) {
297 }
else if ( name[i] == QLatin1Char(
'\\') || name[i] == QLatin1Char(
'"') ) {
299 result += QLatin1Char(
'\\');
305 result.insert( 0, QLatin1Char(
'"') );
306 result += QLatin1Char(
'"');
309 result += QLatin1String(
" <") + mail + QLatin1Char(
'>');
316 return property( QLatin1String( s_identity ) ).toString();
336 return property( QLatin1String( s_uoid ) ).toInt();
341 return property( QLatin1String( s_name ) ).toString();
346 return property( QLatin1String( s_organization ) ).toString();
351 return property( QLatin1String( s_pgpe ) ).toByteArray();
356 return property( QLatin1String( s_pgps ) ).toByteArray();
361 return property( QLatin1String( s_smimee ) ).toByteArray();
366 return property( QLatin1String( s_smimes ) ).toByteArray();
369QString Identity::preferredCryptoMessageFormat()
const
371 return property( QLatin1String( s_prefcrypt ) ).toString();
381 return property( QLatin1String( s_email ) ).toString();
386 return property( QLatin1String( s_emailAliases ) ).toStringList();
391 return property( QLatin1String( s_vcard ) ).toString();
396 return property( QLatin1String( s_attachVcard ) ).toBool();
401 return property( QLatin1String( s_replyto ) ).toString();
406 return property( QLatin1String( s_bcc ) ).toString();
411 return property( QLatin1String( s_cc ) ).toString();
419bool Identity::isXFaceEnabled()
const
421 return property( QLatin1String( s_xfaceenabled ) ).toBool();
426 return property( QLatin1String( s_xface ) ).toString();
431 const QString dict =
property( QLatin1String( s_dict ) ).toString();
432 if (dict.isEmpty()) {
433 return Sonnet::defaultLanguageName();
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 );
518void Identity::setFullName(
const QString &str )
523void Identity::setOrganization(
const QString &str )
528void Identity::setPGPSigningKey(
const QByteArray &str )
530 setProperty( QLatin1String(s_pgps), QLatin1String( str ) );
533void Identity::setPGPEncryptionKey(
const QByteArray &str )
535 setProperty( QLatin1String(s_pgpe), QLatin1String( str ) );
538void Identity::setSMIMESigningKey(
const QByteArray &str )
540 setProperty( QLatin1String(s_smimes), QLatin1String( str ) );
543void Identity::setSMIMEEncryptionKey(
const QByteArray &str )
545 setProperty( QLatin1String(s_smimee), QLatin1String( str ) );
548void Identity::setEmailAddr(
const QString &str )
550 setPrimaryEmailAddress( str );
553void Identity::setPrimaryEmailAddress(
const QString & email )
558void Identity::setEmailAliases(
const QStringList & aliases )
560 setProperty( QLatin1String(s_emailAliases), aliases );
563void Identity::setVCardFile(
const QString &str )
568void Identity::setAttachVcard(
bool attachment)
570 setProperty( QLatin1String(s_attachVcard), attachment );
573void Identity::setReplyToAddr(
const QString&str )
578void Identity::setSignatureFile(
const QString &str )
583void Identity::setSignatureInlineText(
const QString &str )
588void Identity::setTransport(
const QString &str )
593void Identity::setFcc(
const QString &str )
598void Identity::setDrafts(
const QString &str )
603void Identity::setTemplates(
const QString &str )
608void Identity::setDictionary(
const QString &str )
613void Identity::setBcc(
const QString &str )
618void Identity::setCc(
const QString &str )
628void Identity::setPreferredCryptoMessageFormat(
const QString &str )
633void Identity::setXFace(
const QString &str )
635 QString strNew = str;
636 strNew.remove( QLatin1Char(
' ') );
637 strNew.remove( QLatin1Char(
'\n') );
638 strNew.remove( QLatin1Char(
'\r') );
642void Identity::setXFaceEnabled(
const bool on )
647void 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);
682void Identity::setAutocorrectionLanguage(
const QString& language)
684 setProperty( QLatin1String(s_autocorrectionLanguage), language );
690 const QVariant var =
property(QLatin1String( s_disabledFcc ));
698void Identity::setDisabledFcc(
bool disable)
700 setProperty( QLatin1String(s_disabledFcc), disable );
705 const QVariant var =
property(QLatin1String( s_pgpautosign ));
713void Identity::setPgpAutoSign(
bool autoSign)
715 setProperty( QLatin1String(s_pgpautosign), autoSign );
720 return property( QLatin1String( s_defaultDomainName ) ).toString();
723void Identity::setDefaultDomainName(
const QString &domainName)
725 setProperty( QLatin1String(s_defaultDomainName), domainName );
User identity information.
QString primaryEmailAddress() const
primary email address (without the user name - only name@host).
bool operator!=(const Identity &other) const
used for comparison
QString signatureText(bool *ok=0) const
QString fullName() const
Full name of the user.
QString defaultDomainName() const
bool signatureIsPlainFile() const
QString templates() const
The folder where template messages from this identity will be stored by default.
bool signatureIsCommand() const
bool matchesEmailAddress(const QString &addr) const
bool operator==(const Identity &other) const
used for comparison
const QStringList emailAliases() const
email address aliases
void setUoid(uint aUoid)
set the uiod
QString signatureFile() const
name of the signature file (with path)
bool mailingAllowed() const
Tests if there are enough values set to allow mailing.
QString fcc() const
The folder where sent messages from this identity will be stored by default.
bool operator<=(const Identity &other) const
used for sorting
void setIsDefault(bool flag)
Set whether this identity is the default identity.
QVariant property(const QString &key) const
Get random properties.
QString drafts() const
The folder where draft messages from this identity will be stored by default.
QString signatureInlineText() const
inline signature
QByteArray smimeSigningKey() const
The user's S/MIME signing key.
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 sorting
QByteArray pgpSigningKey() const
The user's OpenPGP signing key.
QString identityName() const
Identity/nickname for this collection.
void writeConfig(KConfigGroup &) const
Write configuration to config.
void setProperty(const QString &key, const QVariant &value)
Set random properties, when value is empty (for QStrings) or null, the property is deleted.
QString autocorrectionLanguage() const
void readConfig(const KConfigGroup &)
Read configuration from config.
QString dictionary() const
Dictionary which should be used for spell checking.
Identity(const QString &id=QString(), const QString &realName=QString(), const QString &emailAddr=QString(), const QString &organization=QString(), const QString &replyToAddress=QString())
Constructor.
QString organization() const
The user's organization (optional)
QString fullEmailAddr() const
email address in the format "username <name@host>" suitable for the "From:" field of email messages.
bool useSignatureFile() const
Inline or signature from a file.
QString cc() const
email addresses for the CC: field
QString bcc() const
email addresses for the BCC: field
bool operator<(const Identity &other) const
used for sorting
bool signatureIsInlinedHtml() const
QString transport() const
The transport that is set for this identity.
QString replyToAddr() const
email address for the ReplyTo: field
bool operator>(const Identity &other) const
used for sorting
KPIMIDENTITIES_DEPRECATED QString emailAddr() const
email address (without the user name - only name@host)
bool signatureIsInline() const
QByteArray smimeEncryptionKey() const
The user's S/MIME encryption key.
void setIdentityName(const QString &name)
Identity/nickname for this collection.
QString verifyAkonadiId(const QString &str) const
during migration when it failed it can be a string => not a qlonglong akonadi::id => fix it
uint uoid() const
Unique Object Identifier for this identity.
QString vCardFile() const
vCard to attach to outgoing emails
QByteArray pgpEncryptionKey() const
The user's OpenPGP encryption key.
QString xface() const
a X-Face header for this identity
Abstraction of a signature (aka "footer").
void setText(const QString &text)
Set the signature text and mark this signature as being of "inline text" type.
void setUrl(const QString &url, bool isExecutable=false)
Set the signature URL and mark this signature as being of "from file" resp.
bool isInlinedHtml() const
QString withSeparator(bool *ok=0) const