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

List:       kde-commits
Subject:    [kdepim] pimcommon/storageservice/webdav: Add create/list folder
From:       Montel Laurent <montel () kde ! org>
Date:       2014-01-31 21:20:46
Message-ID: E1W9LW2-0002I9-T4 () scm ! kde ! org
[Download RAW message or body]

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/pimcommon/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 = multiResponse.documentElement().firstChild();
-          !n.isNull(); n = n.nextSibling())
-    {
-        QDomElement thisResponse = n.toElement();
-
-        if (thisResponse.isNull())
-            continue;
-
-        QWebdavUrlInfo info(thisResponse);
-
-        if (!info.isValid())
-            continue;
-
-        hasResponse = true;
-        emit listInfo(info);
-    }
-#endif
 }
 
 void QWebdav::responseHeaderReceived( const QHttpResponseHeader & resp )
diff --git a/pimcommon/storageservice/webdav/webdavjob.cpp \
b/pimcommon/storageservice/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(QNetworkReply*,QAuthenticator*)), \
SLOT(slotAuthenticationRequired(QNetworkReply*,QAuthenticator*))); @@ -120,16 +121,26 \
@@ void WebDavJob::listFolder(const QString &folder)  {
     mActionType = PimCommon::StorageServiceAbstract::ListFolder;
     mError = false;
+    qDebug()<<" folder"<<folder;
     QWebdav *webdav = new QWebdav(this);
     webdav->setUser(mUserName, mPassword);
+
     QUrl url(mServiceLocation);
+    if (!mServiceLocation.endsWith(QLatin1Char('/')))
+        url.setUrl(mServiceLocation + QLatin1Char('/') + folder + QLatin1Char('/'));
+    else
+        url.setUrl(mServiceLocation + QLatin1Char('/') + folder + QLatin1Char('/'));
+
+
+
     QHttp::ConnectionMode mode = QHttp::ConnectionModeHttp;
 
     if (url.port() == -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,QAuthenticator*)),
             this, SLOT(slotRequired(QString,quint16,QAuthenticator*)));
+    qDebug()<<" url.toString()"<<url.toString();
     webdav->list(url.toString());
 }
 
-void WebDavJob::slotRequired(const QString &hostname, quint16 port, QAuthenticator \
*authenticator) +void WebDavJob::slotRequired(const QString &, quint16 , \
QAuthenticator *authenticator)  {
     QPointer<LoginDialog> dlg = new LoginDialog;
     if (dlg->exec()) {
@@ -181,9 +193,47 @@ void WebDavJob::createFolder(const QString &foldername, const \
QString &destinati  {
     mActionType = PimCommon::StorageServiceAbstract::CreateFolder;
     mError = false;
-    qDebug()<<" not implemented";
-    Q_EMIT actionFailed(QLatin1String("Not Implemented"));
-    deleteLater();
+    QWebdav *webdav = new QWebdav(this);
+    webdav->setUser(mUserName, mPassword);
+    QUrl url(mServiceLocation);
+    if (!mServiceLocation.endsWith(QLatin1Char('/')))
+        url.setUrl(mServiceLocation + QLatin1Char('/'));
+
+    QHttp::ConnectionMode mode = QHttp::ConnectionModeHttp;
+
+    if (url.port() == -1) {
+        if (mServiceLocation.startsWith(QLatin1String("https://"))) {
+            url.setPort(443);
+        } else if (mServiceLocation.startsWith(QLatin1String("http://"))) {
+            url.setPort(80);
+        }
+    }
+
+    if (mServiceLocation.startsWith(QLatin1String("https://")))
+        mode = QHttp::ConnectionModeHttps;
+    else
+        mode = QHttp::ConnectionModeHttp;
+
+    webdav->setHost(url.host(), mode, url.port());
+
+    connect(webdav, SIGNAL(authenticationRequired(QString,quint16,QAuthenticator*)),
+            this, SLOT(slotRequired(QString,quint16,QAuthenticator*)));
+    connect(webdav, SIGNAL(requestFinished(int, bool)), this, \
SLOT(slotRequestFinished(int, bool))); +    //TODO add destination
+    qDebug()<<" url.toString() "<<url.toString() <<" foldername"<<foldername;
+    mReqId = webdav->mkdir(url.toString() + QLatin1Char('/') + destination + \
QLatin1Char('/') + foldername + QLatin1Char('/')); +}
+
+void WebDavJob::slotRequestFinished(int id, bool)
+{
+    if (id == 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/storageservice/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, QAuthenticator \
*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/pimcommon/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/pimcommon/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 \
WebDavStorageService::capabilities() const  
 QString WebDavStorageService::fillListWidget(StorageServiceTreeWidget *listWidget, \
const QString &data)  {
+    qDebug()<<" data"<<data;
     listWidget->clear();
     listWidget->createMoveUpItem();
     const QList<QWebdavUrlInfo> lst = QWebdavUrlInfo::parseListInfo(data);
     Q_FOREACH(const QWebdavUrlInfo &info, lst) {
         if (info.isDir()) {
-            StorageServiceTreeWidgetItem *item = \
listWidget->addFolder(QFileInfo(info.name()).dir().dirName(), info.source()); +       \
QFileInfo folderInfo(info.name()); +            StorageServiceTreeWidgetItem *item = \
listWidget->addFolder(folderInfo.dir().dirName(), folderInfo.dir().dirName()); +      \
item->setDateCreated(info.createdAt()); +            \
item->setLastModification(info.lastModified());  } else {
-            StorageServiceTreeWidgetItem *item = \
listWidget->addFile(QFileInfo(info.name()).fileName(), info.source()); +            \
const QString mimetype = info.mimeType(); +            QFileInfo \
fileInfo(info.name()); +            StorageServiceTreeWidgetItem *item = \
listWidget->addFile(fileInfo.fileName(), fileInfo.fileName(), mimetype); +            \
item->setDateCreated(info.createdAt()); +            \
item->setLastModification(info.lastModified());  }
     }
-
-
     return QString();
 }
 
@@ -427,9 +433,9 @@ StorageServiceAbstract::Capabilities \
WebDavStorageService::serviceCapabilities()  cap |= AccountInfoCapability;
     //cap |= UploadFileCapability;
     //cap |= DownloadFileCapability;
-    //cap |= CreateFolderCapability;
+    cap |= CreateFolderCapability;
     //cap |= DeleteFolderCapability;
-    //cap |= ListFolderCapability;
+    cap |= ListFolderCapability;
     //cap |= ShareLinkCapability;
     //cap |= DeleteFileCapability;
     //cap |= RenameFolderCapability;


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

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