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)
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.
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 @p 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 <name@host>" 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)