--===============1992732243== Content-Type: multipart/signed; boundary="nextPart1440745.iSqpIqTP4W"; protocol="application/pgp-signature"; micalg=pgp-sha1 Content-Transfer-Encoding: 7bit --nextPart1440745.iSqpIqTP4W Content-Type: multipart/mixed; boundary="Boundary-01=_CSdxG12RYMMdfQY" Content-Transfer-Encoding: 7bit Content-Disposition: inline --Boundary-01=_CSdxG12RYMMdfQY Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi Akonadi-Devs, I made another patch regarding Akonadi's data connection, this time making = the=20 connection paramters (port on Windows, socket directory on Unix) configurab= le=20 through akonadiserverrc When starting up, akonadiserver will read "Connection/Port" on Windows=20 and "Connection/SocketDirectory" on Unix, defaulting to the previously=20 hardcoded values. After it has established its listening, it wil write the respective setting= s=20 into akonadiconnectionrc, which in turn is read by libakonadi/session. This allows to configure the TCP port to "0", meaning the server will just= =20 bind to any free port, and this port will then be available in to the clien= ts=20 through the connetion config. The server also adds its D-Bus session address to the akonadiconnectionrc, = but=20 I am not yet using this on the client side. Client side code would need to do something like QDBusConnection::connectToBus(address, "AkonadiDataConnection") instead of QDBusConnection::sessionBus() Cheers, Kevin =2D-=20 Kevin Krammer, KDE developer, xdg-utils developer KDE user support, developer mentoring --Boundary-01=_CSdxG12RYMMdfQY Content-Type: text/x-diff; charset="us-ascii"; name="akonadi-connection.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="akonadi-connection.diff" Index: libakonadi/session.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =2D-- libakonadi/session.cpp (Revision 701208) +++ libakonadi/session.cpp (Arbeitskopie) @@ -49,14 +49,18 @@ =20 void SessionPrivate::reconnect() { + // should be checking connection method and value validity #ifdef Q_OS_WIN if ( socket->state() !=3D QAbstractSocket::ConnectedState && =2D socket->state() !=3D QAbstractSocket::ConnectingState ) =2D socket->connectToHost( QHostAddress::LocalHost, 4444 ); + socket->state() !=3D QAbstractSocket::ConnectingState ) { + QString address =3D mConnectionSettings->value( QLatin1String( "Data/A= ddress" ), QHostAddress(QHostAddress::LocalHost).toString() ).toString(); + int port =3D mConnectionSettings->value( QLatin1String( "Data/Port" ),= 4444 ).toInt(); + socket->connectToHost( QHostAddress(address), port ); + } #else if ( socket->state() !=3D QAbstractSocket::ConnectedState && socket->state() !=3D QAbstractSocket::ConnectingState ) { =2D QString path =3D QDir::homePath() + QLatin1String("/.akonadi/akonadi= server.socket"); + QString path =3D mConnectionSettings->value( QLatin1String( "Data/Unix= Path" ), QDir::homePath() + QLatin1String( "/.akonadi/akonadiserver.socket"= ) ).toString(); socket->connectToPath( path ); } #endif @@ -137,6 +141,9 @@ d->currentJob =3D 0; d->jobRunning =3D false; =20 + d->mConnectionSettings =3D new QSettings( QDir::homePath() + QLatin1Stri= ng("/.akonadi/akonadiconnectionrc"), QSettings::IniFormat ); + + // should check connection method #ifdef Q_OS_WIN d->socket =3D new QTcpSocket( this ); #else Index: libakonadi/session_p.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =2D-- libakonadi/session_p.h (Revision 701208) +++ libakonadi/session_p.h (Arbeitskopie) @@ -23,6 +23,7 @@ #include "session.h" #include "imapparser.h" #include +#include #include =20 #ifdef Q_OS_WIN @@ -37,7 +38,7 @@ { public: SessionPrivate( Session *parent ) =2D : mParent( parent ) + : mParent( parent ), mConnectionSettings( 0 ) { parser =3D new ImapParser(); } @@ -45,6 +46,7 @@ ~SessionPrivate() { delete parser; + delete mConnectionSettings; } =20 void startNext(); @@ -56,6 +58,7 @@ =20 Session *mParent; QByteArray sessionId; + QSettings *mConnectionSettings; #ifdef Q_OS_WIN QTcpSocket* socket; #else Index: server/src/akonadi.cpp =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =2D-- server/src/akonadi.cpp (Revision 701208) +++ server/src/akonadi.cpp (Arbeitskopie) @@ -36,6 +36,7 @@ #include =20 #include +#include =20 using namespace Akonadi; =20 @@ -61,12 +62,30 @@ =20 s_instance =3D this; =20 + QSettings connectionSettings( QDir::homePath() + QLatin1String("/.akon= adi/akonadiconnectionrc"), QSettings::IniFormat ); + #ifdef Q_OS_WIN =2D if ( !listen( QHostAddress::LocalHost, 4444 ) ) =2D qFatal("Unable to listen on port 4444"); + int port =3D settings.value( QLatin1String( "Connection/Port" ), 4444 = ).toInt(); + if ( !listen( QHostAddress::LocalHost, port ) ) + qFatal("Unable to listen on port %d", port); + + connectionSettings.setValue( QLatin1String( "Data/Method" ), QLatin1St= ring( "TCP" ) ); + connectionSettings.setValue( QLatin1String( "Data/Address" ), serverAd= dress().toString() ); + connectionSettings.setValue( QLatin1String( "Data/Port" ), serverPort(= ) ); #else =2D if ( !listen( QDir::homePath() + QLatin1String("/.akonadi/akonadiser= ver.socket") ) ) =2D qFatal("Unable to listen on Unix socket"); + QString socketDir =3D settings.value( QLatin1String( "Connection/Socke= tDirectory" ), QLatin1String( ".akonadi" ) ).toString(); + if ( socketDir[0] !=3D QLatin1Char( '/' ) ) + { + homeDir.mkdir( socketDir ); + socketDir =3D QDir::homePath() + QLatin1Char( '/' ) + socketDir; + } + + QString socketFile =3D socketDir + QLatin1String( "/akonadiserver.sock= et" ); + if ( !listen( socketFile ) ) + qFatal("Unable to listen on Unix socket '%s'", socketFile.toLocal8Bi= t().data() ); + + connectionSettings.setValue( QLatin1String( "Data/Method" ), QLatin1St= ring( "UnixPath" ) ); + connectionSettings.setValue( QLatin1String( "Data/UnixPath" ), socketF= ile ); #endif =20 // initialize the database @@ -87,6 +106,12 @@ =20 new ServerAdaptor( this ); QDBusConnection::sessionBus().registerObject( QLatin1String( "/Server"= ), this ); + + char* dbusAddress =3D getenv( "DBUS_SESSION_BUS_ADDRESS" ); + if (dbusAddress !=3D 0) + { + connectionSettings.setValue( QLatin1String( "DBUS/Address" ), QLatin= 1String( dbusAddress ) ); + } } =20 =20 @@ -114,9 +139,11 @@ stopDatabaseProcess(); =20 #ifndef Q_OS_WIN =2D if ( !QDir::home().remove( QLatin1String(".akonadi/akonadiserver.soc= ket") ) ) + if ( !QDir::home().remove( QLatin1String( ".akonadi/akonadiserver.sock= et" ) ) ) qWarning("Failed to remove Unix socket"); #endif + if ( !QDir::home().remove( QLatin1String( ".akonadi/akonadiconnectionr= c" ) ) ) + qWarning("Failed to remove runtime connection config file"); =20 QTimer::singleShot( 0, this, SLOT( doQuit() ) ); } --Boundary-01=_CSdxG12RYMMdfQY-- --nextPart1440745.iSqpIqTP4W Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQBGxdSPnKMhG6pzZJIRAlZiAJwPtIVmpWX/Anp20K5Qvbog8IBGaQCfRs0K 11gJotv/tjw3hFo8e6y8wNM= =LJPF -----END PGP SIGNATURE----- --nextPart1440745.iSqpIqTP4W-- --===============1992732243== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ KDE PIM mailing list kde-pim@kde.org https://mail.kde.org/mailman/listinfo/kde-pim KDE PIM home page at http://pim.kde.org/ --===============1992732243==--