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 <tqstring.h>
00015 #include <tqcstring.h>
00016 #include <tqstringlist.h>
00017 
00018 class KProcess;
00019 namespace KPIM {
00020   class Identity;
00021   class Signature;
00022 }
00023 class KConfigBase;
00024 class IdentityList;
00025 class TQDataStream;
00026 
00027 namespace KPIM {
00028 
00033 class KDE_EXPORT Signature {
00034   friend class Identity;
00035 
00036   friend TQDataStream & KPIM::operator<<( TQDataStream & stream, const Signature & sig );
00037   friend TQDataStream & KPIM::operator>>( TQDataStream & 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 TQString & text );
00051   Signature( const TQString & url, bool isExecutable );
00052 
00054   TQString rawText( bool * ok=0 ) const;
00055 
00058   TQString withSeparator( bool * ok=0 ) const;
00059 
00062   void setText( const TQString & text ) { mText = text; }
00063   TQString text() const { return mText; }
00064 
00067   void setUrl( const TQString & url, bool isExecutable=false );
00068   TQString 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   TQString textFromFile( bool * ok ) const;
00080   TQString textFromCommand( bool * ok ) const;
00081 
00082 private:
00083   TQString mUrl;
00084   TQString 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   // TQValueList<Identity> and especially qHeapSort().
00094   friend class IdentityManager;
00095 
00096   friend TQDataStream & operator<<( TQDataStream & stream, const KPIM::Identity & ident );
00097   friend TQDataStream & operator>>( TQDataStream & stream, KPIM::Identity & ident );
00098 
00099 public:
00100   typedef TQValueList<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 TQString & id=TQString(),
00129              const TQString & realName=TQString(),
00130              const TQString & emailAddr=TQString(),
00131              const TQString & organization=TQString(),
00132              const TQString & replyToAddress=TQString() );
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   TQString identityName() const { return mIdentity; }
00152   void setIdentityName( const TQString & 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   TQString fullName() const { return mFullName; }
00177   void setFullName(const TQString&);
00178 
00180   TQString organization() const { return mOrganization; }
00181   void setOrganization(const TQString&);
00182 
00183   KDE_DEPRECATED TQCString pgpIdentity() const { return pgpEncryptionKey(); }
00184   KDE_DEPRECATED void setPgpIdentity( const TQCString & key ) {
00185     setPGPEncryptionKey( key );
00186     setPGPSigningKey( key );
00187   }
00188 
00190   TQCString pgpEncryptionKey() const { return mPGPEncryptionKey; }
00191   void setPGPEncryptionKey( const TQCString & key );
00192 
00194   TQCString pgpSigningKey() const { return mPGPSigningKey; }
00195   void setPGPSigningKey( const TQCString & key );
00196 
00198   TQCString smimeEncryptionKey() const { return mSMIMEEncryptionKey; }
00199   void setSMIMEEncryptionKey( const TQCString & key );
00200 
00202   TQCString smimeSigningKey() const { return mSMIMESigningKey; }
00203   void setSMIMESigningKey( const TQCString & key );
00204 
00205   Kleo::CryptoMessageFormat preferredCryptoMessageFormat() const { return mPreferredCryptoMessageFormat; }
00206   void setPreferredCryptoMessageFormat( Kleo::CryptoMessageFormat format ) { mPreferredCryptoMessageFormat = format; }
00207 
00209   KDE_DEPRECATED TQString emailAddr() const { return primaryEmailAddress(); }
00210   KDE_DEPRECATED void setEmailAddr( const TQString & email ) { setPrimaryEmailAddress( email ); }
00211 
00214   TQString primaryEmailAddress() const { return mEmailAddr; }
00215   void setPrimaryEmailAddress( const TQString & email );
00216 
00218   const TQStringList & emailAliases() const { return mEmailAliases; }
00219   void setEmailAliases( const TQStringList & );
00220 
00221   bool matchesEmailAddress( const TQString & addr ) const;
00222 
00224   TQString vCardFile() const { return mVCardFile; }
00225   void setVCardFile(const TQString&);
00226 
00229   TQString fullEmailAddr() const;
00230 
00232   TQString replyToAddr() const { return mReplyToAddr; }
00233   void setReplyToAddr(const TQString&);
00234 
00236   TQString bcc() const { return mBcc; }
00237   void setBcc(const TQString& 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   TQString signatureFile() const { return mSignature.url(); }
00253   void setSignatureFile(const TQString&);
00254 
00256   TQString signatureInlineText() const { return mSignature.text();}
00257   void setSignatureInlineText(const TQString&);
00258 
00260   bool useSignatureFile() const { return signatureIsPlainFile() || signatureIsCommand(); }
00261 
00262 public:
00268   TQString signatureText( bool * ok=0) const;
00269 
00272   TQString transport() const { return mTransport; }
00273   void setTransport(const TQString&);
00274 
00277   TQString fcc() const { return mFcc; }
00278   void setFcc(const TQString&);
00279 
00282   TQString drafts() const { return mDrafts; }
00283   void setDrafts(const TQString&);
00284 
00287   TQString templates() const { return mTemplates; }
00288   void setTemplates( const TQString& );
00289 
00291   TQString dictionary() const { return mDictionary; }
00292   void setDictionary( const TQString& );
00293 
00295   TQString xface() const { return mXFace; }
00296   void setXFace( const TQString& );
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   TQString mIdentity, mFullName, mEmailAddr, mOrganization;
00309   TQStringList mEmailAliases;
00310   TQString mReplyToAddr;
00311   TQString mBcc;
00312   TQString mVCardFile;
00313   TQCString mPGPEncryptionKey, mPGPSigningKey, mSMIMEEncryptionKey, mSMIMESigningKey;
00314   TQString mFcc, mDrafts, mTemplates, mTransport;
00315   TQString mDictionary;
00316   TQString mXFace;
00317   bool mXFaceEnabled;
00318   Signature mSignature;
00319   bool      mIsDefault;
00320   Kleo::CryptoMessageFormat mPreferredCryptoMessageFormat;
00321 };
00322 
00323 KDE_EXPORT TQDataStream & operator<<( TQDataStream & stream, const KPIM::Signature & sig );
00324 KDE_EXPORT TQDataStream & operator>>( TQDataStream & stream, KPIM::Signature & sig );
00325 
00326 KDE_EXPORT TQDataStream & operator<<( TQDataStream & stream, const KPIM::Identity & ident );
00327 KDE_EXPORT TQDataStream & operator>>( TQDataStream & stream, KPIM::Identity & ident );
00328 
00329 } // namespace KPIM
00330 
00331 #endif /*kpim_identity_h*/