Implemented Deletion functionality #7
This commit is contained in:
@@ -48,6 +48,7 @@ set(SOURCES
|
|||||||
src/Managers/TokenManager.cpp
|
src/Managers/TokenManager.cpp
|
||||||
src/Managers/UserManager.cpp
|
src/Managers/UserManager.cpp
|
||||||
src/Parsers/APIParser.cpp
|
src/Parsers/APIParser.cpp
|
||||||
|
src/Syncers/Delete.cpp
|
||||||
src/Syncers/Download.cpp
|
src/Syncers/Download.cpp
|
||||||
src/Syncers/Upload.cpp
|
src/Syncers/Upload.cpp
|
||||||
src/Utilities/Conversions.cpp
|
src/Utilities/Conversions.cpp
|
||||||
@@ -66,6 +67,7 @@ set(HEADERS
|
|||||||
src/Models/UploadForm.h
|
src/Models/UploadForm.h
|
||||||
src/Models/User.h
|
src/Models/User.h
|
||||||
src/Parsers/APIParser.h
|
src/Parsers/APIParser.h
|
||||||
|
src/Syncers/Delete.h
|
||||||
src/Syncers/Download.h
|
src/Syncers/Download.h
|
||||||
src/Syncers/SyncerBase.h
|
src/Syncers/SyncerBase.h
|
||||||
src/Syncers/Upload.h
|
src/Syncers/Upload.h
|
||||||
|
|||||||
@@ -47,6 +47,15 @@ namespace Managers
|
|||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ActionManager::isNumber(string val)
|
||||||
|
{
|
||||||
|
return !val.empty() && std::find_if(val.begin(),
|
||||||
|
val.end(), [](char c)
|
||||||
|
{
|
||||||
|
return !std::isdigit(c);
|
||||||
|
}) == val.end();
|
||||||
|
}
|
||||||
|
|
||||||
void ActionManager::initialize()
|
void ActionManager::initialize()
|
||||||
{
|
{
|
||||||
initializeSupportedActions();
|
initializeSupportedActions();
|
||||||
@@ -64,7 +73,7 @@ namespace Managers
|
|||||||
{
|
{
|
||||||
supportedFlags = vector<string>{
|
supportedFlags = vector<string>{
|
||||||
"-u", "-p", "-t", "-h", "-s",
|
"-u", "-p", "-t", "-h", "-s",
|
||||||
"-d"
|
"-d", "-D"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
void ActionManager::validateAction()
|
void ActionManager::validateAction()
|
||||||
@@ -96,22 +105,23 @@ namespace Managers
|
|||||||
|
|
||||||
for (auto flag : flagVals)
|
for (auto flag : flagVals)
|
||||||
{
|
{
|
||||||
if (flag.size() > 3)
|
//if (flag.size() > 3 || flg.flag.compare("-D"))
|
||||||
|
if (flag.size() > 3 || isNumber(flag))
|
||||||
{
|
{
|
||||||
flg.value = flag;
|
flg.value = flag;
|
||||||
|
cout<<"flag value "<<flg.value<<endl;
|
||||||
flags.push_back(flg);
|
flags.push_back(flg);
|
||||||
flg = Flags{};
|
flg = Flags{};
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (std::any_of(supportedFlags.begin(), supportedFlags.end(),
|
if (std::any_of(supportedFlags.begin(), supportedFlags.end(),
|
||||||
[&](string val)
|
[&](string val)
|
||||||
{
|
{
|
||||||
if (val.size() < 3)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
return !val.compare(flag);
|
return !val.compare(flag);
|
||||||
}))
|
}))
|
||||||
{
|
{
|
||||||
|
cout<<"flag "<<flag<<endl;
|
||||||
flg.flag = flag;
|
flg.flag = flag;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -130,6 +140,7 @@ namespace Managers
|
|||||||
for (auto i = 2; true; ++i)
|
for (auto i = 2; true; ++i)
|
||||||
{
|
{
|
||||||
string val{*(params + i)};
|
string val{*(params + i)};
|
||||||
|
cout<<"Parsed flag "<<val<<endl;
|
||||||
parsed.push_back(val);
|
parsed.push_back(val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ namespace Managers
|
|||||||
std::vector<Models::Flags> retrieveFlags() const;
|
std::vector<Models::Flags> retrieveFlags() const;
|
||||||
std::string retrieveAction() const;
|
std::string retrieveAction() const;
|
||||||
private:
|
private:
|
||||||
|
bool isNumber(std::string);
|
||||||
|
|
||||||
void initialize();
|
void initialize();
|
||||||
void initializeSupportedActions();
|
void initializeSupportedActions();
|
||||||
void initializeSupportedFlags();
|
void initializeSupportedFlags();
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include"Models/API.h"
|
#include"Models/API.h"
|
||||||
#include"Models/Song.h"
|
#include"Models/Song.h"
|
||||||
#include"Parsers/APIParser.h"
|
#include"Parsers/APIParser.h"
|
||||||
|
#include"Syncers/Delete.h"
|
||||||
#include"Syncers/Upload.h"
|
#include"Syncers/Upload.h"
|
||||||
|
|
||||||
#include"TokenManager.h"
|
#include"TokenManager.h"
|
||||||
@@ -21,6 +22,7 @@ using Models::API;
|
|||||||
using Models::Song;
|
using Models::Song;
|
||||||
using Parsers::APIParser;
|
using Parsers::APIParser;
|
||||||
using Models::IcarusAction;
|
using Models::IcarusAction;
|
||||||
|
using Syncers::Delete;
|
||||||
using Syncers::Upload;
|
using Syncers::Upload;
|
||||||
|
|
||||||
namespace Managers
|
namespace Managers
|
||||||
@@ -42,6 +44,7 @@ namespace Managers
|
|||||||
switch (mapActions[action])
|
switch (mapActions[action])
|
||||||
{
|
{
|
||||||
case deleteAct:
|
case deleteAct:
|
||||||
|
deleteSong();
|
||||||
break;
|
break;
|
||||||
case downloadAct:
|
case downloadAct:
|
||||||
downloadSong();
|
downloadSong();
|
||||||
@@ -62,6 +65,35 @@ namespace Managers
|
|||||||
{"upload", uploadAct}
|
{"upload", uploadAct}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
void CommitManager::deleteSong()
|
||||||
|
{
|
||||||
|
cout<<"Deleting song..."<<endl;
|
||||||
|
|
||||||
|
UserManager usrMgr{icaAction};
|
||||||
|
auto user = usrMgr.retrieveUser();
|
||||||
|
|
||||||
|
APIParser apiPrs{icaAction};
|
||||||
|
auto api = apiPrs.retrieveAPI();
|
||||||
|
|
||||||
|
TokenManager tk{user, api};
|
||||||
|
auto token = tk.requestToken();
|
||||||
|
|
||||||
|
Song song{};
|
||||||
|
|
||||||
|
for (auto arg : icaAction.flags)
|
||||||
|
{
|
||||||
|
auto flag = arg.flag;
|
||||||
|
auto value = arg.value;
|
||||||
|
|
||||||
|
if (flag.compare("-D") == 0)
|
||||||
|
{
|
||||||
|
song.id = atoi(value.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Delete del{api};
|
||||||
|
del.deleteSong(token, song);
|
||||||
|
}
|
||||||
void CommitManager::downloadSong()
|
void CommitManager::downloadSong()
|
||||||
{
|
{
|
||||||
// TODO: Implement this functionality
|
// TODO: Implement this functionality
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ namespace Managers
|
|||||||
void commitAction();
|
void commitAction();
|
||||||
private:
|
private:
|
||||||
void initializeMapActions();
|
void initializeMapActions();
|
||||||
|
void deleteSong();
|
||||||
void downloadSong();
|
void downloadSong();
|
||||||
void uploadSong();
|
void uploadSong();
|
||||||
|
|
||||||
|
|||||||
@@ -40,17 +40,22 @@ namespace Managers
|
|||||||
|
|
||||||
usrObj["username"] = user.username;
|
usrObj["username"] = user.username;
|
||||||
usrObj["password"] = user.password;
|
usrObj["password"] = user.password;
|
||||||
|
cout<<user.username<<" "<<user.password<<endl;
|
||||||
|
|
||||||
cout<<"Sending request for token"<<endl;
|
cout<<"Sending request for token"<<endl;
|
||||||
auto url = api.url + api.endpoint;
|
auto url = api.url + api.endpoint;
|
||||||
|
cout<<url<<endl;
|
||||||
auto r = cpr::Post(cpr::Url{url},
|
auto r = cpr::Post(cpr::Url{url},
|
||||||
cpr::Body{usrObj.dump()},
|
cpr::Body{usrObj.dump()},
|
||||||
cpr::Header{{"Content-Type", "application/json"}});
|
cpr::Header{{"Content-Type", "application/json"}});
|
||||||
|
|
||||||
|
cout<<r.text<<endl;
|
||||||
json res = json::parse(r.text);
|
json res = json::parse(r.text);
|
||||||
token.accessToken = res["token"];
|
token.accessToken = res["token"];
|
||||||
token.tokenType = res["token_type"];
|
token.tokenType = res["token_type"];
|
||||||
|
|
||||||
|
//cout<<"status code "<<r.status_code<<endl;
|
||||||
|
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
#pragma Functions
|
#pragma Functions
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
#include"APIParser.h"
|
#include"APIParser.h"
|
||||||
|
|
||||||
|
#include<iostream>
|
||||||
|
|
||||||
|
using std::cout;
|
||||||
|
using std::endl;
|
||||||
|
|
||||||
using Models::API;
|
using Models::API;
|
||||||
using Models::IcarusAction;
|
using Models::IcarusAction;
|
||||||
|
|
||||||
@@ -24,16 +29,25 @@ namespace Parsers
|
|||||||
void APIParser::parseAPI()
|
void APIParser::parseAPI()
|
||||||
{
|
{
|
||||||
auto flags = icaAct.flags;
|
auto flags = icaAct.flags;
|
||||||
|
cout<<"Parsing api"<<endl;
|
||||||
|
|
||||||
for (auto flag : flags)
|
//for (auto flag : flags)
|
||||||
|
for (auto i =0; i < flags.size(); ++i)
|
||||||
{
|
{
|
||||||
auto arg = flag.flag;
|
auto arg = flags[i].flag;
|
||||||
auto value = flag.value;
|
auto value = flags[i].value;
|
||||||
|
|
||||||
if (arg.compare("-h") == 0)
|
if (arg.compare("-h") == 0)
|
||||||
|
|
||||||
{
|
{
|
||||||
api.url = value;
|
api.url = value;
|
||||||
}
|
}
|
||||||
|
if (value.compare("-h") == 0)
|
||||||
|
{
|
||||||
|
api.url = flags[i + 1].value;
|
||||||
|
}
|
||||||
|
|
||||||
|
cout<<"url is "<<api.url<<endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: For now I will hard code
|
// TODO: For now I will hard code
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
#include"Delete.h"
|
||||||
|
|
||||||
|
#include<exception>
|
||||||
|
#include<iostream>
|
||||||
|
|
||||||
|
#include<cpr/cpr.h>
|
||||||
|
|
||||||
|
using std::cout;
|
||||||
|
using std::endl;
|
||||||
|
using std::exception;
|
||||||
|
using std::string;
|
||||||
|
|
||||||
|
using Models::API;
|
||||||
|
using Models::Song;
|
||||||
|
using Models::Token;
|
||||||
|
|
||||||
|
namespace Syncers
|
||||||
|
{
|
||||||
|
#pragma
|
||||||
|
Delete::Delete(API api)
|
||||||
|
{
|
||||||
|
this->api = api;
|
||||||
|
this->api.endpoint = "song/data";
|
||||||
|
}
|
||||||
|
#pragma Constructors
|
||||||
|
|
||||||
|
|
||||||
|
#pragma
|
||||||
|
void Delete::deleteSong(const Token token, Song song)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
auto url = retrieveUrl(song);
|
||||||
|
string auth{token.tokenType};
|
||||||
|
auth.append(" " + token.accessToken);
|
||||||
|
auto r = cpr::Delete(cpr::Url(url),
|
||||||
|
cpr::Header{{"authorization", auth}});
|
||||||
|
|
||||||
|
auto statusCode = r.status_code;
|
||||||
|
|
||||||
|
cout<<"Status code "<<statusCode<<endl;
|
||||||
|
}
|
||||||
|
catch (exception e)
|
||||||
|
{
|
||||||
|
auto msg = e.what();
|
||||||
|
cout<<msg<<endl;
|
||||||
|
}
|
||||||
|
cout<<"Finished"<<endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
string Delete::retrieveUrl(Song song)
|
||||||
|
{
|
||||||
|
string url{api.url + "api/" + api.version + "/" +
|
||||||
|
api.endpoint + "/"};
|
||||||
|
|
||||||
|
url.append(std::to_string(song.id));
|
||||||
|
cout<<"url "<<url<<endl;
|
||||||
|
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
#pragma Functions
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#ifndef DELETE_H_
|
||||||
|
#define DELETE_H_
|
||||||
|
|
||||||
|
#include"Models/API.h"
|
||||||
|
#include"Models/Song.h"
|
||||||
|
#include"Models/Token.h"
|
||||||
|
|
||||||
|
#include"SyncerBase.h"
|
||||||
|
|
||||||
|
namespace Syncers
|
||||||
|
{
|
||||||
|
class Delete : SyncerBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Delete(Models::API);
|
||||||
|
|
||||||
|
void deleteSong(const Models::Token, Models::Song);
|
||||||
|
private:
|
||||||
|
std::string retrieveUrl(Models::Song);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
#ifndef SYNCERBASE_H_
|
#ifndef SYNCERBASE_H_
|
||||||
#define SYNCERBASE_H_
|
#define SYNCERBASE_H_
|
||||||
|
|
||||||
|
#include<string>
|
||||||
|
|
||||||
#include"Models/API.h"
|
#include"Models/API.h"
|
||||||
|
|
||||||
namespace Syncers
|
namespace Syncers
|
||||||
|
|||||||
Reference in New Issue
Block a user