From 7a6916c3ff03df1d05474081466451481e716227 Mon Sep 17 00:00:00 2001 From: amazing-username Date: Wed, 5 Jun 2019 20:51:56 -0400 Subject: [PATCH] Added CLI functionality for uploading a song #7. Next thing that is up adding CLI functionality for downloading songs via id --- CMakeLists.txt | 4 +++ src/Managers/CommitManager.cpp | 33 ++++++++++++++----------- src/Managers/CommitManager.h | 1 + src/Managers/TokenManager.cpp | 12 ++++++++- src/Managers/TokenManager.h | 3 +++ src/Managers/UserManager.cpp | 1 - src/Models/API.h | 16 ++++++++++++ src/Parsers/APIParser.cpp | 45 ++++++++++++++++++++++++++++++++++ src/Parsers/APIParser.h | 23 +++++++++++++++++ src/Syncers/Download.cpp | 6 +++++ src/Syncers/Download.h | 8 +++++- src/Syncers/SyncerBase.h | 15 ++++++++++++ src/Syncers/Upload.cpp | 26 +++++++++++++++++--- src/Syncers/Upload.h | 19 ++++++++------ 14 files changed, 185 insertions(+), 27 deletions(-) create mode 100644 src/Models/API.h create mode 100644 src/Parsers/APIParser.cpp create mode 100644 src/Parsers/APIParser.h create mode 100644 src/Syncers/SyncerBase.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 03175c7..9035c98 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,6 +47,7 @@ set(SOURCES src/Managers/FileManager.cpp src/Managers/TokenManager.cpp src/Managers/UserManager.cpp + src/Parsers/APIParser.cpp src/Syncers/Download.cpp src/Syncers/Upload.cpp src/Utilities/Conversions.cpp @@ -57,13 +58,16 @@ set(HEADERS src/Managers/FileManager.h src/Managers/TokenManager.h src/Managers/UserManager.h + src/Models/API.h src/Models/Flags.h src/Models/IcarusAction.h src/Models/Song.h src/Models/Token.h src/Models/UploadForm.h src/Models/User.h + src/Parsers/APIParser.h src/Syncers/Download.h + src/Syncers/SyncerBase.h src/Syncers/Upload.h src/Utilities/Conversions.h ) diff --git a/src/Managers/CommitManager.cpp b/src/Managers/CommitManager.cpp index 73cf4f8..6044ae2 100644 --- a/src/Managers/CommitManager.cpp +++ b/src/Managers/CommitManager.cpp @@ -2,6 +2,9 @@ #include +#include"Models/API.h" +#include"Models/Song.h" +#include"Parsers/APIParser.h" #include"Syncers/Upload.h" #include"TokenManager.h" @@ -14,6 +17,9 @@ using std::string; using Managers::TokenManager; using Managers::UserManager; +using Models::API; +using Models::Song; +using Parsers::APIParser; using Models::IcarusAction; using Syncers::Upload; @@ -38,6 +44,7 @@ namespace Managers case deleteAct: break; case downloadAct: + downloadSong(); break; case retrieveAct: break; @@ -55,16 +62,23 @@ namespace Managers {"upload", uploadAct} }; } + void CommitManager::downloadSong() + { + // TODO: Implement this functionality + } void CommitManager::uploadSong() { cout<<"Uploading song..."<user = user; } + TokenManager::TokenManager(const User user, API api) + { + this->user = user; + this->api = api; + this->api.endpoint = "api/" + api.version + + "/login"; + } #pragma Constructors @@ -33,7 +41,9 @@ namespace Managers usrObj["username"] = user.username; usrObj["password"] = user.password; - auto r = cpr::Post(cpr::Url{""}, + cout<<"Sending request for token"<user = user; - this->user = User{}; } UserManager::UserManager(const IcarusAction icaAct) { diff --git a/src/Models/API.h b/src/Models/API.h new file mode 100644 index 0000000..74c53f3 --- /dev/null +++ b/src/Models/API.h @@ -0,0 +1,16 @@ +#ifndef API_H_ +#define API_H_ + +#include + +namespace Models +{ + struct API + { + std::string url; + std::string endpoint; + std::string version; + }; +} + +#endif diff --git a/src/Parsers/APIParser.cpp b/src/Parsers/APIParser.cpp new file mode 100644 index 0000000..1e4e67a --- /dev/null +++ b/src/Parsers/APIParser.cpp @@ -0,0 +1,45 @@ +#include"APIParser.h" + +using Models::API; +using Models::IcarusAction; + +namespace Parsers +{ + #pragma + APIParser::APIParser(IcarusAction icaAct) + { + this->icaAct = icaAct; + api = API{}; + parseAPI(); + } + #pragma endregion + + + #pragma + API APIParser::retrieveAPI() const + { + return api; + } + + void APIParser::parseAPI() + { + auto flags = icaAct.flags; + + for (auto flag : flags) + { + auto arg = flag.flag; + auto value = flag.value; + + if (arg.compare("-h") == 0) + { + api.url = value; + } + } + + // TODO: For now I will hard code + // the api version since I am only + // on version 1 + api.version = "v1"; + } + #pragma functions +} diff --git a/src/Parsers/APIParser.h b/src/Parsers/APIParser.h new file mode 100644 index 0000000..2cb1c34 --- /dev/null +++ b/src/Parsers/APIParser.h @@ -0,0 +1,23 @@ +#ifndef APIPARSER_H_ +#define APIPARSER_H_ + +#include"Models/API.h" +#include"Models/IcarusAction.h" + +namespace Parsers +{ + class APIParser + { + public: + APIParser(Models::IcarusAction); + + Models::API retrieveAPI() const; + private: + void parseAPI(); + + Models::API api; + Models::IcarusAction icaAct; + }; +} + +#endif diff --git a/src/Syncers/Download.cpp b/src/Syncers/Download.cpp index bbbd3d8..2b367f4 100644 --- a/src/Syncers/Download.cpp +++ b/src/Syncers/Download.cpp @@ -10,9 +10,15 @@ using std::endl; using std::ofstream; using std::string; +using Models::API; + namespace Syncers { Download::Download() { } + Download::Download(API api) + { + this->api = api; + } Download::Download(string filePath) { downloadFilePath = filePath; diff --git a/src/Syncers/Download.h b/src/Syncers/Download.h index 1506136..1a097ca 100644 --- a/src/Syncers/Download.h +++ b/src/Syncers/Download.h @@ -4,12 +4,18 @@ #include #include +#include"Models/API.h" +#include"Models/Song.h" + +#include"SyncerBase.h" + namespace Syncers { - class Download + class Download : SyncerBase { public: Download(); + Download(Models::API); Download(std::string); void downloadSong(int); diff --git a/src/Syncers/SyncerBase.h b/src/Syncers/SyncerBase.h new file mode 100644 index 0000000..8f03fcf --- /dev/null +++ b/src/Syncers/SyncerBase.h @@ -0,0 +1,15 @@ +#ifndef SYNCERBASE_H_ +#define SYNCERBASE_H_ + +#include"Models/API.h" + +namespace Syncers +{ + class SyncerBase + { + protected: + Models::API api; + }; +} + +#endif diff --git a/src/Syncers/Upload.cpp b/src/Syncers/Upload.cpp index f7e41d3..476a4a4 100644 --- a/src/Syncers/Upload.cpp +++ b/src/Syncers/Upload.cpp @@ -15,6 +15,8 @@ using std::string; using json = nlohmann::json; using Managers::FileManager; +using Models::API; +using Models::Song; using Models::UploadForm; using namespace cpr; @@ -27,6 +29,11 @@ namespace Syncers this->songPath = filePath; this->fMgr = FileManager(songPath); } + Upload::Upload(API api) + { + this->api = api; + this->api.endpoint = "song/data"; + } Upload::Upload(UploadForm formData) { this->url = formData.url; @@ -52,15 +59,18 @@ namespace Syncers cout<<"Finished"< #include"Managers/FileManager.h" +#include"Models/API.h" #include"Models/Song.h" #include"Models/Token.h" #include"Models/UploadForm.h" @@ -18,24 +19,28 @@ namespace Syncers public: Upload(); Upload(std::string); + Upload(Models::API); Upload(Models::UploadForm); void uploadSong(); - void uploadSong(const Models::Token, const std::string); + void uploadSong(const Models::Token, Models::Song); private: Managers::FileManager fMgr; + Models::API api; Models::Song song; - std::string apiUrl{"http://192.168.1.3"}; - std::string apiEndPoint{"/api/song/data"}; - std::string songPath; - std::string url; - int port{9349}; + std::string apiUrl{""}; // Not being used + std::string apiEndPoint{""}; // Not being used + std::string songPath; // Not being used + std::string url; // Not being used + int port{9349}; // Not being used + + std::string retrieveUrl(); void configureSongDemo(); void printSongDetails(); void printJsonData(nlohmann::json); - nlohmann::json serializeObject(); + nlohmann::json serializeObject(); // Not being used }; }