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

List:       kde-commits
Subject:    [libkvkontakte] libkvkontakte: SavePhotoJob: Support saving either to Albums or to Wall or to Profil
From:       Alexander Potashev <aspotashev () gmail ! com>
Date:       2012-06-30 20:52:40
Message-ID: 20120630205240.E6FBAA60CD () git ! kde ! org
[Download RAW message or body]

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/0e025455fe2d50c87824838f48d9ad314da888a0

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 != -1)
-        addQueryItem("gid", QString::number(gid));
+    m_dest = dest;
+
+    switch (dest)
+    {
+        case Vkontakte::UploadPhotosJob::DEST_ALBUM:
+            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 != -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 posting 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<PhotoInfoPtr> 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 = -1);
 
     QList<PhotoInfoPtr> 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<PhotoInfoPtr> m_list;
 };
 
diff --git a/libkvkontakte/uploadphotosjob.cpp b/libkvkontakte/uploadphotosjob.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 = new SavePhotoJob(d->accessToken, photoIdData);
+    SavePhotoJob *job = new SavePhotoJob(d->accessToken, d->dest, photoIdData);
     m_jobs.append(job);
     connect(job, SIGNAL(result(KJob*)), this, SLOT(saveJobFinished(KJob*)));
     job->start();


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

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