[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bkdepim-runtime=5D_resources/dav=3A_Allow_to_have_mo?=
From:       Gregory Oestreicher <greg () kamago ! net>
Date:       2011-03-13 20:12:19
Message-ID: 20110313201219.43820A60A9 () git ! kde ! org
[Download RAW message or body]

Git commit e4a1291ca22372d8fe0b76e02735d33adc5cc9d2 by Gregory Oestreicher.
Committed on 13/03/2011 at 20:47.
Pushed by goestreicher into branch 'master'.

Allow to have more than one protocol per URL

The resource did not permit to have CalDav and CardDav URLs
configured if they were identical. The cached URLs configuration
mapping is rendered invalid by this change, so the resource may
exhibit the same behavior as in bug 263956 pending a full sync.

M  +1    -1    resources/dav/common/davcollectionsfetchjob.cpp     
M  +1    -1    resources/dav/common/davcollectionsfetchjob.h     
M  +2    -2    resources/dav/common/davcollectionsmultifetchjob.cpp     
M  +1    -1    resources/dav/common/davcollectionsmultifetchjob.h     
M  +17   -17   resources/dav/resource/configdialog.cpp     
M  +7    -3    resources/dav/resource/configdialog.h     
M  +4    -4    resources/dav/resource/davgroupwareresource.cpp     
M  +1    -1    resources/dav/resource/davgroupwareresource.h     
M  +41   -29   resources/dav/resource/settings.cpp     
M  +6    -6    resources/dav/resource/settings.h     

http://commits.kde.org/kdepim-runtime/e4a1291ca22372d8fe0b76e02735d33adc5cc9d2

diff --git a/resources/dav/common/davcollectionsfetchjob.cpp \
b/resources/dav/common/davcollectionsfetchjob.cpp index 5c662fc..9a98eb2 100644
--- a/resources/dav/common/davcollectionsfetchjob.cpp
+++ b/resources/dav/common/davcollectionsfetchjob.cpp
@@ -260,7 +260,7 @@ void DavCollectionsFetchJob::collectionsFetchFinished( KJob *job )
     const DavCollection::ContentTypes contentTypes = DavManager::self()->davProtocol( mUrl.protocol() \
)->collectionContentTypes( propstatElement );  
     mCollections << DavCollection( mUrl.protocol(), url.prettyUrl(), displayName, contentTypes );
-    emit collectionDiscovered( url.prettyUrl(), jobUrl );
+    emit collectionDiscovered( mUrl.protocol(), url.prettyUrl(), jobUrl );
 
     responseElement = DavUtils::nextSiblingElementNS( responseElement, "DAV:", "response" );
   }
diff --git a/resources/dav/common/davcollectionsfetchjob.h \
b/resources/dav/common/davcollectionsfetchjob.h index ea06a40..1a96738 100644
--- a/resources/dav/common/davcollectionsfetchjob.h
+++ b/resources/dav/common/davcollectionsfetchjob.h
@@ -60,7 +60,7 @@ class DavCollectionsFetchJob : public KJob
      * @param collectionUrl The URL of the discovered collection
      * @param configuredUrl The URL given to the job
      */
-    void collectionDiscovered( const QString &collectionUrl, const QString &configuredUrl );
+    void collectionDiscovered( int protocol, const QString &collectionUrl, const QString &configuredUrl \
);  
   private Q_SLOTS:
     void principalFetchFinished( KJob* );
