From kde-commits Fri Jan 31 21:20:46 2014 From: Montel Laurent Date: Fri, 31 Jan 2014 21:20:46 +0000 To: kde-commits Subject: [kdepim] pimcommon/storageservice/webdav: Add create/list folder Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=139120325615220 Git commit d02b0e42969a5ec102574c9778fec93171892b26 by Montel Laurent. Committed on 31/01/2014 at 21:19. Pushed by mlaurent into branch 'master'. Add create/list folder M +0 -19 pimcommon/storageservice/webdav/protocol/webdav.cpp M +57 -7 pimcommon/storageservice/webdav/webdavjob.cpp M +2 -0 pimcommon/storageservice/webdav/webdavjob.h M +3 -3 pimcommon/storageservice/webdav/webdavsettingsdialog.cpp M +12 -6 pimcommon/storageservice/webdav/webdavstorageservice.cpp http://commits.kde.org/kdepim/d02b0e42969a5ec102574c9778fec93171892b26 diff --git a/pimcommon/storageservice/webdav/protocol/webdav.cpp b/pimcommo= n/storageservice/webdav/protocol/webdav.cpp index ff55d7c..4ace360 100644 --- a/pimcommon/storageservice/webdav/protocol/webdav.cpp +++ b/pimcommon/storageservice/webdav/protocol/webdav.cpp @@ -221,26 +221,7 @@ void QWebdav::emitListInfos() QDomDocument multiResponse; = multiResponse.setContent(buffer, true); - qDebug()<<" sssssssssssssssssssssssssssssssssssssssss"; Q_EMIT listInfo(multiResponse.toString()); -#if 0 - for ( QDomNode n =3D multiResponse.documentElement().firstChild(); - !n.isNull(); n =3D n.nextSibling()) - { - QDomElement thisResponse =3D n.toElement(); - - if (thisResponse.isNull()) - continue; - - QWebdavUrlInfo info(thisResponse); - - if (!info.isValid()) - continue; - - hasResponse =3D true; - emit listInfo(info); - } -#endif } = void QWebdav::responseHeaderReceived( const QHttpResponseHeader & resp ) diff --git a/pimcommon/storageservice/webdav/webdavjob.cpp b/pimcommon/stor= ageservice/webdav/webdavjob.cpp index a200a74..eb8c3f1 100644 --- a/pimcommon/storageservice/webdav/webdavjob.cpp +++ b/pimcommon/storageservice/webdav/webdavjob.cpp @@ -33,7 +33,8 @@ using namespace PimCommon; = WebDavJob::WebDavJob(QObject *parent) - : PimCommon::StorageServiceAbstractJob(parent) + : PimCommon::StorageServiceAbstractJob(parent), + mReqId(-1) { connect(mNetworkAccessManager, SIGNAL(finished(QNetworkReply*)), this,= SLOT(slotSendDataFinished(QNetworkReply*))); connect(mNetworkAccessManager, SIGNAL(authenticationRequired(QNetworkR= eply*,QAuthenticator*)), SLOT(slotAuthenticationRequired(QNetworkReply*,QAu= thenticator*))); @@ -120,16 +121,26 @@ void WebDavJob::listFolder(const QString &folder) { mActionType =3D PimCommon::StorageServiceAbstract::ListFolder; mError =3D false; + qDebug()<<" folder"<setUser(mUserName, mPassword); + QUrl url(mServiceLocation); + if (!mServiceLocation.endsWith(QLatin1Char('/'))) + url.setUrl(mServiceLocation + QLatin1Char('/') + folder + QLatin1C= har('/')); + else + url.setUrl(mServiceLocation + QLatin1Char('/') + folder + QLatin1C= har('/')); + + + QHttp::ConnectionMode mode =3D QHttp::ConnectionModeHttp; = if (url.port() =3D=3D -1) { - if (mServiceLocation.startsWith(QLatin1String("https://"))) + if (mServiceLocation.startsWith(QLatin1String("https://"))) { url.setPort(443); - if (mServiceLocation.startsWith(QLatin1String("http://"))) + } else if (mServiceLocation.startsWith(QLatin1String("http://"))) { url.setPort(80); + } } = if (mServiceLocation.startsWith(QLatin1String("https://"))) @@ -142,10 +153,11 @@ void WebDavJob::listFolder(const QString &folder) webdav, SLOT(ignoreSslErrors())); connect(webdav, SIGNAL(authenticationRequired(QString,quint16,QAuthent= icator*)), this, SLOT(slotRequired(QString,quint16,QAuthenticator*))); + qDebug()<<" url.toString()"<list(url.toString()); } = -void WebDavJob::slotRequired(const QString &hostname, quint16 port, QAuthe= nticator *authenticator) +void WebDavJob::slotRequired(const QString &, quint16 , QAuthenticator *au= thenticator) { QPointer dlg =3D new LoginDialog; if (dlg->exec()) { @@ -181,9 +193,47 @@ void WebDavJob::createFolder(const QString &foldername= , const QString &destinati { mActionType =3D PimCommon::StorageServiceAbstract::CreateFolder; mError =3D false; - qDebug()<<" not implemented"; - Q_EMIT actionFailed(QLatin1String("Not Implemented")); - deleteLater(); + QWebdav *webdav =3D new QWebdav(this); + webdav->setUser(mUserName, mPassword); + QUrl url(mServiceLocation); + if (!mServiceLocation.endsWith(QLatin1Char('/'))) + url.setUrl(mServiceLocation + QLatin1Char('/')); + + QHttp::ConnectionMode mode =3D QHttp::ConnectionModeHttp; + + if (url.port() =3D=3D -1) { + if (mServiceLocation.startsWith(QLatin1String("https://"))) { + url.setPort(443); + } else if (mServiceLocation.startsWith(QLatin1String("http://"))) { + url.setPort(80); + } + } + + if (mServiceLocation.startsWith(QLatin1String("https://"))) + mode =3D QHttp::ConnectionModeHttps; + else + mode =3D QHttp::ConnectionModeHttp; + + webdav->setHost(url.host(), mode, url.port()); + + connect(webdav, SIGNAL(authenticationRequired(QString,quint16,QAuthent= icator*)), + this, SLOT(slotRequired(QString,quint16,QAuthenticator*))); + connect(webdav, SIGNAL(requestFinished(int, bool)), this, SLOT(slotReq= uestFinished(int, bool))); + //TODO add destination + qDebug()<<" url.toString() "<mkdir(url.toString() + QLatin1Char('/') + destinati= on + QLatin1Char('/') + foldername + QLatin1Char('/')); +} + +void WebDavJob::slotRequestFinished(int id, bool) +{ + if (id =3D=3D mReqId) { + switch(mActionType) { + case PimCommon::StorageServiceAbstract::CreateFolder: + Q_EMIT createFolderDone(QString()); + break; + } + deleteLater(); + } } = void WebDavJob::slotSendDataFinished(QNetworkReply *reply) diff --git a/pimcommon/storageservice/webdav/webdavjob.h b/pimcommon/storag= eservice/webdav/webdavjob.h index 302bfff..d94ddb7 100644 --- a/pimcommon/storageservice/webdav/webdavjob.h +++ b/pimcommon/storageservice/webdav/webdavjob.h @@ -55,6 +55,7 @@ private slots: void slotAuthenticationRequired(QNetworkReply *, QAuthenticator *); void slotListInfo(const QString &data); void slotRequired(const QString &hostname, quint16 port, QAuthenticato= r *authenticator); + void slotRequestFinished(int, bool); private: void parseUploadFile(const QString &data); void parseCreateFolder(const QString &data); @@ -65,6 +66,7 @@ private: QString mServiceLocation; QString mUserName; QString mPassword; + int mReqId; }; } = diff --git a/pimcommon/storageservice/webdav/webdavsettingsdialog.cpp b/pim= common/storageservice/webdav/webdavsettingsdialog.cpp index d413dd9..d36e117 100644 --- a/pimcommon/storageservice/webdav/webdavsettingsdialog.cpp +++ b/pimcommon/storageservice/webdav/webdavsettingsdialog.cpp @@ -59,15 +59,15 @@ WebDavSettingsDialog::~WebDavSettingsDialog() = void WebDavSettingsDialog::slotServiceLocationChanged(const QString &text) { - enableButtonOk(!text.isEmpty()); + enableButtonOk(!text.isEmpty() && (text.startsWith(QLatin1String("http= ://")) || text.startsWith(QLatin1String("https://")))); } = QString WebDavSettingsDialog::serviceLocation() const { - return mServiceLocation->text(); + return mServiceLocation->text().trimmed(); } = QString WebDavSettingsDialog::publicLocation() const { - return mPublicLocation->text(); + return mPublicLocation->text().trimmed(); } diff --git a/pimcommon/storageservice/webdav/webdavstorageservice.cpp b/pim= common/storageservice/webdav/webdavstorageservice.cpp index c8057a5..b987cba 100644 --- a/pimcommon/storageservice/webdav/webdavstorageservice.cpp +++ b/pimcommon/storageservice/webdav/webdavstorageservice.cpp @@ -300,18 +300,24 @@ StorageServiceAbstract::Capabilities WebDavStorageSer= vice::capabilities() const = QString WebDavStorageService::fillListWidget(StorageServiceTreeWidget *lis= tWidget, const QString &data) { + qDebug()<<" data"<clear(); listWidget->createMoveUpItem(); const QList lst =3D QWebdavUrlInfo::parseListInfo(data= ); Q_FOREACH(const QWebdavUrlInfo &info, lst) { if (info.isDir()) { - StorageServiceTreeWidgetItem *item =3D listWidget->addFolder(Q= FileInfo(info.name()).dir().dirName(), info.source()); + QFileInfo folderInfo(info.name()); + StorageServiceTreeWidgetItem *item =3D listWidget->addFolder(f= olderInfo.dir().dirName(), folderInfo.dir().dirName()); + item->setDateCreated(info.createdAt()); + item->setLastModification(info.lastModified()); } else { - StorageServiceTreeWidgetItem *item =3D listWidget->addFile(QFi= leInfo(info.name()).fileName(), info.source()); + const QString mimetype =3D info.mimeType(); + QFileInfo fileInfo(info.name()); + StorageServiceTreeWidgetItem *item =3D listWidget->addFile(fil= eInfo.fileName(), fileInfo.fileName(), mimetype); + item->setDateCreated(info.createdAt()); + item->setLastModification(info.lastModified()); } } - - return QString(); } = @@ -427,9 +433,9 @@ StorageServiceAbstract::Capabilities WebDavStorageServi= ce::serviceCapabilities() cap |=3D AccountInfoCapability; //cap |=3D UploadFileCapability; //cap |=3D DownloadFileCapability; - //cap |=3D CreateFolderCapability; + cap |=3D CreateFolderCapability; //cap |=3D DeleteFolderCapability; - //cap |=3D ListFolderCapability; + cap |=3D ListFolderCapability; //cap |=3D ShareLinkCapability; //cap |=3D DeleteFileCapability; //cap |=3D RenameFolderCapability;