diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-11-17 19:44:09 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-11-17 19:44:09 (GMT) |
| commit | 058a2edd75debbd0297f92572316daa704bd379f (patch) | |
| tree | ad303f091f9a08b209b91eb34a9fcad996a3de69 /src/client/Client.h | |
| parent | e3594aba9e05c6865d396418c028049cda92c2f3 (diff) | |
| parent | 7a21ae192fe19868539956f3fe28e62b2c7c4429 (diff) | |
| download | powder-058a2edd75debbd0297f92572316daa704bd379f.zip powder-058a2edd75debbd0297f92572316daa704bd379f.tar.gz | |
Merge branch 'master' of github.com:FacialTurd/PowderToypp
Diffstat (limited to 'src/client/Client.h')
| -rw-r--r-- | src/client/Client.h | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/src/client/Client.h b/src/client/Client.h new file mode 100644 index 0000000..642fd63 --- /dev/null +++ b/src/client/Client.h @@ -0,0 +1,176 @@ +#ifndef CLIENT_H +#define CLIENT_H + +#include <queue> +#include <vector> +#include <list> + +#include "Config.h" +#include "Singleton.h" + +#include "User.h" + +#include "cajun/elements.h" + +class Thumbnail; +class SaveInfo; +class SaveFile; +class SaveComment; +class GameSave; + +enum LoginStatus { + LoginOkay, LoginError +}; + +enum RequestStatus { + RequestOkay, RequestFailure +}; + +class UpdateInfo +{ +public: + enum BuildType { Stable, Beta, Snapshot }; + std::string File; + int Major; + int Minor; + int Build; + int Time; + BuildType Type; + UpdateInfo() : Major(0), Minor(0), Build(0), Time(0), File(""), Type(Stable) {} + UpdateInfo(int major, int minor, int build, std::string file, BuildType type) : Major(major), Minor(minor), Build(build), Time(0), File(file), Type(type) {} + UpdateInfo(int time, std::string file, BuildType type) : Major(0), Minor(0), Build(0), Time(time), File(file), Type(type) {} +}; + +class ThumbnailListener; +class ClientListener; +class Client: public Singleton<Client> { +private: + std::string messageOfTheDay; + + void * versionCheckRequest; + bool updateAvailable; + UpdateInfo updateInfo; + + + std::string lastError; + + std::list<std::string> stampIDs; + int lastStampTime; + int lastStampName; + + //Auth session + User authUser; + + //Thumbnail retreival + int thumbnailCacheNextID; + Thumbnail * thumbnailCache[THUMB_CACHE_SIZE]; + void * activeThumbRequests[IMGCONNS]; + int activeThumbRequestTimes[IMGCONNS]; + int activeThumbRequestCompleteTimes[IMGCONNS]; + std::string activeThumbRequestIDs[IMGCONNS]; + void updateStamps(); + static std::vector<std::string> explodePropertyString(std::string property); + void notifyUpdateAvailable(); + void notifyAuthUserChanged(); + void notifyMessageOfTheDay(); + + //Config file handle + json::Object configDocument; +public: + + std::vector<ClientListener*> listeners; + + UpdateInfo GetUpdateInfo(); + + Client(); + ~Client(); + + std::vector<std::string> DirectorySearch(std::string directory, std::string search, std::vector<std::string> extensions); + std::vector<std::string> DirectorySearch(std::string directory, std::string search, std::string extension); + + bool DoInstallation(); + + std::vector<unsigned char> ReadFile(std::string filename); + + void SetMessageOfTheDay(std::string message); + std::string GetMessageOfTheDay(); + + void Initialise(std::string proxyString); + void SetProxy(std::string proxy); + + int MakeDirectory(const char * dirname); + void WriteFile(std::vector<unsigned char> fileData, std::string filename); + void WriteFile(std::vector<char> fileData, std::string filename); + bool FileExists(std::string filename); + + void AddListener(ClientListener * listener); + void RemoveListener(ClientListener * listener); + + RequestStatus ExecVote(int saveID, int direction); + RequestStatus UploadSave(SaveInfo & save); + + SaveFile * GetStamp(std::string stampID); + void DeleteStamp(std::string stampID); + std::string AddStamp(GameSave * saveData); + std::vector<std::string> GetStamps(int start, int count); + void RescanStamps(); + int GetStampsCount(); + SaveFile * GetFirstStamp(); + + RequestStatus AddComment(int saveID, std::string comment); + + unsigned char * GetSaveData(int saveID, int saveDate, int & dataLength); + std::vector<unsigned char> GetSaveData(int saveID, int saveDate); + LoginStatus Login(std::string username, std::string password, User & user); + void ClearThumbnailRequests(); + std::vector<SaveInfo*> * SearchSaves(int start, int count, std::string query, std::string sort, std::string category, int & resultCount); + std::vector<std::pair<std::string, int> > * GetTags(int start, int count, std::string query, int & resultCount); + std::vector<SaveComment*> * GetComments(int saveID, int start, int count); + Thumbnail * GetPreview(int saveID, int saveDate); + Thumbnail * GetThumbnail(int saveID, int saveDate); + SaveInfo * GetSave(int saveID, int saveDate); + RequestStatus DeleteSave(int saveID); + RequestStatus ReportSave(int saveID, std::string message); + RequestStatus UnpublishSave(int saveID); + RequestStatus FavouriteSave(int saveID, bool favourite); + void SetAuthUser(User user); + User GetAuthUser(); + std::vector<std::string> * RemoveTag(int saveID, std::string tag); //TODO RequestStatus + std::vector<std::string> * AddTag(int saveID, std::string tag); + std::string GetLastError() { + return lastError; + } + void Tick(); + void Shutdown(); + + //Force flushing preferences to file on disk. + void WritePrefs(); + + std::string GetPrefString(std::string property, std::string defaultValue); + double GetPrefNumber(std::string property, double defaultValue); + int GetPrefInteger(std::string property, int defaultValue); + unsigned int GetPrefUInteger(std::string property, unsigned int defaultValue); + std::vector<std::string> GetPrefStringArray(std::string property); + std::vector<double> GetPrefNumberArray(std::string property); + std::vector<int> GetPrefIntegerArray(std::string property); + std::vector<unsigned int> GetPrefUIntegerArray(std::string property); + std::vector<bool> GetPrefBoolArray(std::string property); + bool GetPrefBool(std::string property, bool defaultValue); + + void SetPref(std::string property, std::string value); + void SetPref(std::string property, double value); + void SetPref(std::string property, int value); + void SetPref(std::string property, unsigned int value); + void SetPref(std::string property, std::vector<std::string> value); + void SetPref(std::string property, std::vector<double> value); + void SetPref(std::string property, std::vector<int> value); + void SetPref(std::string property, std::vector<unsigned int> value); + void SetPref(std::string property, std::vector<bool> value); + void SetPref(std::string property, bool value); + + json::UnknownElement GetPref(std::string property); + void setPrefR(std::deque<std::string> tokens, json::UnknownElement & element, json::UnknownElement & value); + void SetPref(std::string property, json::UnknownElement & value); +}; + +#endif // CLIENT_H |
