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