diff --git a/resources/dav/common/davcollectionsmultifetchjob.cpp \
b/resources/dav/common/davcollectionsmultifetchjob.cpp index 854d460..f9a77f5 100644
--- a/resources/dav/common/davcollectionsmultifetchjob.cpp
+++ b/resources/dav/common/davcollectionsmultifetchjob.cpp
@@ -30,8 +30,8 @@ void DavCollectionsMultiFetchJob::start()
   foreach ( const DavUtils::DavUrl &url, mUrls ) {
     DavCollectionsFetchJob *job = new DavCollectionsFetchJob( url, this );
     connect( job, SIGNAL( result( KJob* ) ), SLOT( davJobFinished( KJob* ) ) );
-    connect( job, SIGNAL( collectionDiscovered( const QString&, const QString& ) ),
-             SIGNAL( collectionDiscovered( const QString&, const QString& ) ) );
+    connect( job, SIGNAL( collectionDiscovered( int, const QString&, const QString& ) ),
+             SIGNAL( collectionDiscovered( int, const QString&, const QString& ) ) );
     job->start();
 
     ++mSubJobCount;
diff --git a/resources/dav/common/davcollectionsmultifetchjob.h \
b/resources/dav/common/davcollectionsmultifetchjob.h index 7df4c02..8d4f14b 100644
--- a/resources/dav/common/davcollectionsmultifetchjob.h
+++ b/resources/dav/common/davcollectionsmultifetchjob.h
@@ -63,7 +63,7 @@ class DavCollectionsMultiFetchJob : public KJob
      * @param collectionUrl The URL of the discovered collection
      * @param configuredUrl The URL given to the job
      */
-    void collectionDiscovered( const QString &collectionUrl, const QString &configuredUrl );
+    void collectionDiscovered( int protocol, const QString &collectionUrl, const QString &configuredUrl \
);  
   private Q_SLOTS:
     void davJobFinished( KJob* );
diff --git a/resources/dav/resource/configdialog.cpp b/resources/dav/resource/configdialog.cpp
index 8a9e1e0..b7c2848 100644
--- a/resources/dav/resource/configdialog.cpp
+++ b/resources/dav/resource/configdialog.cpp
@@ -17,7 +17,6 @@
 */
 
 #include "configdialog.h"
-#include "davutils.h"
 #include "settings.h"
 #include "urlconfigurationdialog.h"
 
@@ -98,7 +97,7 @@ void ConfigDialog::onAddButtonClicked()
     const QString protocolName = DavUtils::protocolName( dlg->protocol() );
 
     addModelRow( protocolName, dlg->remoteUrl() );
-    mAddedUrls << dlg->remoteUrl();
+    mAddedUrls << QPair<QString, DavUtils::Protocol>( dlg->remoteUrl(), DavUtils::Protocol( \
dlg->protocol() ) );  checkUserInput();
   }
 
@@ -111,11 +110,11 @@ void ConfigDialog::onRemoveButtonClicked()
   if ( indexes.size() == 0 )
     return;
 
-  // There can be only one (selected row)
-  const QModelIndex index = mModel->index( indexes.at( 0 ).row(), 1 );
+  QString proto = mModel->index( indexes.at( 0 ).row(), 0 ).data().toString();
+  QString url = mModel->index( indexes.at( 0 ).row(), 1 ).data().toString();
 
-  mRemovedUrls << index.data().toString();
-  mModel->removeRow( index.row() );
+  mRemovedUrls << QPair<QString, DavUtils::Protocol>( url, DavUtils::protocolByName( proto ) );
+  mModel->removeRow( indexes.at( 0 ).row() );
 
   checkUserInput();
 }
@@ -126,11 +125,10 @@ void ConfigDialog::onEditButtonClicked()
   if ( indexes.size() == 0 )
     return;
 
-  // There can be only one (selected row)
-  const QModelIndex index = mModel->index( indexes.at( 0 ).row(), 1 );
-  const QString url = index.data().toString();
+  const QString proto = mModel->index( indexes.at( 0 ).row(), 0 ).data().toString();
+  const QString url = mModel->index( indexes.at( 0 ).row(), 1 ).data().toString();
 
-  Settings::UrlConfiguration *urlConfig = Settings::self()->urlConfiguration( url );
+  Settings::UrlConfiguration *urlConfig = Settings::self()->urlConfiguration( DavUtils::protocolByName( \
proto ), url );  if ( !urlConfig )
     return;
 
@@ -148,11 +146,11 @@ void ConfigDialog::onEditButtonClicked()
     urlConfigAccepted->mProtocol = dlg->protocol();
     Settings::self()->newUrlConfiguration( urlConfigAccepted );
 
-    QStandardItem *item = mModel->item( index.row(), 0 ); // Protocol
+    QStandardItem *item = mModel->item( indexes.at( 0 ).row(), 0 ); // Protocol
     item->setData( QVariant::fromValue( DavUtils::protocolName( dlg->protocol() ) ), Qt::DisplayRole );
-    mRemovedUrls << url;
+    mRemovedUrls << QPair<QString, DavUtils::Protocol>( url, DavUtils::protocolByName( proto ) );
 
