libkpimidentities

identity.h

00001 /* -*- mode: C++; c-file-style: "gnu" -*-
00002  * User identity information
00003  *
00004  * Author: Stefan Taferner <taferner@kde.org>
00005  * This code is under GPL
00006  */
00007 #ifndef kpim_identity_h
00008 #define kpim_identity_h
00009 
00010 #include <kleo/enum.h>
00011 
00012 #include <kdepimmacros.h>
00013 
00014 #include <qstring.h>
00015 #include <qcstring.h>
00016 #include <qstringlist.h>
00017 
00018 class KProcess;
00019 namespace KPIM {
00020   class Identity;
00021   class Signature;
00022 }
00023 class KConfigBase;
00024 class IdentityList;
00025 class QDataStream;
00026 
00027 namespace KPIM {
00028 
00033 class KDE_EXPORT Signature {
00034   friend class Identity;
00035 
00036   friend QDataStream & KPIM::operator<<( QDataStream & stream, const Signature & sig );
00037   friend QDataStream & KPIM::operator>>( QDataStream & stream, Signature & sig );
00038 
00039 public:
00041   enum Type { Disabled = 0, Inlined = 1, FromFile = 2, FromCommand = 3 };
00042 
00044   bool operator==( const Signature & other ) const;
00045 
00047   Signature();
00049   Signature( const QString & text );
00051   Signature( const QString & url, bool isExecutable );
00052 
00054   QString rawText( bool * ok=0 ) const;
00055 
00058   QString withSeparator( bool * ok=0 ) const;
00059 
00062   void setText( const QString & text ) { mText = text; }
00063   QString text() const { return mText; }
00064 
00067   void setUrl( const QString & url, bool isExecutable=false );
00068   QString url() const { return mUrl; }
00069 
00071   Type type() const { return mType; }
00072   void setType( Type type ) { mType = type; }
00073 
00074 protected:
00075   void writeConfig( KConfigBase * config ) const;
00076   void readConfig( const KConfigBase * config );
00077 
00078 private:
00079   QString textFromFile( bool * ok ) const;
00080   QString textFromCommand( bool * ok ) const;
00081 
00082 private:
00083   QString mUrl;
00084   QString mText;
00085   Type    mType;
00086 };
00087 
00089 class KDE_EXPORT Identity
00090 {
00091   // only the identity manager should be able to construct and
00092   // destruct us, but then we get into problems with using
00093   // QValueList<Identity> and especially qHeapSort().
00094   friend class IdentityManager;
00095 
00096   friend QDataStream & operator<<( QDataStream & stream, const KPIM::Identity & ident );
00097   friend QDataStream & operator>>( QDataStream & stream, KPIM::Identity & ident );
00098 
00099 public:
00100   typedef QValueList<Identity> List;
00101 
00103   bool operator==( const Identity & other ) const;
00104 
00105   bool operator!=( const Identity & other ) const {
00106     return !operator==( other );
00107   }
00108 
00110   bool operator<( const Identity & other ) const {
00111     if ( isDefault() ) return true;
00112     if ( other.isDefault() ) return false;
00113     return identityName() < other.identityName();
00114   }
00115   bool operator>( const Identity & other ) const {
00116     if ( isDefault() ) return false;
00117     if ( other.isDefault() ) return true;
00118     return identityName() > other.identityName();
00119   }
00120   bool operator<=( const Identity & other ) const {
00121     return !operator>( other );
00122   }
00123   bool operator>=( const Identity & other ) const {
00124     return !operator<( other );
00125   }
00126 
00128   explicit Identity( const QString & id=QString::null,
00129              const QString & realName=QString::null,
00130              const QString & emailAddr=QString::null,
00131              const QString & organization=QString::null,
00132              const QString & replyToAddress=QString::null );
00133 
00135   ~Identity();
00136 
00137 protected:
00140   void readConfig( const KConfigBase * );
00141 
00144   void writeConfig( KConfigBase * ) const;
00145 
00146 public:
00148   bool mailingAllowed() const;
00149 
00151   QString identityName() const { return mIdentity; }
00152   void setIdentityName( const QString & name );
00153 
00155   bool isDefault() const { return mIsDefault; }
00156 
00158   uint uoid() const { return mUoid; }
00159 
00160 protected:
00170   void setIsDefault( bool flag );
00171 
00172   void setUoid( uint aUoid ) { mUoid = aUoid; }
00173 
00174 public:
00176   QString fullName() const { return mFullName; }
00177   void setFullName(const QString&);
00178 
00180   QString organization() const { return mOrganization; }
00181   void setOrganization(const QString&);
00182 
00183   KDE_DEPRECATED QCString pgpIdentity() const { return pgpEncryptionKey(); }
00184   KDE_DEPRECATED void setPgpIdentity( const QCString & key ) {
00185     setPGPEncryptionKey( key );
00186     setPGPSigningKey( key );
00187   }
00188 
00190   QCString pgpEncryptionKey() const { return mPGPEncryptionKey; }
00191   void setPGPEncryptionKey( const QCString & key );
00192 
00194   QCString pgpSigningKey() const { return mPGPSigningKey; }
00195   void setPGPSigningKey( const QCString & key );
00196 
00198   QCString smimeEncryptionKey() const { return mSMIMEEncryptionKey; }
00199   void setSMIMEEncryptionKey( const QCString & key );
00200 
00202   QCString smimeSigningKey() const { return mSMIMESigningKey; }
00203   void setSMIMESigningKey( const QCString & key );
00204 
00205   Kleo::CryptoMessageFormat preferredCryptoMessageFormat() const { return mPreferredCryptoMessageFormat; }
00206   void setPreferredCryptoMessageFormat( Kleo::CryptoMessageFormat format ) { mPreferredCryptoMessageFormat = format; }
00207 
00209   KDE_DEPRECATED QString emailAddr() const { return primaryEmailAddress(); }
00210   KDE_DEPRECATED void setEmailAddr( const QString & email ) { setPrimaryEmailAddress( email ); }
00211 
00214   QString primaryEmailAddress() const { return mEmailAddr; }
00215   void setPrimaryEmailAddress( const QString & email );
00216 
00218   const QStringList & emailAliases() const { return mEmailAliases; }
00219   void setEmailAliases( const QStringList & );
00220 
00221   bool matchesEmailAddress( const QString & addr ) const;
00222 
00224   QString vCardFile() const { return mVCardFile; }
00225   void setVCardFile(const QString&);
00226 
00229   QString fullEmailAddr() const;
00230 
00232   QString replyToAddr() const { return mReplyToAddr; }
00233   void setReplyToAddr(const QString&);
00234 
00236   QString bcc() const { return mBcc; }
00237   void setBcc(const QString& aBcc) { mBcc = aBcc; }
00238 
00239   void setSignature( const Signature & sig ) { mSignature = sig; }
00240   Signature & signature() /* _not_ const! */ { return mSignature; }
00241   const Signature & signature() const { return mSignature; }
00242 
00243 protected:
00245   bool signatureIsCommand() const { return mSignature.type() == Signature::FromCommand; }
00247   bool signatureIsPlainFile() const { return mSignature.type() == Signature::FromFile; }
00249   bool signatureIsInline() const { return mSignature.type() == Signature::Inlined; }
00250 
00252   QString signatureFile() const { return mSignature.url(); }
00253   void setSignatureFile(const QString&);
00254 
00256   QString signatureInlineText() const { return mSignature.text();}
00257   void setSignatureInlineText(const QString&);
00258 
00260   bool useSignatureFile() const { return signatureIsPlainFile() || signatureIsCommand(); }
00261 
00262 public:
00268   QString signatureText( bool * ok=0) const;
00269 
00272   QString transport() const { return mTransport; }
00273   void setTransport(const QString&);
00274 
00277   QString fcc() const { return mFcc; }
00278   void setFcc(const QString&);
00279 
00282   QString drafts() const { return mDrafts; }
00283   void setDrafts(const QString&);
00284 
00287   QString templates() const { return mTemplates; }
00288   void setTemplates( const QString& );
00289 
00291   QString dictionary() const { return mDictionary; }
00292   void setDictionary( const QString& );
00293 
00295   QString xface() const { return mXFace; }
00296   void setXFace( const QString& );
00297   bool isXFaceEnabled() const { return mXFaceEnabled; }
00298   void setXFaceEnabled( const bool );
00299 
00300   static const Identity& null();
00301   bool isNull() const;
00302 protected:
00303   // if you add new members, make sure they have an operator= (or the
00304   // compiler can synthesize one) and amend Identity::operator==,
00305   // isNull(), readConfig() and writeConfig() as well as operator<<
00306   // and operator>> accordingly:
00307   uint mUoid;
00308   QString mIdentity, mFullName, mEmailAddr, mOrganization;
00309   QStringList mEmailAliases;
00310   QString mReplyToAddr;
00311   QString mBcc;
00312   QString mVCardFile;
00313   QCString mPGPEncryptionKey, mPGPSigningKey, mSMIMEEncryptionKey, mSMIMESigningKey;
00314   QString mFcc, mDrafts, mTemplates, mTransport;
00315   QString mDictionary;
00316   QString mXFace;
00317   bool mXFaceEnabled;
00318   Signature mSignature;
00319   bool      mIsDefault;
00320   Kleo::CryptoMessageFormat mPreferredCryptoMessageFormat;
00321 };
00322 
00323 KDE_EXPORT QDataStream & operator<<( QDataStream & stream, const KPIM::Signature & sig );
00324 KDE_EXPORT QDataStream & operator>>( QDataStream & stream, KPIM::Signature & sig );
00325 
00326 KDE_EXPORT QDataStream & operator<<( QDataStream & stream, const KPIM::Identity & ident );
00327 KDE_EXPORT QDataStream & operator>>( QDataStream & stream, KPIM::Identity & ident );
00328 
00329 } // namespace KPIM
00330 
00331 #endif /*kpim_identity_h*/
KDE Home | KDE Accessibility Home | Description of Access Keys