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 <tdepimmacros.h>
00013 
00014 #include <tqstring.h>
00015 #include <tqcstring.h>
00016 #include <tqstringlist.h>
00017 
00018 class TDEProcess;
00019 namespace KPIM {
00020   class Identity;
00021   class Signature;
00022 }
00023 class TDEConfigBase;
00024 class IdentityList;
00025 class TQDataStream;
00026 
00027 namespace KPIM {
00028 
00029 KDE_EXPORT TQDataStream & operator<<( TQDataStream & stream, const KPIM::Signature & sig );
00030 KDE_EXPORT TQDataStream & operator>>( TQDataStream & stream, KPIM::Signature & sig );
00031 
00032 KDE_EXPORT TQDataStream & operator<<( TQDataStream & stream, const KPIM::Identity & ident );
00033 KDE_EXPORT TQDataStream & operator>>( TQDataStream & stream, KPIM::Identity & ident );
00034 
00039 class KDE_EXPORT Signature {
00040   friend class Identity;
00041 
00042   friend TQDataStream & KPIM::operator<<( TQDataStream & stream, const Signature & sig );
00043   friend TQDataStream & KPIM::operator>>( TQDataStream & stream, Signature & sig );
00044 
00045 public:
00047   enum Type { Disabled = 0, Inlined = 1, FromFile = 2, FromCommand = 3 };
00048 
00050   bool operator==( const Signature & other ) const;
00051 
00053   Signature();
00055   Signature( const TQString & text );
00057   Signature( const TQString & url, bool isExecutable );
00058 
00060   TQString rawText( bool * ok=0 ) const;
00061 
00064   TQString withSeparator( bool * ok=0 ) const;
00065 
00068   void setText( const TQString & text ) { mText = text; }
00069   TQString text() const { return mText; }
00070 
00073   void setUrl( const TQString & url, bool isExecutable=false );
00074   TQString url() const { return mUrl; }
00075 
00077   Type type() const { return mType; }
00078   void setType( Type type ) { mType = type; }
00079 
00080 protected:
00081   void writeConfig( TDEConfigBase * config ) const;
00082   void readConfig( const TDEConfigBase * config );
00083 
00084 private:
00085   TQString textFromFile( bool * ok ) const;
00086   TQString textFromCommand( bool * ok ) const;
00087 
00088 private:
00089   TQString mUrl;
00090   TQString mText;
00091   Type    mType;
00092 };
00093 
00095 class KDE_EXPORT Identity
00096 {
00097   // only the identity manager should be able to construct and
00098   // destruct us, but then we get into problems with using
00099   // TQValueList<Identity> and especially qHeapSort().
00100   friend class IdentityManager;
00101 
00102   friend TQDataStream & operator<<( TQDataStream & stream, const KPIM::Identity & ident );
00103   friend TQDataStream & operator>>( TQDataStream & stream, KPIM::Identity & ident );
00104 
00105 public:
00106   typedef TQValueList<Identity> List;
00107 
00109   bool operator==( const Identity & other ) const;
00110 
00111   bool operator!=( const Identity & other ) const {
00112     return !operator==( other );
00113   }
00114 
00116   bool operator<( const Identity & other ) const {
00117     if ( isDefault() ) return true;
00118     if ( other.isDefault() ) return false;
00119     return identityName() < other.identityName();
00120   }
00121   bool operator>( const Identity & other ) const {
00122     if ( isDefault() ) return false;
00123     if ( other.isDefault() ) return true;
00124     return identityName() > other.identityName();
00125   }
00126   bool operator<=( const Identity & other ) const {
00127     return !operator>( other );
00128   }
00129   bool operator>=( const Identity & other ) const {
00130     return !operator<( other );
00131   }
00132 
00134   explicit Identity( const TQString & id=TQString(),
00135              const TQString & realName=TQString(),
00136              const TQString & emailAddr=TQString(),
00137              const TQString & organization=TQString(),
00138              const TQString & replyToAddress=TQString() );
00139 
00141   ~Identity();
00142 
00143 protected:
00146   void readConfig( const TDEConfigBase * );
00147 
00150   void writeConfig( TDEConfigBase * ) const;
00151 
00152 public:
00154   bool mailingAllowed() const;
00155 
00157   TQString identityName() const { return mIdentity; }
00158   void setIdentityName( const TQString & name );
00159 
00161   bool isDefault() const { return mIsDefault; }
00162 
00164   uint uoid() const { return mUoid; }
00165 
00166 protected:
00176   void setIsDefault( bool flag );
00177 
00178   void setUoid( uint aUoid ) { mUoid = aUoid; }
00179 
00180 public:
00182   TQString fullName() const { return mFullName; }
00183   void setFullName(const TQString&);
00184 
00186   TQString organization() const { return mOrganization; }
00187   void setOrganization(const TQString&);
00188 
00189   KDE_DEPRECATED TQCString pgpIdentity() const { return pgpEncryptionKey(); }
00190   KDE_DEPRECATED void setPgpIdentity( const TQCString & key ) {
00191     setPGPEncryptionKey( key );
00192     setPGPSigningKey( key );
00193   }
00194 
00196   TQCString pgpEncryptionKey() const { return mPGPEncryptionKey; }
00197   void setPGPEncryptionKey( const TQCString & key );
00198 
00200   TQCString pgpSigningKey() const { return mPGPSigningKey; }
00201   void setPGPSigningKey( const TQCString & key );
00202 
00204   TQCString smimeEncryptionKey() const { return mSMIMEEncryptionKey; }
00205   void setSMIMEEncryptionKey( const TQCString & key );
00206 
00208   TQCString smimeSigningKey() const { return mSMIMESigningKey; }
00209   void setSMIMESigningKey( const TQCString & key );
00210 
00211   Kleo::CryptoMessageFormat preferredCryptoMessageFormat() const { return mPreferredCryptoMessageFormat; }
00212   void setPreferredCryptoMessageFormat( Kleo::CryptoMessageFormat format ) { mPreferredCryptoMessageFormat = format; }
00213 
00215   KDE_DEPRECATED TQString emailAddr() const { return primaryEmailAddress(); }
00216   KDE_DEPRECATED void setEmailAddr( const TQString & email ) { setPrimaryEmailAddress( email ); }
00217 
00220   TQString primaryEmailAddress() const { return mEmailAddr; }
00221   void setPrimaryEmailAddress( const TQString & email );
00222 
00224   const TQStringList & emailAliases() const { return mEmailAliases; }
00225   void setEmailAliases( const TQStringList & );
00226 
00227   bool matchesEmailAddress( const TQString & addr ) const;
00228 
00230   TQString vCardFile() const { return mVCardFile; }
00231   void setVCardFile(const TQString&);
00232 
00235   TQString fullEmailAddr() const;
00236 
00238   TQString replyToAddr() const { return mReplyToAddr; }
00239   void setReplyToAddr(const TQString&);
00240 
00242   TQString bcc() const { return mBcc; }
00243   void setBcc(const TQString& aBcc) { mBcc = aBcc; }
00244 
00245   void setSignature( const Signature & sig ) { mSignature = sig; }
00246   Signature & signature() /* _not_ const! */ { return mSignature; }
00247   const Signature & signature() const { return mSignature; }
00248 
00249 protected:
00251   bool signatureIsCommand() const { return mSignature.type() == Signature::FromCommand; }
00253   bool signatureIsPlainFile() const { return mSignature.type() == Signature::FromFile; }
00255   bool signatureIsInline() const { return mSignature.type() == Signature::Inlined; }
00256 
00258   TQString signatureFile() const { return mSignature.url(); }
00259   void setSignatureFile(const TQString&);
00260 
00262   TQString signatureInlineText() const { return mSignature.text();}
00263   void setSignatureInlineText(const TQString&);
00264 
00266   bool useSignatureFile() const { return signatureIsPlainFile() || signatureIsCommand(); }
00267 
00268 public:
00274   TQString signatureText( bool * ok=0) const;
00275 
00278   TQString transport() const { return mTransport; }
00279   void setTransport(const TQString&);
00280 
00283   TQString fcc() const { return mFcc; }
00284   void setFcc(const TQString&);
00285 
00288   TQString drafts() const { return mDrafts; }
00289   void setDrafts(const TQString&);
00290 
00293   TQString templates() const { return mTemplates; }
00294   void setTemplates( const TQString& );
00295 
00297   TQString dictionary() const { return mDictionary; }
00298   void setDictionary( const TQString& );
00299 
00301   TQString xface() const { return mXFace; }
00302   void setXFace( const TQString& );
00303   bool isXFaceEnabled() const { return mXFaceEnabled; }
00304   void setXFaceEnabled( const bool );
00305 
00306   static const Identity& null();
00307   bool isNull() const;
00308 protected:
00309   // if you add new members, make sure they have an operator= (or the
00310   // compiler can synthesize one) and amend Identity::operator==,
00311   // isNull(), readConfig() and writeConfig() as well as operator<<
00312   // and operator>> accordingly:
00313   uint mUoid;
00314   TQString mIdentity, mFullName, mEmailAddr, mOrganization;
00315   TQStringList mEmailAliases;
00316   TQString mReplyToAddr;
00317   TQString mBcc;
00318   TQString mVCardFile;
00319   TQCString mPGPEncryptionKey, mPGPSigningKey, mSMIMEEncryptionKey, mSMIMESigningKey;
00320   TQString mFcc, mDrafts, mTemplates, mTransport;
00321   TQString mDictionary;
00322   TQString mXFace;
00323   bool mXFaceEnabled;
00324   Signature mSignature;
00325   bool      mIsDefault;
00326   Kleo::CryptoMessageFormat mPreferredCryptoMessageFormat;
00327 };
00328 
00329 } // namespace KPIM
00330 
00331 #endif /*kpim_identity_h*/