-    item = mModel->item( index.row(), 1 ); // URL
+    item = mModel->item( indexes.at( 0 ).row(), 1 ); // URL
     item->setData( QVariant::fromValue( dlg->remoteUrl() ), Qt::DisplayRole );
   }
   delete dlg;
@@ -160,8 +158,9 @@ void ConfigDialog::onEditButtonClicked()
 
 void ConfigDialog::onOkClicked()
 {
-  foreach ( const QString &url, mRemovedUrls )
-    Settings::self()->removeUrlConfiguration( url );
+  QPair<QString, DavUtils::Protocol> url;
+  foreach ( url, mRemovedUrls )
+    Settings::self()->removeUrlConfiguration( url.second, url.first );
 
   mManager->updateSettings();
 }
@@ -170,8 +169,9 @@ void ConfigDialog::onCancelClicked()
 {
   mRemovedUrls.clear();
 
-  foreach ( const QString &url, mAddedUrls )
-    Settings::self()->removeUrlConfiguration( url );
+  QPair<QString, DavUtils::Protocol> url;
+  foreach ( url, mAddedUrls )
+    Settings::self()->removeUrlConfiguration( url.second, url.first );
 }
 
 void ConfigDialog::checkConfiguredUrlsButtonsState()
diff --git a/resources/dav/resource/configdialog.h b/resources/dav/resource/configdialog.h
index 71d2c4a..81039a7 100644
--- a/resources/dav/resource/configdialog.h
+++ b/resources/dav/resource/configdialog.h
@@ -21,9 +21,13 @@
 
 #include "ui_configdialog.h"
 
+#include "davutils.h"
+
 #include <kdialog.h>
 
-#include <QtCore/QStringList>
+#include <QtCore/QList>
+#include <QtCore/QPair>
+#include <QtCore/QString>
 
 class KConfigDialogManager;
 class QStandardItemModel;
@@ -50,8 +54,8 @@ class ConfigDialog : public KDialog
 
     Ui::ConfigDialog mUi;
     KConfigDialogManager *mManager;
-    QStringList mAddedUrls;
-    QStringList mRemovedUrls;
+    QList< QPair<QString, DavUtils::Protocol> > mAddedUrls;
+    QList< QPair<QString, DavUtils::Protocol> > mRemovedUrls;
     QStandardItemModel *mModel;
 };
 
diff --git a/resources/dav/resource/davgroupwareresource.cpp \
b/resources/dav/resource/davgroupwareresource.cpp index 16fd42a..0152969 100644
--- a/resources/dav/resource/davgroupwareresource.cpp
+++ b/resources/dav/resource/davgroupwareresource.cpp
@@ -170,8 +170,8 @@ void DavGroupwareResource::retrieveCollections()
 
   DavCollectionsMultiFetchJob *job = new DavCollectionsMultiFetchJob( \
Settings::self()->configuredDavUrls() );  connect( job, SIGNAL( result( KJob* ) ), SLOT( \
                onRetrieveCollectionsFinished( KJob* ) ) );
-  connect( job, SIGNAL( collectionDiscovered( const QString&, const QString& ) ),
-           SLOT( onCollectionDiscovered( const QString&, const QString& ) ) );
+  connect( job, SIGNAL( collectionDiscovered( int, const QString&, const QString& ) ),
+           SLOT( onCollectionDiscovered( int, const QString&, const QString& ) ) );
   job->start();
 }
 
@@ -703,9 +703,9 @@ void DavGroupwareResource::onItemRemovedFinished( KJob *job )
   changeProcessed();
 }
 
-void DavGroupwareResource::onCollectionDiscovered( const QString &collection, const QString &config )
+void DavGroupwareResource::onCollectionDiscovered( int protocol, const QString &collection, const \
QString &config )  {
-  Settings::self()->addCollectionUrlMapping( collection, config );
+  Settings::self()->addCollectionUrlMapping( DavUtils::Protocol( protocol ), collection, config );
 }
 
 bool DavGroupwareResource::configurationIsValid()
diff --git a/resources/dav/resource/davgroupwareresource.h \
b/resources/dav/resource/davgroupwareresource.h index aa65290..2988e63 100644
--- a/resources/dav/resource/davgroupwareresource.h
+++ b/resources/dav/resource/davgroupwareresource.h
@@ -70,7 +70,7 @@ class DavGroupwareResource : public Akonadi::ResourceBase,
     void onItemChangedFinished( KJob* );
     void onItemRemovedFinished( KJob* );
 
