kde-playground/kdepimlibs/kpimidentities/dpointerforkde5
2015-04-14 21:49:29 +00:00

963 lines
28 KiB
Text

Index: signature.cpp
===================================================================
--- signature.cpp (revision 821148)
+++ signature.cpp (revision 821149)
@@ -33,47 +33,25 @@
using namespace KPIMIdentities;
-Signature::Signature()
- : mType( Disabled ),
- mInlinedHtml( false )
-{}
+/**
+ * Private class that helps to provide binary compatibility between releases.
+ * @internal
+ */
+//@cond PRIVATE
+class KPIMIdentities::Signature::Private
+{
+ public:
+ QString textFromFile( bool *ok ) const;
+ QString textFromCommand( bool *ok ) const;
-Signature::Signature( const QString &text )
- : mText( text ),
- mType( Inlined ),
- mInlinedHtml( false )
-{}
+ QString mUrl;
+ QString mText;
+ Type mType;
+ bool mInlinedHtml;
+};
-Signature::Signature( const QString &url, bool isExecutable )
- : mUrl( url ),
- mType( isExecutable ? FromCommand : FromFile ),
- mInlinedHtml( false )
-{}
-
-QString Signature::rawText( bool *ok ) const
+QString Signature::Private::textFromCommand( bool *ok ) const
{
- switch ( mType ) {
- case Disabled:
- if ( ok ) {
- *ok = true;
- }
- return QString();
- case Inlined:
- if ( ok ) {
- *ok = true;
- }
- return mText;
- case FromFile:
- return textFromFile( ok );
- case FromCommand:
- return textFromCommand( ok );
- };
- kFatal(5325) << "Signature::type() returned unknown value!";
- return QString(); // make compiler happy
-}
-
-QString Signature::textFromCommand( bool *ok ) const
-{
assert( mType == FromCommand );
// handle pathological cases:
@@ -113,7 +91,7 @@
return QString::fromLocal8Bit( output.data(), output.size() );
}
-QString Signature::textFromFile( bool *ok ) const
+QString Signature::Private::textFromFile( bool *ok ) const
{
assert( mType == FromFile );
@@ -138,6 +116,64 @@
return QString::fromLocal8Bit( ba.data(), ba.size() );
}
+//@endcond
+
+Signature::Signature()
+ : d( new Private )
+{
+ d->mType = Disabled;
+ d->mInlinedHtml = false;
+}
+
+Signature::Signature( const QString &text )
+ : d( new Private )
+{
+ d->mText = text;
+ d->mType = Inlined;
+ d->mInlinedHtml = false;
+}
+
+Signature::Signature( const QString &url, bool isExecutable )
+ : d( new Private )
+{
+ d->mUrl = url;
+ d->mType = isExecutable ? FromCommand : FromFile;
+ d->mInlinedHtml = false;
+}
+
+Signature::Signature( const Signature &other )
+ : d( new Private )
+{
+ *d = *other.d;
+}
+
+Signature::~Signature()
+{
+ delete d;
+}
+
+QString Signature::rawText( bool *ok ) const
+{
+ switch ( d->mType ) {
+ case Disabled:
+ if ( ok ) {
+ *ok = true;
+ }
+ return QString();
+ case Inlined:
+ if ( ok ) {
+ *ok = true;
+ }
+ return d->mText;
+ case FromFile:
+ return d->textFromFile( ok );
+ case FromCommand:
+ return d->textFromCommand( ok );
+ };
+ kFatal(5325) << "Signature::type() returned unknown value!";
+ return QString(); // make compiler happy
+}
+
QString Signature::withSeparator( bool *ok ) const
{
QString signature = rawText( ok );
@@ -148,7 +184,7 @@
return signature; // don't add a separator in this case
}
- QString newline = ( isInlinedHtml() && mType == Inlined ) ? "<br>" : "\n";
+ QString newline = ( isInlinedHtml() && d->mType == Inlined ) ? "<br>" : "\n";
if ( signature.startsWith( QString::fromLatin1( "-- " ) + newline )
|| ( signature.indexOf( newline + QString::fromLatin1( "-- " ) +
newline ) != -1 ) ) {
@@ -162,18 +198,18 @@
void Signature::setUrl( const QString &url, bool isExecutable )
{
- mUrl = url;
- mType = isExecutable ? FromCommand : FromFile;
+ d->mUrl = url;
+ d->mType = isExecutable ? FromCommand : FromFile;
}
void Signature::setInlinedHtml( bool isHtml )
{
- mInlinedHtml = isHtml;
+ d->mInlinedHtml = isHtml;
}
bool Signature::isInlinedHtml() const
{
- return mInlinedHtml;
+ return d->mInlinedHtml;
}
// config keys and values:
@@ -191,41 +227,41 @@
{
QString sigType = config.readEntry( sigTypeKey );
if ( sigType == sigTypeInlineValue ) {
- mType = Inlined;
- mInlinedHtml = config.readEntry( sigTypeInlinedHtmlKey, false );
+ d->mType = Inlined;
+ d->mInlinedHtml = config.readEntry( sigTypeInlinedHtmlKey, false );
} else if ( sigType == sigTypeFileValue ) {
- mType = FromFile;
- mUrl = config.readPathEntry( sigFileKey, QString() );
+ d->mType = FromFile;
+ d->mUrl = config.readPathEntry( sigFileKey, QString() );
} else if ( sigType == sigTypeCommandValue ) {
- mType = FromCommand;
- mUrl = config.readPathEntry( sigCommandKey, QString() );
+ d->mType = FromCommand;
+ d->mUrl = config.readPathEntry( sigCommandKey, QString() );
} else {
- mType = Disabled;
+ d->mType = Disabled;
}
- mText = config.readEntry( sigTextKey );
+ d->mText = config.readEntry( sigTextKey );
}
void Signature::writeConfig( KConfigGroup &config ) const
{
- switch ( mType ) {
+ switch ( d->mType ) {
case Inlined:
config.writeEntry( sigTypeKey, sigTypeInlineValue );
- config.writeEntry( sigTypeInlinedHtmlKey, mInlinedHtml );
+ config.writeEntry( sigTypeInlinedHtmlKey, d->mInlinedHtml );
break;
case FromFile:
config.writeEntry( sigTypeKey, sigTypeFileValue );
- config.writePathEntry( sigFileKey, mUrl );
+ config.writePathEntry( sigFileKey, d->mUrl );
break;
case FromCommand:
config.writeEntry( sigTypeKey, sigTypeCommandValue );
- config.writePathEntry( sigCommandKey, mUrl );
+ config.writePathEntry( sigCommandKey, d->mUrl );
break;
case Disabled:
config.writeEntry( sigTypeKey, sigTypeDisabledValue );
default:
break;
}
- config.writeEntry( sigTextKey, mText );
+ config.writeEntry( sigTextKey, d->mText );
}
// --------------------- Operators -------------------//
@@ -233,61 +269,67 @@
QDataStream &KPIMIdentities::operator<<
( QDataStream &stream, const KPIMIdentities::Signature &sig )
{
- return stream << static_cast<quint8>( sig.mType ) << sig.mUrl << sig.mText;
+ return stream << static_cast<quint8>( sig.d->mType ) << sig.d->mUrl << sig.d->mText;
}
QDataStream &KPIMIdentities::operator>>
( QDataStream &stream, KPIMIdentities::Signature &sig )
{
quint8 s;
- stream >> s >> sig.mUrl >> sig.mText;
- sig.mType = static_cast<Signature::Type>( s );
+ stream >> s >> sig.d->mUrl >> sig.d->mText;
+ sig.d->mType = static_cast<Signature::Type>( s );
return stream;
}
bool Signature::operator== ( const Signature &other ) const
{
- if ( mType != other.mType ) {
+ if ( d->mType != other.d->mType ) {
return false;
}
- switch ( mType ) {
+ switch ( d->mType ) {
case Inlined:
- return mText == other.mText;
+ return d->mText == other.d->mText;
case FromFile:
case FromCommand:
- return mUrl == other.mUrl;
+ return d->mUrl == other.d->mUrl;
default:
case Disabled:
return true;
}
}
+Signature Signature::operator=( const Signature &other )
+{
+ *d = *other.d;
+ return *this;
+}
+
// --------------- Getters -----------------------//
QString Signature::text() const
{
- return mText;
+ return d->mText;
}
QString Signature::url() const
{
- return mUrl;
+ return d->mUrl;
}
Signature::Type Signature::type() const
{
- return mType;
+ return d->mType;
}
// --------------- Setters -----------------------//
void Signature::setText( const QString &text )
{
- mText = text;
+ d->mText = text;
}
void Signature::setType( Type type )
{
- mType = type;
+ d->mType = type;
}
Index: signature.h
===================================================================
--- signature.h (revision 821148)
+++ signature.h (revision 821149)
@@ -68,6 +68,7 @@
/** Used for comparison */
bool operator== ( const Signature &other ) const;
+ Signature operator= ( const Signature &other );
/** Constructor for disabled signature */
Signature();
@@ -75,7 +76,12 @@
Signature( const QString &text );
/** Constructor for text from a file or from output of a command */
Signature( const QString &url, bool isExecutable );
+ /** Copy constructor */
+ Signature( const Signature &other );
+ /** Destructor */
+ ~Signature();
+
/** @return the raw signature text as entered resp. read from file. */
QString rawText( bool *ok=0 ) const;
@@ -115,13 +121,10 @@
void readConfig( const KConfigGroup &config );
private:
- QString textFromFile( bool *ok ) const;
- QString textFromCommand( bool *ok ) const;
-
- QString mUrl;
- QString mText;
- Type mType;
- bool mInlinedHtml;
+ //@cond PRIVATE
+ class Private;
+ Private *d;
+ //@endcond
};
}
Index: identitymanager.cpp
===================================================================
--- identitymanager.cpp (revision 821148)
+++ identitymanager.cpp (revision 821149)
@@ -54,9 +54,199 @@
return name;
}
+
+/**
+ * Private class that helps to provide binary compatibility between releases.
+ * @internal
+ */
+//@cond PRIVATE
+class KPIMIdentities::IdentityManager::Private
+{
+ public:
+ Private( KPIMIdentities::IdentityManager* );
+ void writeConfig() const;
+ void readConfig( KConfig *config );
+ void createDefaultIdentity();
+ QStringList groupList( KConfig *config ) const;
+ void slotIdentitiesChanged( const QString &id );
+ KConfig *mConfig;
+
+ QList<Identity> mIdentities;
+ QList<Identity> mShadowIdentities;
+
+ // returns a new Unique Object Identifier
+ int newUoid();
+
+ bool readOnly;
+ KPIMIdentities::IdentityManager *q;
+};
+//@endcond
+
+IdentityManager::Private::Private( KPIMIdentities::IdentityManager *manager): q( manager )
+{
+}
+
+void IdentityManager::Private::writeConfig() const
+{
+ QStringList identities = groupList( mConfig );
+ for ( QStringList::Iterator group = identities.begin();
+ group != identities.end(); ++group )
+ mConfig->deleteGroup( *group );
+ int i = 0;
+ for ( ConstIterator it = mIdentities.begin();
+ it != mIdentities.end(); ++it, ++i ) {
+ KConfigGroup cg( mConfig, QString::fromLatin1( "Identity #%1" ).arg( i ) );
+ (*it).writeConfig( cg );
+ if ( (*it).isDefault() ) {
+ // remember which one is default:
+ KConfigGroup general( mConfig, "General" );
+ general.writeEntry( configKeyDefaultIdentity, (*it).uoid() );
+
+ // Also write the default identity to emailsettings
+ KEMailSettings es;
+ es.setSetting( KEMailSettings::RealName, (*it).fullName() );
+ es.setSetting( KEMailSettings::EmailAddress, (*it).emailAddr() );
+ es.setSetting( KEMailSettings::Organization, (*it).organization() );
+ es.setSetting( KEMailSettings::ReplyToAddress, (*it).replyToAddr() );
+ }
+ }
+ mConfig->sync();
+}
+
+void IdentityManager::Private::readConfig( KConfig *config )
+{
+ mIdentities.clear();
+
+ QStringList identities = groupList( config );
+ if ( identities.isEmpty() ) {
+ return; // nothing to be done...
+ }
+
+ KConfigGroup general( config, "General" );
+ uint defaultIdentity = general.readEntry( configKeyDefaultIdentity, 0 );
+ bool haveDefault = false;
+
+ for ( QStringList::Iterator group = identities.begin();
+ group != identities.end(); ++group ) {
+ KConfigGroup configGroup( config, *group );
+ Identity identity;
+ identity.readConfig( configGroup );
+ if ( !haveDefault && identity.uoid() == defaultIdentity ) {
+ haveDefault = true;
+ identity.setIsDefault( true );
+ }
+ mIdentities << identity;
+ }
+ if ( !haveDefault ) {
+ kWarning( 5325 ) << "IdentityManager: There was no default identity."
+ << "Marking first one as default.";
+ mIdentities.first().setIsDefault( true );
+ }
+ qSort( mIdentities );
+
+ mShadowIdentities = mIdentities;
+}
+
+void IdentityManager::Private::createDefaultIdentity()
+{
+ QString fullName, emailAddress;
+ bool done = false;
+
+ // Check if the application has any settings
+ q->createDefaultIdentity( fullName, emailAddress );
+
+ // If not, then use the kcontrol settings
+ if ( fullName.isEmpty() && emailAddress.isEmpty() ) {
+ KEMailSettings emailSettings;
+ fullName = emailSettings.getSetting( KEMailSettings::RealName );
+ emailAddress = emailSettings.getSetting( KEMailSettings::EmailAddress );
+
+ if ( !fullName.isEmpty() && !emailAddress.isEmpty() ) {
+ q->newFromControlCenter( i18nc( "use default address from control center",
+ "Default" ) );
+ done = true;
+ } else {
+ // If KEmailSettings doesn't have name and address, generate something from KUser
+ KUser user;
+ if ( fullName.isEmpty() ) {
+ fullName = user.property( KUser::FullName ).toString();
+ }
+ if ( emailAddress.isEmpty() ) {
+ emailAddress = user.loginName();
+ if ( !emailAddress.isEmpty() ) {
+ KConfigGroup general( mConfig, "General" );
+ QString defaultdomain = general.readEntry( "Default domain" );
+ if ( !defaultdomain.isEmpty() ) {
+ emailAddress += '@' + defaultdomain;
+ } else {
+ emailAddress.clear();
+ }
+ }
+ }
+ }
+ }
+
+ if ( !done ) {
+ mShadowIdentities << Identity( i18nc( "show default identity", "Default" ), fullName, emailAddress );
+ }
+
+ mShadowIdentities.last().setIsDefault( true );
+ mShadowIdentities.last().setUoid( newUoid() );
+ if ( readOnly ) { // commit won't do it in readonly mode
+ mIdentities = mShadowIdentities;
+ }
+}
+
+QStringList IdentityManager::Private::groupList( KConfig *config ) const
+{
+ return config->groupList().filter( QRegExp( "^Identity #\\d+$" ) );
+}
+
+int IdentityManager::Private::newUoid()
+{
+ int uoid;
+
+ // determine the UOIDs of all saved identities
+ QList<uint> usedUOIDs;
+ for ( QList<Identity>::ConstIterator it = mIdentities.begin();
+ it != mIdentities.end(); ++it )
+ usedUOIDs << (*it).uoid();
+
+ if ( q->hasPendingChanges() ) {
+ // add UOIDs of all shadow identities. Yes, we will add a lot of duplicate
+ // UOIDs, but avoiding duplicate UOIDs isn't worth the effort.
+ for ( QList<Identity>::ConstIterator it = mShadowIdentities.begin();
+ it != mShadowIdentities.end(); ++it ) {
+ usedUOIDs << (*it).uoid();
+ }
+ }
+
+ usedUOIDs << 0; // no UOID must be 0 because this value always refers to the
+ // default identity
+
+ do {
+ uoid = KRandom::random();
+ } while ( usedUOIDs.indexOf( uoid ) != -1 );
+
+ return uoid;
+}
+
+void IdentityManager::Private::slotIdentitiesChanged( const QString &id )
+{
+ kDebug( 5325 ) <<" KPIMIdentities::IdentityManager::slotIdentitiesChanged :" << id;
+ if ( id != QDBusConnection::sessionBus().baseService() ) {
+ mConfig->reparseConfiguration();
+ Q_ASSERT( !q->hasPendingChanges() );
+ readConfig( mConfig );
+ emit q->changed();
+ }
+}
+
+// --- non private implementation -------
+
IdentityManager::IdentityManager( bool readonly, QObject *parent,
const char *name )
- : QObject( parent )
+ : QObject( parent ), d( new Private( this ) )
{
setObjectName( name );
new IdentityManagerAdaptor( this );
@@ -67,26 +257,26 @@
dbus.connect( QString(), dbusPath, dbusInterface, "identitiesChanged", this,
SLOT( slotIdentitiesChanged( QString ) ) );
- mReadOnly = readonly;
- mConfig = new KConfig( "emailidentities" );
- readConfig( mConfig );
- if ( mIdentities.isEmpty() ) {
+ d->mConfig = new KConfig( "emailidentities" );
+ d->readOnly = readonly;
+ d->readConfig( d->mConfig );
+ if ( d->mIdentities.isEmpty() ) {
kDebug( 5325 ) << "emailidentities is empty -> convert from kmailrc";
// No emailidentities file, or an empty one due to broken conversion
// (kconf_update bug in kdelibs <= 3.2.2)
// => convert it, i.e. read settings from kmailrc
KConfig kmailConf( "kmailrc" );
- readConfig( &kmailConf );
+ d->readConfig( &kmailConf );
}
// we need at least a default identity:
- if ( mIdentities.isEmpty() ) {
+ if ( d->mIdentities.isEmpty() ) {
kDebug( 5325 ) << "IdentityManager: No identity found. Creating default.";
- createDefaultIdentity();
+ d->createDefaultIdentity();
commit();
}
// Migration: people without settings in kemailsettings should get some
if ( KEMailSettings().getSetting( KEMailSettings::EmailAddress ).isEmpty() ) {
- writeConfig();
+ d->writeConfig();
}
}
@@ -94,26 +284,26 @@
{
kWarning( hasPendingChanges(), 5325 )
<< "IdentityManager: There were uncommitted changes!";
- delete mConfig;
+ delete d;
}
void IdentityManager::commit()
{
// early out:
- if ( !hasPendingChanges() || mReadOnly ) {
+ if ( !hasPendingChanges() || d->readOnly ) {
return;
}
QList<uint> seenUOIDs;
- for ( QList<Identity>::ConstIterator it = mIdentities.begin();
- it != mIdentities.end(); ++it ) {
+ for ( QList<Identity>::ConstIterator it = d->mIdentities.begin();
+ it != d->mIdentities.end(); ++it ) {
seenUOIDs << (*it).uoid();
}
QList<uint> changedUOIDs;
// find added and changed identities:
- for ( QList<Identity>::ConstIterator it = mShadowIdentities.begin();
- it != mShadowIdentities.end(); ++it ) {
+ for ( QList<Identity>::ConstIterator it = d->mShadowIdentities.begin();
+ it != d->mShadowIdentities.end(); ++it ) {
int index = seenUOIDs.indexOf( (*it).uoid() );
if ( index != -1 ) {
uint uoid = seenUOIDs.at( index );
@@ -139,8 +329,8 @@
emit deleted(*it);
}
- mIdentities = mShadowIdentities;
- writeConfig();
+ d->mIdentities = d->mShadowIdentities;
+ d->writeConfig();
// now that mIdentities has all the new info, we can emit the added/changed
// signals that ship a uoid. This is because the slots might use
@@ -157,19 +347,19 @@
void IdentityManager::rollback()
{
- mShadowIdentities = mIdentities;
+ d->mShadowIdentities = d->mIdentities;
}
bool IdentityManager::hasPendingChanges() const
{
- return mIdentities != mShadowIdentities;
+ return d->mIdentities != d->mShadowIdentities;
}
QStringList IdentityManager::identities() const
{
QStringList result;
- for ( ConstIterator it = mIdentities.begin();
- it != mIdentities.end(); ++it )
+ for ( ConstIterator it = d->mIdentities.begin();
+ it != d->mIdentities.end(); ++it )
result << (*it).identityName();
return result;
}
@@ -177,101 +367,36 @@
QStringList IdentityManager::shadowIdentities() const
{
QStringList result;
- for ( ConstIterator it = mShadowIdentities.begin();
- it != mShadowIdentities.end(); ++it )
+ for ( ConstIterator it = d->mShadowIdentities.begin();
+ it != d->mShadowIdentities.end(); ++it )
result << (*it).identityName();
return result;
}
void IdentityManager::sort()
{
- qSort( mShadowIdentities );
+ qSort( d->mShadowIdentities );
}
-void IdentityManager::writeConfig() const
-{
- QStringList identities = groupList( mConfig );
- for ( QStringList::Iterator group = identities.begin();
- group != identities.end(); ++group )
- mConfig->deleteGroup( *group );
- int i = 0;
- for ( ConstIterator it = mIdentities.begin();
- it != mIdentities.end(); ++it, ++i ) {
- KConfigGroup cg( mConfig, QString::fromLatin1( "Identity #%1" ).arg( i ) );
- (*it).writeConfig( cg );
- if ( (*it).isDefault() ) {
- // remember which one is default:
- KConfigGroup general( mConfig, "General" );
- general.writeEntry( configKeyDefaultIdentity, (*it).uoid() );
- // Also write the default identity to emailsettings
- KEMailSettings es;
- es.setSetting( KEMailSettings::RealName, (*it).fullName() );
- es.setSetting( KEMailSettings::EmailAddress, (*it).emailAddr() );
- es.setSetting( KEMailSettings::Organization, (*it).organization() );
- es.setSetting( KEMailSettings::ReplyToAddress, (*it).replyToAddr() );
- }
- }
- mConfig->sync();
-
-}
-
-void IdentityManager::readConfig( KConfig *config )
-{
- mIdentities.clear();
-
- QStringList identities = groupList( config );
- if ( identities.isEmpty() ) {
- return; // nothing to be done...
- }
-
- KConfigGroup general( config, "General" );
- uint defaultIdentity = general.readEntry( configKeyDefaultIdentity, 0 );
- bool haveDefault = false;
-
- for ( QStringList::Iterator group = identities.begin();
- group != identities.end(); ++group ) {
- KConfigGroup configGroup( config, *group );
- mIdentities << Identity();
- mIdentities.last().readConfig( configGroup );
- if ( !haveDefault && mIdentities.last().uoid() == defaultIdentity ) {
- haveDefault = true;
- mIdentities.last().setIsDefault( true );
- }
- }
- if ( !haveDefault ) {
- kWarning( 5325 ) << "IdentityManager: There was no default identity."
- << "Marking first one as default.";
- mIdentities.first().setIsDefault( true );
- }
- qSort( mIdentities );
-
- mShadowIdentities = mIdentities;
-}
-
-QStringList IdentityManager::groupList( KConfig *config ) const
-{
- return config->groupList().filter( QRegExp( "^Identity #\\d+$" ) );
-}
-
IdentityManager::ConstIterator IdentityManager::begin() const
{
- return mIdentities.begin();
+ return d->mIdentities.begin();
}
IdentityManager::ConstIterator IdentityManager::end() const
{
- return mIdentities.end();
+ return d->mIdentities.end();
}
IdentityManager::Iterator IdentityManager::modifyBegin()
{
- return mShadowIdentities.begin();
+ return d->mShadowIdentities.begin();
}
IdentityManager::Iterator IdentityManager::modifyEnd()
{
- return mShadowIdentities.end();
+ return d->mShadowIdentities.end();
}
const Identity &IdentityManager::identityForUoid( uint uoid ) const
@@ -350,7 +475,7 @@
}
}
- if ( mIdentities.isEmpty() )
+ if ( d->mIdentities.isEmpty() )
kFatal( 5325 ) << "IdentityManager: No default identity found!";
else
kWarning( 5325 ) << "IdentityManager: No default identity found!";
@@ -361,8 +486,8 @@
{
// First, check if the identity actually exists:
bool found = false;
- for ( ConstIterator it = mShadowIdentities.begin();
- it != mShadowIdentities.end(); ++it )
+ for ( ConstIterator it = d->mShadowIdentities.begin();
+ it != d->mShadowIdentities.end(); ++it )
if ( (*it).uoid() == uoid ) {
found = true;
break;
@@ -384,15 +509,15 @@
bool IdentityManager::removeIdentity( const QString &name )
{
- if ( mShadowIdentities.size() <= 1 )
+ if ( d->mShadowIdentities.size() <= 1 )
return false;
for ( Iterator it = modifyBegin(); it != modifyEnd(); ++it ) {
if ( (*it).identityName() == name ) {
bool removedWasDefault = (*it).isDefault();
- mShadowIdentities.erase( it );
+ d->mShadowIdentities.erase( it );
if ( removedWasDefault ) {
- mShadowIdentities.first().setIsDefault( true );
+ d->mShadowIdentities.first().setIsDefault( true );
}
return true;
}
@@ -421,95 +546,17 @@
Identity &IdentityManager::newFromExisting( const Identity &other,
const QString &name )
{
- mShadowIdentities << other;
- Identity &result = mShadowIdentities.last();
+ d->mShadowIdentities << other;
+ Identity &result = d->mShadowIdentities.last();
result.setIsDefault( false ); // we don't want two default identities!
- result.setUoid( newUoid() ); // we don't want two identies w/ same UOID
+ result.setUoid( d->newUoid() ); // we don't want two identies w/ same UOID
if ( !name.isNull() ) {
result.setIdentityName( name );
}
return result;
}
-void IdentityManager::createDefaultIdentity()
-{
- QString fullName, emailAddress;
- bool done = false;
- // Check if the application has any settings
- createDefaultIdentity( fullName, emailAddress );
-
- // If not, then use the kcontrol settings
- if ( fullName.isEmpty() && emailAddress.isEmpty() ) {
- KEMailSettings emailSettings;
- fullName = emailSettings.getSetting( KEMailSettings::RealName );
- emailAddress = emailSettings.getSetting( KEMailSettings::EmailAddress );
-
- if ( !fullName.isEmpty() && !emailAddress.isEmpty() ) {
- newFromControlCenter( i18nc( "use default address from control center",
- "Default" ) );
- done = true;
- } else {
- // If KEmailSettings doesn't have name and address, generate something from KUser
- KUser user;
- if ( fullName.isEmpty() ) {
- fullName = user.property( KUser::FullName ).toString();
- }
- if ( emailAddress.isEmpty() ) {
- emailAddress = user.loginName();
- if ( !emailAddress.isEmpty() ) {
- KConfigGroup general( mConfig, "General" );
- QString defaultdomain = general.readEntry( "Default domain" );
- if ( !defaultdomain.isEmpty() ) {
- emailAddress += '@' + defaultdomain;
- } else {
- emailAddress.clear();
- }
- }
- }
- }
- }
-
- if ( !done ) {
- mShadowIdentities << Identity( i18nc( "show default identity", "Default" ), fullName, emailAddress );
- }
-
- mShadowIdentities.last().setIsDefault( true );
- mShadowIdentities.last().setUoid( newUoid() );
- if ( mReadOnly ) { // commit won't do it in readonly mode
- mIdentities = mShadowIdentities;
- }
-}
-
-int IdentityManager::newUoid()
-{
- int uoid;
-
- // determine the UOIDs of all saved identities
- QList<uint> usedUOIDs;
- for ( QList<Identity>::ConstIterator it = mIdentities.begin();
- it != mIdentities.end(); ++it )
- usedUOIDs << (*it).uoid();
-
- if ( hasPendingChanges() ) {
- // add UOIDs of all shadow identities. Yes, we will add a lot of duplicate
- // UOIDs, but avoiding duplicate UOIDs isn't worth the effort.
- for ( QList<Identity>::ConstIterator it = mShadowIdentities.begin();
- it != mShadowIdentities.end(); ++it ) {
- usedUOIDs << (*it).uoid();
- }
- }
-
- usedUOIDs << 0; // no UOID must be 0 because this value always refers to the
- // default identity
-
- do {
- uoid = KRandom::random();
- } while ( usedUOIDs.indexOf( uoid ) != -1 );
-
- return uoid;
-}
-
QStringList KPIMIdentities::IdentityManager::allEmails() const
{
QStringList lst;
@@ -524,15 +571,4 @@
rollback();
}
-void KPIMIdentities::IdentityManager::slotIdentitiesChanged( const QString &id )
-{
- kDebug( 5325 ) <<" KPIMIdentities::IdentityManager::slotIdentitiesChanged :" << id;
- if ( id != QDBusConnection::sessionBus().baseService() ) {
- mConfig->reparseConfiguration();
- Q_ASSERT( !hasPendingChanges() );
- readConfig( mConfig );
- emit changed();
- }
-}
-
#include "identitymanager.moc"
Index: identitymanager.h
===================================================================
--- identitymanager.h (revision 821148)
+++ identitymanager.h (revision 821149)
@@ -192,30 +192,17 @@
void slotRollback();
protected:
- /** The list that will be seen by everyone */
- QList<Identity> mIdentities;
- /** The list that will be seen by the config dialog */
- QList<Identity> mShadowIdentities;
Q_SIGNALS:
void identitiesChanged( const QString &id );
- private Q_SLOTS:
- // Connected to the DBus signal
- void slotIdentitiesChanged( const QString &id );
-
private:
- void writeConfig() const;
- void readConfig( KConfig *config );
- QStringList groupList( KConfig *config ) const;
- void createDefaultIdentity();
+ //@cond PRIVATE
+ class Private;
+ Private *d;
+ //@endcond
- // returns a new Unique Object Identifier
- int newUoid();
-
- private:
- KConfig *mConfig;
- bool mReadOnly;
+ Q_PRIVATE_SLOT( d, void slotIdentitiesChanged( const QString &id ) )
};
} // namespace