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*/