-    void onCollectionDiscovered( const QString &collectionUrl, const QString &configuredUrl );
+    void onCollectionDiscovered( int protocol, const QString &collectionUrl, const QString \
&configuredUrl );  
   private:
     bool configurationIsValid();
diff --git a/resources/dav/resource/settings.cpp b/resources/dav/resource/settings.cpp
index d933b62..7725a18 100644
--- a/resources/dav/resource/settings.cpp
+++ b/resources/dav/resource/settings.cpp
@@ -100,7 +100,8 @@ Settings::Settings()
 
   foreach ( const QString &serializedUrl, remoteUrls() ) {
     UrlConfiguration *urlConfig = new UrlConfiguration( serializedUrl );
-    mUrls[ urlConfig->mUrl ] = urlConfig;
+    QString key = urlConfig->mUrl + "," + DavUtils::protocolName( DavUtils::Protocol( \
urlConfig->mProtocol ) ); +    mUrls[ key ] = urlConfig;
   }
 }
 
@@ -125,13 +126,14 @@ DavUtils::DavUrl::List Settings::configuredDavUrls()
 
   while ( it.hasNext() ) {
     it.next();
-    davUrls << configuredDavUrl( it.key() );
+    QStringList split = it.key().split( "," );
+    davUrls << configuredDavUrl( DavUtils::protocolByName( split.at( 1 ) ), split.at( 0 ) );
   }
 
   return davUrls;
 }
 
