From 5d3d1d4916cf6d126b54c8bbfb9ba67e27a2e789 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Sun, 12 Aug 2012 15:15:47 +0100 Subject: [PATCH] Message of the day and user session check on startup --- src/client/Client.cpp | 48 +++++++++++++++++++++++++++++++++---- src/client/Client.h | 6 +++++ src/client/ClientListener.h | 1 + src/search/SearchView.cpp | 12 ++++++++++ src/search/SearchView.h | 2 ++ 5 files changed, 65 insertions(+), 4 deletions(-) diff --git a/src/client/Client.cpp b/src/client/Client.cpp index c54681349..9908e6976 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -24,6 +24,7 @@ #endif #include "Config.h" +#include "Format.h" #include "Client.h" #include "MD5.h" #include "graphics/Graphics.h" @@ -129,7 +130,12 @@ void Client::Initialise(std::string proxyString) stampsLib.close(); //Begin version check - versionCheckRequest = http_async_req_start(NULL, SERVER "/Download/Version.json", NULL, 0, 1); + versionCheckRequest = http_async_req_start(NULL, SERVER "/Startup.json", NULL, 0, 1); + + if(authUser.ID) + { + http_auth_headers(versionCheckRequest, (char *)format::NumberToString(authUser.ID).c_str(), NULL, (char *)authUser.SessionID.c_str()); + } } bool Client::DoInstallation() @@ -485,6 +491,17 @@ std::vector Client::ReadFile(std::string filename) } } +void Client::SetMessageOfTheDay(std::string message) +{ + messageOfTheDay = message; + notifyMessageOfTheDay(); +} + +std::string Client::GetMessageOfTheDay() +{ + return messageOfTheDay; +} + void Client::Tick() { //Check thumbnail queue @@ -512,9 +529,24 @@ void Client::Tick() json::Object objDocument; json::Reader::Read(objDocument, dataStream); - json::Object stableVersion = objDocument["Stable"]; - json::Object betaVersion = objDocument["Beta"]; - json::Object snapshotVersion = objDocument["Snapshot"]; + //Check session + json::Boolean sessionStatus = objDocument["Session"]; + if(!sessionStatus.Value()) + { + authUser = User(0, ""); + } + + //MOTD + json::String messageOfTheDay = objDocument["MessageOfTheDay"]; + this->messageOfTheDay = messageOfTheDay.Value(); + notifyMessageOfTheDay(); + + //Check for updates + json::Object versions = objDocument["Updates"]; + + json::Object stableVersion = versions["Stable"]; + json::Object betaVersion = versions["Beta"]; + json::Object snapshotVersion = versions["Snapshot"]; json::Number stableMajor = stableVersion["Major"]; json::Number stableMinor = stableVersion["Minor"]; @@ -580,6 +612,14 @@ void Client::notifyUpdateAvailable() } } +void Client::notifyMessageOfTheDay() +{ + for (std::vector::iterator iterator = listeners.begin(), end = listeners.end(); iterator != end; ++iterator) + { + (*iterator)->NotifyMessageOfTheDay(this); + } +} + void Client::notifyAuthUserChanged() { for (std::vector::iterator iterator = listeners.begin(), end = listeners.end(); iterator != end; ++iterator) diff --git a/src/client/Client.h b/src/client/Client.h index 881249613..31f1fa19b 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -46,6 +46,8 @@ class ThumbnailListener; class ClientListener; class Client: public Singleton { private: + std::string messageOfTheDay; + void * versionCheckRequest; bool updateAvailable; UpdateInfo updateInfo; @@ -71,6 +73,7 @@ private: static vector explodePropertyString(std::string property); void notifyUpdateAvailable(); void notifyAuthUserChanged(); + void notifyMessageOfTheDay(); //Config file handle json::Object configDocument; @@ -90,6 +93,9 @@ public: std::vector ReadFile(std::string filename); + void SetMessageOfTheDay(std::string message); + std::string GetMessageOfTheDay(); + void Initialise(std::string proxyString); void SetProxy(std::string proxy); diff --git a/src/client/ClientListener.h b/src/client/ClientListener.h index 4fc2d8921..07e784c92 100644 --- a/src/client/ClientListener.h +++ b/src/client/ClientListener.h @@ -17,6 +17,7 @@ public: virtual void NotifyUpdateAvailable(Client * sender) {} virtual void NotifyAuthUserChanged(Client * sender) {} + virtual void NotifyMessageOfTheDay(Client * sender) {} }; diff --git a/src/search/SearchView.cpp b/src/search/SearchView.cpp index 7603bd0dd..5e42289a0 100644 --- a/src/search/SearchView.cpp +++ b/src/search/SearchView.cpp @@ -20,6 +20,7 @@ SearchView::SearchView(): previousButton = new ui::Button(ui::Point(1, YRES+MENUSIZE-18), ui::Point(50, 16), "\x96 Prev"); infoLabel = new ui::Label(ui::Point(51, YRES+MENUSIZE-18), ui::Point(XRES+BARSIZE-102, 16), "Loading..."); tagsLabel = new ui::Label(ui::Point(51, YRES+MENUSIZE-18), ui::Point(XRES+BARSIZE-102, 16), "\boPopular Tags:"); + motdLabel = new ui::Label(ui::Point(51, YRES+MENUSIZE-18), ui::Point(XRES+BARSIZE-102, 16), Client::Ref().GetMessageOfTheDay()); class SearchAction : public ui::TextboxAction { @@ -215,6 +216,11 @@ SearchView::SearchView(): CheckAccess(); } +void SearchView::NotifyMessageOfTheDay(Client * sender) +{ + motdLabel->SetText(sender->GetMessageOfTheDay()); +} + void SearchView::doSearch() { c->DoSearch(searchField->GetText()); @@ -383,6 +389,9 @@ void SearchView::NotifySaveListChanged(SearchModel * sender) vector > tags = sender->GetTagList(); //string messageOfTheDay = sender->GetMessageOfTheDay(); + RemoveComponent(motdLabel); + motdLabel->SetParentWindow(NULL); + RemoveComponent(tagsLabel); tagsLabel->SetParentWindow(NULL); @@ -460,6 +469,9 @@ void SearchView::NotifySaveListChanged(SearchModel * sender) AddComponent(tagsLabel); tagsLabel->Position.Y = tagYOffset-16; + + AddComponent(motdLabel); + motdLabel->Position.Y = tagYOffset-28; } buttonWidth = (buttonAreaWidth/savesX) - buttonPadding*2; diff --git a/src/search/SearchView.h b/src/search/SearchView.h index 83a64c2fc..9365ddcb7 100644 --- a/src/search/SearchView.h +++ b/src/search/SearchView.h @@ -28,6 +28,7 @@ private: ui::Textbox * searchField; ui::Label * infoLabel; ui::Label * tagsLabel; + ui::Label * motdLabel; ui::Button * sortButton; ui::Button * ownButton; ui::Spinner * loadingSpinner; @@ -46,6 +47,7 @@ public: void NotifyShowOwnChanged(SearchModel * sender); void NotifyShowFavouriteChanged(SearchModel * sender); void NotifyAuthUserChanged(Client * sender); + void NotifyMessageOfTheDay(Client * sender); void CheckAccess(); virtual void OnTryOkay(OkayMethod method); SearchView();