From d7f5e89a1d74018de36b43357d02e80e72d4c8cd Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 21 Jan 2015 13:51:16 +0100 Subject: [PATCH] Sharedialog: retrive thumbnail from server for shares Initial patch for #2726. Request a thumbnail from the server if files are to be shared. --- src/gui/sharedialog.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ src/gui/sharedialog.h | 18 ++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index a675e528a6..203989ed5e 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -208,6 +208,13 @@ void ShareDialog::getShares() OcsShareJob *job = new OcsShareJob("GET", url, _account, this); connect(job, SIGNAL(jobFinished(QString)), this, SLOT(slotSharesFetched(QString))); job->start(); + + if (QFileInfo(_localPath).isFile()) { + QUrl url2 = Account::concatUrlPath(AccountManager::instance()->account()->url(), QString("index.php/apps/files/api/v1/thumbnail/150/150/%1").arg(_sharePath)); + ThumbnailJob *job2 = new ThumbnailJob(url2, AccountManager::instance()->account(), this); + connect(job2, SIGNAL(jobFinished(int, QByteArray)), SLOT(slotThumbnailFetched(int, QByteArray))); + job2->start(); + } } void ShareDialog::slotSharesFetched(const QString &reply) @@ -504,6 +511,18 @@ void ShareDialog::slotNextSyncFinished( const SyncResult& result ) } #endif +void ShareDialog::slotThumbnailFetched(const int &statusCode, const QByteArray &reply) +{ + if (statusCode != 200) { + qDebug() << Q_FUNC_INFO << "Status code: " << statusCode; + return; + } + + QPixmap p; + p.loadFromData(reply, "PNG"); + _ui->label_icon->setPixmap(p); +} + OcsShareJob::OcsShareJob(const QByteArray &verb, const QUrl &url, AccountPtr account, QObject* parent) : AbstractNetworkJob(account, "", parent), _verb(verb), @@ -546,4 +565,25 @@ bool OcsShareJob::finished() return true; } +ThumbnailJob::ThumbnailJob(const QUrl &url, AccountPtr account, QObject* parent) +: AbstractNetworkJob(account, "", parent), + _url(url) +{ + setIgnoreCredentialFailure(true); +} + +void ThumbnailJob::start() +{ + qDebug() << Q_FUNC_INFO; + setReply(getRequest(_url)); + setupConnections(reply()); + AbstractNetworkJob::start(); +} + +bool ThumbnailJob::finished() +{ + emit jobFinished(reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), reply()->readAll()); + return true; +} + } diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index 59d725bae5..7bd87c19d4 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -41,6 +41,23 @@ private: QList > _postParams; }; + +class ThumbnailJob : public AbstractNetworkJob { + Q_OBJECT +public: + explicit ThumbnailJob(const QUrl& url, AccountPtr account, QObject* parent = 0); +public slots: + void start() Q_DECL_OVERRIDE; +signals: + void jobFinished(int statusCode, QByteArray reply); +private slots: + virtual bool finished() Q_DECL_OVERRIDE; +private: + QUrl _url; +}; + + + namespace Ui { class ShareDialog; } @@ -71,6 +88,7 @@ private slots: void slotCheckBoxExpireClicked(); void slotPasswordReturnPressed(); void slotPushButtonCopyLinkPressed(); + void slotThumbnailFetched(const int &statusCode, const QByteArray &reply); private: void displayError(int code); void displayInfo( const QString& msg );