-DavUtils::DavUrl Settings::configuredDavUrl( const QString &searchUrl, const QString &finalUrl )
+DavUtils::DavUrl Settings::configuredDavUrl( DavUtils::Protocol proto, const QString &searchUrl, const \
QString &finalUrl )  {
   KUrl fullUrl;
 
@@ -140,10 +142,10 @@ DavUtils::DavUrl Settings::configuredDavUrl( const QString &searchUrl, const QSt
   else
     fullUrl = searchUrl;
 
-  const QString user = username( searchUrl );
+  const QString user = username( proto, searchUrl );
   fullUrl.setUser( user );
 
-  return DavUtils::DavUrl( fullUrl, protocol( searchUrl ) );
+  return DavUtils::DavUrl( fullUrl, proto );
 }
 
 DavUtils::DavUrl Settings::davUrlFromCollectionUrl( const QString &collectionUrl, const QString \
&finalUrl ) @@ -152,15 +154,18 @@ DavUtils::DavUrl Settings::davUrlFromCollectionUrl( const QString \
&collectionUrl  QString targetUrl = finalUrl.isEmpty() ? collectionUrl : finalUrl;
 
   if ( mCollectionsUrlsMapping.contains( collectionUrl ) ) {
-    davUrl = configuredDavUrl( mCollectionsUrlsMapping[ collectionUrl ], targetUrl );
+    QStringList split = mCollectionsUrlsMapping[ collectionUrl ].split( "," );
+    if ( split.size() == 2 )
+      davUrl = configuredDavUrl( DavUtils::protocolByName( split.at( 1 ) ), split.at( 0 ), targetUrl );
   }
 
   return davUrl;
 }
 
-void Settings::addCollectionUrlMapping( const QString &collectionUrl, const QString &configuredUrl )
+void Settings::addCollectionUrlMapping( DavUtils::Protocol proto, const QString &collectionUrl, const \
QString &configuredUrl )  {
-  mCollectionsUrlsMapping.insert( collectionUrl, configuredUrl );
+  QString value = configuredUrl + "," + DavUtils::protocolName( proto );
+  mCollectionsUrlsMapping.insert( collectionUrl, value );
 
   // Update the settings now
   QMap<QString, QString> tmp( mCollectionsUrlsMapping );
@@ -172,46 +177,53 @@ void Settings::addCollectionUrlMapping( const QString &collectionUrl, const QStr
 
 void Settings::newUrlConfiguration( Settings::UrlConfiguration *urlConfig )
 {
-  if ( mUrls.contains( urlConfig->mUrl ) ) {
-    removeUrlConfiguration( urlConfig->mUrl );
-    updateRemoteUrls();
+  QString key = urlConfig->mUrl + "," + DavUtils::protocolName( DavUtils::Protocol( urlConfig->mProtocol \
) ); +
+  if ( mUrls.contains( key ) ) {
+    removeUrlConfiguration( DavUtils::Protocol( urlConfig->mProtocol ), urlConfig->mUrl );
   }
 
-  mUrls[ urlConfig->mUrl ] = urlConfig;
+  mUrls[ key ] = urlConfig;
   updateRemoteUrls();
 }
 
-void Settings::removeUrlConfiguration( const QString &url )
+void Settings::removeUrlConfiguration( DavUtils::Protocol proto, const QString &url )
 {
-  if ( !mUrls.contains( url ) )
+  QString key = url + "," + DavUtils::protocolName( proto );
+
+  if ( !mUrls.contains( key ) )
     return;
 
-  delete mUrls[ url ];
-  mUrls.remove( url );
+  delete mUrls[ key ];
+  mUrls.remove( key );
   updateRemoteUrls();
 }
 
-Settings::UrlConfiguration * Settings::urlConfiguration( const QString &url )
+Settings::UrlConfiguration * Settings::urlConfiguration( DavUtils::Protocol proto, const QString &url )
 {
+  QString key = url + "," + DavUtils::protocolName( proto );
+
   UrlConfiguration *ret = 0;
-  if ( mUrls.contains( url ) )
-    ret = mUrls[url];
+  if ( mUrls.contains( key ) )
+    ret = mUrls[ key ];
 
   return ret;
 }
 
-DavUtils::Protocol Settings::protocol( const QString &url ) const
-{
-  if ( mUrls.contains( url ) )
-    return DavUtils::Protocol( mUrls[ url ]->mProtocol );
-  else
-    return DavUtils::CalDav;
-}
+// DavUtils::Protocol Settings::protocol( const QString &url ) const
+// {
+//   if ( mUrls.contains( url ) )
+//     return DavUtils::Protocol( mUrls[ url ]->mProtocol );
+//   else
+//     return DavUtils::CalDav;
+// }
 
-QString Settings::username( const QString &url ) const
+QString Settings::username( DavUtils::Protocol proto, const QString &url ) const
 {
-  if ( mUrls.contains( url ) )
-    return mUrls[ url ]->mUser;
+  QString key = url + "," + DavUtils::protocolName( proto );
+
+  if ( mUrls.contains( key ) )
+    return mUrls[ key ]->mUser;
   else
     return QString();
 }
diff --git a/resources/dav/resource/settings.h b/resources/dav/resource/settings.h
index 425cbd8..5f16335 100644
--- a/resources/dav/resource/settings.h
+++ b/resources/dav/resource/settings.h
@@ -63,7 +63,7 @@ class Settings : public SettingsBase
      * Creates and returns the DavUrl that corresponds to the configuration for searchUrl.
      * If finalUrl is supplied, then it will be used in the returned object instead of the searchUrl.
      */
-    DavUtils::DavUrl configuredDavUrl( const QString &searchUrl, const QString &finalUrl = QString() );
+    DavUtils::DavUrl configuredDavUrl( DavUtils::Protocol protocol, const QString &searchUrl, const \
QString &finalUrl = QString() );  
 	/**
 	 * Creates and return the DavUrl from the configured URL that has a mapping with @p collectionUrl.
@@ -78,14 +78,14 @@ class Settings : public SettingsBase
      * URL configured by the user. A mapping here means that the collectionUrl has
      * been discovered by a DavCollectionsFetchJob on the configuredUrl.
      */
-    void addCollectionUrlMapping( const QString &collectionUrl, const QString &configuredUrl );
+    void addCollectionUrlMapping( DavUtils::Protocol protocol, const QString &collectionUrl, const \
QString &configuredUrl );  
     void newUrlConfiguration( UrlConfiguration *urlConfig );
-    void removeUrlConfiguration( const QString &url );
-    UrlConfiguration * urlConfiguration( const QString &url );
+    void removeUrlConfiguration( DavUtils::Protocol protocol, const QString &url );
+    UrlConfiguration * urlConfiguration( DavUtils::Protocol protocol, const QString &url );
 
-    DavUtils::Protocol protocol( const QString &url ) const;
-    QString username( const QString &url ) const;
+    //DavUtils::Protocol protocol( const QString &url ) const;
+    QString username( DavUtils::Protocol protocol, const QString &url ) const;
 
   private:
     void updateRemoteUrls();


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic