Git commit 0e025455fe2d50c87824838f48d9ad314da888a0 by Alexander Potashev. Committed on 30/06/2012 at 22:53. Pushed by aspotashev into branch 'master'. SavePhotoJob: Support saving either to Albums or to Wall or to Profile SavePhotoJob calls one of the following VK methods, depending on "dest": * "photos.save" * "photos.saveProfilePhoto" * "photos.saveWallPhoto" M +61 -11 libkvkontakte/savephotojob.cpp M +4 -0 libkvkontakte/savephotojob.h M +1 -1 libkvkontakte/uploadphotosjob.cpp http://commits.kde.org/libkvkontakte/0e025455fe2d50c87824838f48d9ad314da888= a0 diff --git a/libkvkontakte/savephotojob.cpp b/libkvkontakte/savephotojob.cpp index 26d1cda..93c6691 100644 --- a/libkvkontakte/savephotojob.cpp +++ b/libkvkontakte/savephotojob.cpp @@ -24,17 +24,56 @@ namespace Vkontakte { = SavePhotoJob::SavePhotoJob(const QString &accessToken, + UploadPhotosJob::Dest dest, const QVariantMap &photoIdData, int gid) - : VkontakteJob(accessToken, "photos.save", true) + : VkontakteJob(accessToken, getMethod(dest), true) { - addQueryItem("aid", photoIdData["aid"].toString()); - addQueryItem("server", photoIdData["server"].toString()); - addQueryItem("photos_list", photoIdData["photos_list"].toString()); - addQueryItem("hash", photoIdData["hash"].toString()); - - // TODO: may be "gid" will also be in "photoIdData", so this argument = is unnecessary? - if (gid !=3D -1) - addQueryItem("gid", QString::number(gid)); + m_dest =3D dest; + + switch (dest) + { + case Vkontakte::UploadPhotosJob::DEST_ALBUM: + addQueryItem("aid", photoIdData["aid"].toString()); + addQueryItem("server", photoIdData["server"].toString()); + addQueryItem("photos_list", photoIdData["photos_list"].toStrin= g()); + addQueryItem("hash", photoIdData["hash"].toString()); + + // TODO: may be "gid" will also be in "photoIdData", so this a= rgument is unnecessary? + if (gid !=3D -1) + addQueryItem("gid", QString::number(gid)); + break; + case Vkontakte::UploadPhotosJob::DEST_PROFILE: + addQueryItem("server", photoIdData["server"].toString()); + addQueryItem("photo", photoIdData["photos"].toString()); + addQueryItem("hash", photoIdData["hash"].toString()); + break; + case Vkontakte::UploadPhotosJob::DEST_WALL: + // TODO: support optional parameters "uid" and "gid" (for post= ing to other users' and groups' walls) + // TODO: for posting onto a wall, we must also call the "wall.= post" VK method + addQueryItem("server", photoIdData["server"].toString()); + addQueryItem("photo", photoIdData["photo"].toString()); + addQueryItem("hash", photoIdData["hash"].toString()); + break; + default: + // TODO: handle unknown destination error + break; + } +} + +// static +QString SavePhotoJob::getMethod(Vkontakte::UploadPhotosJob::Dest dest) +{ + switch (dest) + { + case Vkontakte::UploadPhotosJob::DEST_ALBUM: + return QLatin1String("photos.save"); + case Vkontakte::UploadPhotosJob::DEST_PROFILE: + return QLatin1String("photos.saveProfilePhoto"); + case Vkontakte::UploadPhotosJob::DEST_WALL: + return QLatin1String("photos.saveWallPhoto"); + default: + return QLatin1String(""); + } } = void SavePhotoJob::handleItem(const QVariant &data) @@ -46,8 +85,19 @@ void SavePhotoJob::handleItem(const QVariant &data) = void SavePhotoJob::handleData(const QVariant &data) { - foreach(const QVariant &item, data.toList()) - handleItem(item); + switch (m_dest) + { + case Vkontakte::UploadPhotosJob::DEST_ALBUM: + foreach(const QVariant &item, data.toList()) + handleItem(item); + break; + case Vkontakte::UploadPhotosJob::DEST_PROFILE: + case Vkontakte::UploadPhotosJob::DEST_WALL: + handleItem(data); + break; + default: + break; + } } = QList SavePhotoJob::list() const diff --git a/libkvkontakte/savephotojob.h b/libkvkontakte/savephotojob.h index 79fe52e..219ebc0 100644 --- a/libkvkontakte/savephotojob.h +++ b/libkvkontakte/savephotojob.h @@ -23,6 +23,7 @@ = #include "vkontaktejobs.h" #include "photoinfo.h" +#include "uploadphotosjob.h" = namespace Vkontakte { @@ -34,15 +35,18 @@ class SavePhotoJob : public VkontakteJob { public: SavePhotoJob(const QString &accessToken, + UploadPhotosJob::Dest dest, const QVariantMap &photoIdData, int gid =3D -1); = QList list() const; = protected: + QString getMethod(Vkontakte::UploadPhotosJob::Dest dest); virtual void handleData(const QVariant &data); void handleItem(const QVariant &data); = private: + UploadPhotosJob::Dest m_dest; QList m_list; }; = diff --git a/libkvkontakte/uploadphotosjob.cpp b/libkvkontakte/uploadphotos= job.cpp index d5d5a24..6b6bcf8 100644 --- a/libkvkontakte/uploadphotosjob.cpp +++ b/libkvkontakte/uploadphotosjob.cpp @@ -162,7 +162,7 @@ void UploadPhotosJob::postJobFinished(KJob *kjob) = void UploadPhotosJob::startSaveJob(const QVariantMap &photoIdData) { - SavePhotoJob *job =3D new SavePhotoJob(d->accessToken, photoIdData); + SavePhotoJob *job =3D new SavePhotoJob(d->accessToken, d->dest, photoI= dData); m_jobs.append(job); connect(job, SIGNAL(result(KJob*)), this, SLOT(saveJobFinished(KJob*))= ); job->start();