diff --git a/include/Managers/ActionManager.h b/include/Managers/ActionManager.h index dff29fc..63afb3b 100644 --- a/include/Managers/ActionManager.h +++ b/include/Managers/ActionManager.h @@ -2,6 +2,7 @@ #define ACTIONMANAGER_H_ #include +#include #include #include @@ -17,25 +18,23 @@ namespace Managers Models::IcarusAction retrieveIcarusAction() const; private: - bool isNumber(std::string); + constexpr std::array supportedFlags() noexcept; + constexpr std::array supportedActions() noexcept; + + bool isNumber(const std::string_view) noexcept; void initialize(); void validateFlags(); std::vector parsedFlags(); - void printAction(); - void printFlags(); + void printAction() noexcept; + void printFlags() noexcept; std::string action; - std::array supportedActions{ - "download", "upload", "retrieve", "delete" - }; - std::array supportedFlags{ - "-u", "-p", "-t", "-h", "-s", "-sd", - "-sr", "-d", "-D", "-b", "-rt" - }; + std::vector flags; + char **params; int paramCount; }; diff --git a/include/Managers/CommitManager.h b/include/Managers/CommitManager.h index 4e511fc..4c2aa94 100644 --- a/include/Managers/CommitManager.h +++ b/include/Managers/CommitManager.h @@ -17,12 +17,16 @@ namespace Managers void commitAction(); - enum RetrieveTypes + enum class RetrieveTypes { songs }; private: + enum class ActionValues; + + std::map mapActions() noexcept; + Models::Token parseToken(Models::API); void deleteSong(); @@ -30,7 +34,7 @@ namespace Managers void retrieveObjects(); void uploadSong(); - enum ActionValues + enum class ActionValues { deleteAct, downloadAct, @@ -38,12 +42,6 @@ namespace Managers uploadAct }; - std::map mapActions{ - {"delete", deleteAct}, {"download", downloadAct}, - {"retrieve", retrieveAct}, - {"upload", uploadAct} - }; - Models::IcarusAction icaAction; }; } diff --git a/include/Syncers/Upload.h b/include/Syncers/Upload.h index b9c2543..5b9890d 100644 --- a/include/Syncers/Upload.h +++ b/include/Syncers/Upload.h @@ -25,7 +25,8 @@ namespace Syncers Upload(Models::API); Models::Song uploadSong(const Models::Token&, Models::Song&); - void uploadSongsFromDirectory(const Models::Token&, const std::string&, bool); + void uploadSongsFromDirectory(const Models::Token&, + const std::string&, const bool, bool); private: Managers::FileManager fMgr; Models::API api; @@ -40,7 +41,7 @@ namespace Syncers void printSongDetails(); void printSongDetails(std::vector&); - void printJsonData(nlohmann::json); + void printJsonData(const nlohmann::json&); }; } diff --git a/src/Main.cpp b/src/Main.cpp index ea577cd..639bfcf 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -31,7 +31,8 @@ void printHelp() cout<<"Required for upload\n"; cout<<"-s path of song\n"; cout<<"-sd directory where to search for songs to upload (Optional)\n"; - cout<<"-sr directory where to recursively search for songs to upload (Optional)\n\n"; + cout<<"-sr directory where to recursively search for songs to upload (Optional)\n"; + cout<<"-nc will not prompt the user when uploading from a directory\n\n"; cout<<"Required for download\n"; cout<<"-b song id\n"; @@ -50,13 +51,13 @@ int main(int argc, char** argv) if (argc < 2) { printHelp(); - return 1; + return -1; } - ActionManager actMgr{argv, argc}; + ActionManager actMgr(argv, argc); auto chosenAction = actMgr.retrieveIcarusAction(); - CommitManager commitMgr{chosenAction}; + CommitManager commitMgr(chosenAction); commitMgr.commitAction(); return 0; diff --git a/src/Managers/ActionManager.cpp b/src/Managers/ActionManager.cpp index b3d9ade..ba49d7b 100644 --- a/src/Managers/ActionManager.cpp +++ b/src/Managers/ActionManager.cpp @@ -8,6 +8,7 @@ using std::cout; using std::endl; using std::string; +using std::string_view; using std::vector; using Models::Flags; @@ -27,14 +28,24 @@ namespace Managers #pragma IcarusAction ActionManager::retrieveIcarusAction() const { - auto icarusAction = IcarusAction{}; + IcarusAction icarusAction; icarusAction.flags = flags; icarusAction.action = action; return icarusAction; } - bool ActionManager::isNumber(string val) + + constexpr std::array ActionManager::supportedFlags() noexcept + { + constexpr std::array allFlags{"-u", "-p", "-t", "-h", "-s", + "-sd", "-sr", "-d", "-D", "-b", "-rt", "-nc"}; + + return allFlags; + } + + + bool ActionManager::isNumber(string_view val) noexcept { return !val.empty() && std::find_if(val.begin(), val.end(), [](char c) @@ -59,8 +70,16 @@ namespace Managers Flags flg{}; + auto allSupportedFlags = supportedFlags(); + for (auto flag : flagVals) { + if (flag.compare("-nc") == 0) + { + flg.flag = flag; + flags.push_back(flg); + continue; + } if (flag.size() > 3 || isNumber(flag)) { flg.value = flag; @@ -70,10 +89,10 @@ namespace Managers continue; } - if (std::any_of(supportedFlags.begin(), supportedFlags.end(), - [&](string& val) + if (std::any_of(allSupportedFlags.begin(), allSupportedFlags.end(), + [&](const char *val) { - return !val.compare(flag); + return !flag.compare(val); })) { //cout<<"flag "< ActionManager::parsedFlags() { - auto parsed = vector{}; + auto parsed = vector(); for (auto i = 2; i < paramCount; ++i) { - parsed.push_back(std::move(*(params + i))); + const std::string flag(std::move(*(params + i))); + parsed.push_back(std::move(flag)); } return parsed; } #pragma - void ActionManager::printAction() + void ActionManager::printAction() noexcept { if (action.empty()) { @@ -111,7 +131,7 @@ namespace Managers cout<<"Action is "< + CommitManager::mapActions() noexcept + { + const std::map actions{ + {"delete", ActionValues::deleteAct}, + {"download", ActionValues::downloadAct}, + {"retrieve", ActionValues::retrieveAct}, + {"upload", ActionValues::uploadAct} + }; + + return actions; + } + + Token CommitManager::parseToken(API api) { cout<<"fetching token"<