diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-18 12:07:33 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-18 12:07:33 (GMT) |
| commit | a8e4221f38edefb5b342f470407b1f100d0248a3 (patch) | |
| tree | 39f9d8036358c6150d5f7f6285a29e48a8c16882 /src | |
| parent | 78c4aba468a35166bf4ef5056b8e15be4098ba07 (diff) | |
| download | powder-a8e4221f38edefb5b342f470407b1f100d0248a3.zip powder-a8e4221f38edefb5b342f470407b1f100d0248a3.tar.gz | |
Working comment submission
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/Client.cpp | 61 | ||||
| -rw-r--r-- | src/client/Client.h | 2 | ||||
| -rw-r--r-- | src/interface/Textbox.cpp | 5 | ||||
| -rw-r--r-- | src/interface/Textbox.h | 2 | ||||
| -rw-r--r-- | src/preview/PreviewController.cpp | 20 | ||||
| -rw-r--r-- | src/preview/PreviewController.h | 1 | ||||
| -rw-r--r-- | src/preview/PreviewView.cpp | 29 | ||||
| -rw-r--r-- | src/preview/PreviewView.h | 2 |
8 files changed, 122 insertions, 0 deletions
diff --git a/src/client/Client.cpp b/src/client/Client.cpp index d851e55..5ecb8ac 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -685,6 +685,67 @@ failure: return RequestFailure; } +RequestStatus Client::AddComment(int saveID, std::string comment) +{ + lastError = ""; + std::vector<string> * tags = NULL; + std::stringstream urlStream; + char * data = NULL; + int dataStatus, dataLength; + urlStream << "http://" << SERVER << "/Browse/Comments.json?ID=" << saveID << "&Key=" << authUser.SessionKey; + if(authUser.ID) + { + std::stringstream userIDStream; + userIDStream << authUser.ID; + + char * postNames[] = { "Comment", NULL }; + char * postDatas[] = { (char*)(comment.c_str()) }; + int postLengths[] = { comment.length() }; + data = http_multipart_post((char *)urlStream.str().c_str(), postNames, postDatas, postLengths, (char *)(userIDStream.str().c_str()), NULL, (char *)(authUser.SessionID.c_str()), &dataStatus, &dataLength); + } + else + { + lastError = "Not authenticated"; + return RequestFailure; + } + if(dataStatus == 200 && data) + { + try + { + std::istringstream dataStream(data); + json::Object objDocument; + json::Reader::Read(objDocument, dataStream); + + int status = ((json::Number)objDocument["Status"]).Value(); + + if(status!=1) + { + lastError = ((json::Number)objDocument["Error"]).Value(); + } + + if(status!=1) + goto failure; + } + catch (json::Exception &e) + { + lastError = "Could not read response"; + goto failure; + } + } + else + { + lastError = http_ret_text(dataStatus); + goto failure; + } + if(data) + free(data); + return RequestOkay; +failure: + if(data) + free(data); + return RequestFailure; +} + RequestStatus Client::FavouriteSave(int saveID, bool favourite) { lastError = ""; diff --git a/src/client/Client.h b/src/client/Client.h index adaa449..a2d8720 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -92,6 +92,8 @@ public: int GetStampsCount(); SaveFile * GetFirstStamp(); + RequestStatus AddComment(int saveID, std::string comment); + unsigned char * GetSaveData(int saveID, int saveDate, int & dataLength); LoginStatus Login(string username, string password, User & user); void ClearThumbnailRequests(); diff --git a/src/interface/Textbox.cpp b/src/interface/Textbox.cpp index 3180cb7..7d939fd 100644 --- a/src/interface/Textbox.cpp +++ b/src/interface/Textbox.cpp @@ -27,6 +27,11 @@ Textbox::~Textbox() delete actionCallback; } +void Textbox::SetPlaceholder(std::string text) +{ + placeHolder = text; +} + void Textbox::SetText(std::string newText) { backingText = newText; diff --git a/src/interface/Textbox.h b/src/interface/Textbox.h index 700974a..e8e9d22 100644 --- a/src/interface/Textbox.h +++ b/src/interface/Textbox.h @@ -34,6 +34,8 @@ public: virtual void SetText(std::string text); virtual std::string GetText(); + virtual void SetPlaceholder(std::string text); + void SetBorder(bool border) { this->border = border; }; void SetHidden(bool hidden) { masked = hidden; } bool GetHidden() { return masked; } diff --git a/src/preview/PreviewController.cpp b/src/preview/PreviewController.cpp index d5e1a93..a922bc6 100644 --- a/src/preview/PreviewController.cpp +++ b/src/preview/PreviewController.cpp @@ -60,6 +60,26 @@ void PreviewController::Update() } } +void PreviewController::SubmitComment(std::string comment) +{ + if(comment.length() < 4) + { + new ErrorMessage("Error", "Comment is too short"); + } + else + { + RequestStatus status = Client::Ref().AddComment(saveId, comment); + if(status != RequestOkay) + { + new ErrorMessage("Error Submitting comment", Client::Ref().GetLastError()); + } + else + { + previewModel->UpdateComments(1); + } + } +} + void PreviewController::ShowLogin() { loginWindow = new LoginController(); diff --git a/src/preview/PreviewController.h b/src/preview/PreviewController.h index 81c457b..e6b8caa 100644 --- a/src/preview/PreviewController.h +++ b/src/preview/PreviewController.h @@ -38,6 +38,7 @@ public: PreviewView * GetView() { return previewView; } void Update(); void FavouriteSave(); + void SubmitComment(std::string comment); void NextCommentPage(); void PrevCommentPage(); diff --git a/src/preview/PreviewView.cpp b/src/preview/PreviewView.cpp index d7c44b3..79d2cdd 100644 --- a/src/preview/PreviewView.cpp +++ b/src/preview/PreviewView.cpp @@ -28,6 +28,17 @@ public: } }; +class PreviewView::SubmitCommentAction: public ui::ButtonAction +{ + PreviewView * v; +public: + SubmitCommentAction(PreviewView * v_){ v = v_; } + virtual void ActionCallback(ui::Button * sender) + { + v->submitComment(); + } +}; + class PreviewView::AutoCommentSizeAction: public ui::TextboxAction { PreviewView * v; @@ -361,6 +372,23 @@ void PreviewView::NotifySaveChanged(PreviewModel * sender) } } +void PreviewView::submitComment() +{ + if(addCommentBox) + { + std::string comment = std::string(addCommentBox->GetText()); + submitCommentButton->Enabled = false; + addCommentBox->SetText(""); + addCommentBox->SetPlaceholder("Submitting comment"); + FocusComponent(NULL); + + c->SubmitComment(comment); + + addCommentBox->SetPlaceholder("Add comment"); + submitCommentButton->Enabled = true; + } +} + void PreviewView::displayComments(int yOffset) { for(int i = 0; i < commentComponents.size(); i++) @@ -441,6 +469,7 @@ void PreviewView::NotifyCommentBoxEnabledChanged(PreviewModel * sender) addCommentBox->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; AddComponent(addCommentBox); submitCommentButton = new ui::Button(ui::Point(Size.X-40, Size.Y-19), ui::Point(40, 19), "Submit"); + submitCommentButton->SetActionCallback(new SubmitCommentAction(this)); //submitCommentButton->Enabled = false; AddComponent(submitCommentButton); } diff --git a/src/preview/PreviewView.h b/src/preview/PreviewView.h index 7b85ea5..2e94b85 100644 --- a/src/preview/PreviewView.h +++ b/src/preview/PreviewView.h @@ -21,6 +21,7 @@ class PreviewModel; class PreviewController; class PreviewView: public ui::Window { + class SubmitCommentAction; class LoginAction; class AutoCommentSizeAction; PreviewController * c; @@ -56,6 +57,7 @@ class PreviewView: public ui::Window { void displayComments(int yOffset); void commentBoxAutoHeight(); + void submitComment(); public: void AttachController(PreviewController * controller) { c = controller;} PreviewView(); |
