From 67e44a375d2d51cecda669775d361322b5ac3af0 Mon Sep 17 00:00:00 2001 From: Wesnydy Ribeiro Date: Mon, 17 Aug 2015 09:11:02 -0300 Subject: [PATCH] Modificação nos parâmetros da linha de comando --- Makefile | 1 + main.cpp | 399 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ servico/src/include/serviceWindowGeneration.h | 6 +++--- servico/src/include/serviceWindowGenerationFromRec.h | 2 +- servico/src/include/serviceWindowGenerationFromSRT.h | 4 ++-- servico/src/include/serviceWindowGenerationFromText.h | 2 +- servico/src/serviceWindowGenerationFromRec.cpp | 13 +++++++------ servico/src/serviceWindowGenerationFromSRT.cpp | 15 ++++++++------- servico/src/serviceWindowGenerationFromText.cpp | 10 +++++----- util/src/argParser.cpp | 241 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ util/src/include/argParser.h | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 488 insertions(+), 265 deletions(-) create mode 100644 util/src/argParser.cpp create mode 100644 util/src/include/argParser.h diff --git a/Makefile b/Makefile index ea98f6f..66fbd8f 100644 --- a/Makefile +++ b/Makefile @@ -27,6 +27,7 @@ INCLUDES= \ -I recognize/src/include utilObjs= \ + argParser.o \ logger.o tradutorObjs = \ diff --git a/main.cpp b/main.cpp index 65481cf..52236bd 100644 --- a/main.cpp +++ b/main.cpp @@ -15,107 +15,132 @@ #include "serviceWindowGenerationFromRec.h" #include "serviceWindowGenerationFromText.h" #include "serviceException.h" +#include +#include "argParser.h" #include #include +#define MAX_SIZE_PATH 256 #define PATH_DEVEL_CONTENTS "vlibras_user/vlibras-contents/videos" #define PATH_DEVEL_UPLOADS "vlibras_user/vlibras-contents/uploads" #define PATH_VBOX_UPLOADS "vlibras_user/.vlibras-config/uploads" using namespace std; -void serviceSRT(char* service, char* path_video, char* path_srt, char* sublanguage, char* position, char* size, char* transparency, char* id, char* client_type); -void serviceREC(char* service, char* path_video, char* position, char* size, char* transparency, char* id, char* client_type); +void serviceSRT(int service, string path_video, string path_srt, int language, int position, int size, int background, string id, int mode); +void serviceREC(int service, string path_video, int position, int size, int background, string id, int mode); +void serviceOnlySRT(int service, string path_srt, int language, int background, string id, int mode); +void serviceOnlyAudio(int service, string path_audio, int background, string id, int mode); +void serviceText(string path_text, int language, int background, string id, int mode); +void serviceRECWithoutMixing(int service, string path_video, int background, string id, int mode); -void serviceOnlySRT(char* service, char* path_file, char* sublanguage, char* transparency, char* id, char* client_type); -void serviceOnlyAudio(char* service, char* path_audio, char* transparency, char* id, char* client_type); -void serviceRECWithoutMixing(char* service, char* path_video, char* transparency, char* id, char* client_type); -void serviceText(char* service, char* path_text, char* sublanguage, char* transparency, char* id, char* client_type); - -//void serviceREC(char* path_video, char* sublanguage, char* position, char* size, char* transparency, char* username, char* rate); -//void serviceOnlyAudio(char* path_audio, char* transparency, char* username, char* rate); - -void help(); -void serviceHelp(int service); -void setPathContents(char* client); -void fail(string msg); void hasFailed(); void hasInvalid(); +void fail(string msg); +void setPathContents(int mode, string id); bool isFailed; bool isInvalid; int main(int argc, char* argv[]) { + int service; + int language; + int position; + int size; + int background; + int mode; + int nomixer; + + string input; + string input_srt; + string id; + + ArgParser *parser; + struct timeval tv1, tv2; double t1, t2; gettimeofday(&tv1, NULL); t1 = (double)(tv1.tv_sec) + (double)(tv1.tv_usec)/ 1000000.00; - - if(argc > 2) { - printf("\n################## VLIBRAS : LAVID ##################\n\n"); - DDPRINTF("Service Type: %s\n", argv[1]); - switch((int) atoi(argv[1])){ - case 1: - if(argc <= 9){ - serviceHelp(1); - hasInvalid(); - }else{ - serviceSRT(argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8], argv[9]); - } - break; - case 2: - if(argc <= 7){ - serviceHelp(2); - hasInvalid(); - }else{ - serviceREC(argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]); - } - break; - case 3: - if(argc <= 6){ - serviceHelp(3); - hasInvalid(); - }else{ - serviceText(argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]); - } - break; - case 4: - if(argc <= 5){ - serviceHelp(4); - hasInvalid(); - }else{ - serviceOnlySRT(argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]); - } - break; - case 5: - if(argc <= 5){ - serviceHelp(5); - hasInvalid(); - }else{ - serviceOnlyAudio(argv[1], argv[2], argv[3], argv[4], argv[5]); - } - break; - case 6: - if(argc <= 5){ - serviceHelp(6); - hasInvalid(); - }else{ - serviceRECWithoutMixing(argv[1], argv[2], argv[3], argv[4], argv[5]); - } - break; - default: - cout << "\nFAIL VLibras: Serviço inválido! Tente --help" << endl; - hasInvalid(); - break; - } - }else if(argc == 2 && (strcmp(argv[1], "--help")) == 0){ - help(); - exit(0); - }else{ - cout << "\nFAIL VLibras: Tente --help para obter informações.\n" << endl; - hasInvalid(); + + parser = new ArgParser(); + try{ + parser->readArgs(argv, argc); + }catch(lavidlib::RuntimeException &ex){ + exit(1); + } + + printf("\n################## LAViD : VLibras ##################\n\n"); + + service = parser->getService(); + + switch(service){ + case 1: + DDPRINTF("Service Type: Video with Subtitles\n"); + input = parser->getInput(); + input_srt = parser->getInputSRT(); + language = parser->getLanguage(); + position = parser->getPosition(); + size = parser->getSize(); + background = parser->getBackground(); + id = parser->getId(); + mode = parser->getMode(); + serviceSRT(service, input, input_srt, language, position, size, background, id, mode); + break; + + case 2: + DDPRINTF("Service Type: Video Recognize\n"); + input = parser->getInput(); + position = parser->getPosition(); + size = parser->getSize(); + background = parser->getBackground(); + id = parser->getId(); + mode = parser->getMode(); + serviceREC(service, input, position, size, background, id, mode); + break; + + case 3: + DDPRINTF("Service Type: Text\n"); + input = parser->getInput(); + language = parser->getLanguage(); + background = parser->getBackground(); + id = parser->getId(); + mode = parser->getMode(); + serviceText(input, language, background, id, mode); + break; + + case 4: + DDPRINTF("Service Type: Subtitles only\n"); + input = parser->getInput(); + language = parser->getLanguage(); + background = parser->getBackground(); + id = parser->getId(); + mode = parser->getMode(); + serviceOnlySRT(service, input, language, background, id, mode); + break; + + case 5: //reconhecimento de audio + DDPRINTF("Service Type: Audio Recognize\n"); + input = parser->getInput(); + background = parser->getBackground(); + id = parser->getId(); + mode = parser->getMode(); + serviceREC(service, input, 0, 0, background, id, mode); + break; + + case 6: //Reconhecimento de video sem mixagem + DDPRINTF("Service Type: Video Recognize (Mixer Disabled)\n"); + input = parser->getInput(); + background = parser->getBackground(); + id = parser->getId(); + mode = parser->getMode(); + serviceREC(service, input, 0, 0, background, id, mode);//como service != 2 então não há mixagem + break; + + default: + printf("\nOpção de serviço não reconhecida!\n"); + hasInvalid(); } if(isFailed) @@ -130,14 +155,19 @@ int main(int argc, char* argv[]) { exit(0); } -void serviceSRT(char* service, char* path_video, char* path_srt, char* sublanguage, char* position, - char* size, char* transparency, char* id, char* client_type){ +void serviceSRT(int service, string path_video, string path_srt, int language, int position, int size, int background, string id, int mode){ + char* video = new char[MAX_SIZE_PATH]; + char* srt = new char[MAX_SIZE_PATH]; + char* name = new char[64]; - setPathContents(client_type); + strcpy(video, path_video.c_str()); + strcpy(srt, path_srt.c_str()); + strcpy(name, id.c_str()); - ServiceWindowGenerationFromSRT * service_srt; - service_srt = new ServiceWindowGenerationFromSRT(path_video, path_srt, (int) atoi(sublanguage), - (int) atoi(position), (int) atoi(size), (int) atoi(transparency), id, client_type, (int) atoi(service)); + setPathContents(mode, id); + + ServiceWindowGenerationFromSRT* service_srt; + service_srt = new ServiceWindowGenerationFromSRT(video, srt, language, position, size, background, name, mode, service); try{ service_srt->initialize(); @@ -149,18 +179,24 @@ void serviceSRT(char* service, char* path_video, char* path_srt, char* sublangua while(!service_srt->isFinished()){ sleep(5); } - + + delete [] video; + delete [] srt; + delete [] name; delete service_srt; } -void serviceREC(char* service, char* path_video, char* position, char* size, - char* transparency, char* id, char* client_type){ +void serviceREC(int service, string path_video, int position, int size, int background, string id, int mode){ + char* video = new char[MAX_SIZE_PATH]; + char* name = new char[64]; + + strcpy(video, path_video.c_str()); + strcpy(name, id.c_str()); - setPathContents(client_type); + setPathContents(mode, id); - ServiceWindowGenerationFromRec * service_rec; - service_rec = new ServiceWindowGenerationFromRec(path_video, (int) atoi(position), - (int) atoi(size), (int) atoi(transparency), id, client_type, (int) atoi(service)); + ServiceWindowGenerationFromRec* service_rec; + service_rec = new ServiceWindowGenerationFromRec(video, position, size, background, name, mode, service); try{ service_rec->initialize(); @@ -170,26 +206,25 @@ void serviceREC(char* service, char* path_video, char* position, char* size, return; } while(!service_rec->isFinished()){ - sleep(2); + sleep(5); } + + delete [] video; + delete [] name; delete service_rec; } -void serviceRECWithoutMixing(char* service, char* path_video, char* transparency, char* id, char* client_type){ - - char* position = new char[1]; - char* size = new char[1]; - strcpy(position, "0"); - strcpy(size, "0"); - serviceREC(service, path_video, position, size, transparency, id, client_type); -} +void serviceText(string path_text, int language, int background, string id, int mode){ + char* text = new char[MAX_SIZE_PATH]; + char* name = new char[64]; -void serviceText(char* service, char* path_text, char* sublanguage, char* transparency, char* id, char* client_type){ + strcpy(text, path_text.c_str()); + strcpy(name, id.c_str()); - setPathContents(client_type); + setPathContents(mode, id); - ServiceWindowGenerationFromText *service_text; - service_text = new ServiceWindowGenerationFromText(path_text, (int) atoi(sublanguage), (int) atoi(transparency), id, client_type); + ServiceWindowGenerationFromText* service_text; + service_text = new ServiceWindowGenerationFromText(text, language, background, name, mode); try{ service_text->initialize(); @@ -202,15 +237,23 @@ void serviceText(char* service, char* path_text, char* sublanguage, char* transp while (!service_text->isFinished()) { usleep(100000); //100ms } + + delete [] text; + delete [] name; delete service_text; } -void serviceOnlySRT(char* service, char* path_file, char* sublanguage, char* transparency, char* id, char* client_type){ +void serviceOnlySRT(int service, string path_srt, int language, int background, string id, int mode){ + char* srt = new char[MAX_SIZE_PATH]; + char* name = new char[64]; - setPathContents(client_type); + strcpy(srt, path_srt.c_str()); + strcpy(name, id.c_str()); - ServiceWindowGenerationFromSRT * service_srt; - service_srt = new ServiceWindowGenerationFromSRT(path_file, (int) atoi(sublanguage), (int) atoi(transparency), id, client_type, (int) atoi(service)); + setPathContents(mode, id); + + ServiceWindowGenerationFromSRT* service_srt; + service_srt = new ServiceWindowGenerationFromSRT(srt, language, background, name, mode, service); try{ service_srt->initialize(); }catch(ServiceException ex){ @@ -222,67 +265,12 @@ void serviceOnlySRT(char* service, char* path_file, char* sublanguage, char* tra while (!service_srt->isFinished()) { usleep(100000); //100ms } - delete service_srt; -} - -void serviceOnlyAudio(char* service, char* path_audio, char* transparency, char* id, char* client_type){ - char* position = new char[1]; - char* size = new char[1]; - strcpy(position, "0"); - strcpy(size, "0"); - serviceREC(service, path_audio, position, size, transparency, id, client_type); + delete [] srt; + delete [] name; + delete service_srt; } -/*void serviceREC(char* path_video, char* sublanguage, - char* position, char* size, char* transparency, char* id, char* rate){ - - ServiceWindowGenerationFromREC * service_rec; - service_rec = new ServiceWindowGenerationFromREC( - path_video, - (int) atoi(sublanguage), - (int) atoi(position), - (int) atoi(size), - (int) atoi(transparency), - id, 2, rate); - - try{ - service_rec->initialize(); - }catch(ServiceException ex){ - fail(ex.getMessage()); - hasFailed(); - return; - } - while(!service_rec->isFinished()){ - sleep(2); - } - delete service_rec; -}*/ - -/*void serviceOnlyAudio(char* path_audio, char* transparency, char* id, char* rate){ - - ServiceWindowGenerationFromREC * service_rec; - service_rec = new ServiceWindowGenerationFromREC( - path_audio, - 0, - 0, - 0, - (int) atoi(transparency), - id, 5, rate); - - try{ - service_rec->initialize(); - }catch(ServiceException ex){ - fail(ex.getMessage()); - hasFailed(); - return; - } - while(!service_rec->isFinished()){ - sleep(2); - } - delete service_rec; -}*/ - void fail(string msg){ printf("\n"); DDDDPRINTF("Ops... Tivemos um problema! :(\n"); @@ -297,84 +285,15 @@ void hasInvalid(){ isInvalid = true; } -void setPathContents(char* client){ +void setPathContents(int mode, string id){ string command = "mkdir -p "; - if(strcmp(client, "devel") == 0) - command.append(PATH_DEVEL_CONTENTS).append(" && mkdir -p ").append(PATH_DEVEL_UPLOADS); - else if (strcmp(client, "prod") == 0) + if(mode == 1)// 1 aqui é devel + command.append(PATH_DEVEL_CONTENTS).append(" && mkdir -p ").append(PATH_DEVEL_UPLOADS).append("/").append(id); + else if (mode == 2)// 2 aqui é prod command.append(PATH_VBOX_UPLOADS); else { - fail("Cliente Inválido!"); + fail("Modo de execução não reconhecido!"); exit(127); } system(command.c_str()); } - -void serviceHelp(int service){ - cout << "\nParâmetros inválidos! Tente novamente.\n"; - switch(service){ - case 1: - cout << "\nService Type: Video with Subtitles\n" - << "./vlibras 1 INPUT_VIDEO INPUT_SRT LANGUAGE(1: Portuguese, 2:Glosa) POSITION(1: Top_Left, 2: Top_Right, 3: Bottom_Right, 4: Bottom_Left) " - << "SIZE(1: Small, 2: Medium, 3: Large) TRANSPARENCY(0: Opaque, 1: Transparent) ID CLIENT_TYPE\n"; - break; - case 2: - cout << "\nService Type: Video Recognize\n" - << "./vlibras 2 INPUT_VIDEO POSITION(1: Top_Left, 2: Top_Right, 3: Bottom_Right, 4: Bottom_Left) " - << "SIZE(1: Small, 2: Medium, 3: Large) TRANSPARENCY(0: Opaque, 1: Transparent) ID CLIENT_TYPE\n"; - break; - case 3: - cout << "\nService Type: Text\n" - << "./vlibras 3 INPUT_TEXT_FILE LANGUAGE(1: Portuguese, 2:Glosa) TRANSPARENCY(0: Opaque, 1: Transparent) ID CLIENT_TYPE\n"; - break; - case 4: - cout << "\nService Type: Subtitles only\n" - << "./vlibras 4 INPUT_SRT LANGUAGE(1: Portuguese, 2:Glosa) TRANSPARENCY(0: Opaque, 1: Transparent) ID CLIENT_TYPE\n"; - break; - case 5: - cout << "\nService Type: Audio Recognize\n" - << "./vlibras 5 INPUT_AUDIO TRANSPARENCY(0: Opaque, 1: Transparent) ID CLIENT_TYPE\n"; - break; - case 6: - cout << "\nService Type: Video Recognize Without Mixing\n" - << "./vlibras 6 INPUT_VIDEO TRANSPARENCY(0: Opaque, 1: Transparent) ID CLIENT_TYPE\n"; - break; - } -} - -//Help do programa, explicando todos os parâmetros existentes... -void help() { - - cout << endl - << "Usage Summary: vlibras [SERVICE] [INPUT] ... [TRANSPARENCY] [ID] [CLIENT_TYPE]\n" - << "\nSERVICE:\n" - << "1 Video with Subtitles (SRT) - requires INPUT_VIDEO and INPUT_SRT\n" - << "2 Video Recognize - requires INPUT_VIDEO\n" - << "3 Text - requires INPUT_TEXT_FILE\n" - << "4 Subtitles only (SRT) - requires INPUT_SRT\n" - << "5 Audio Recognize - requires INPUT_AUDIO\n" - << "6 Video Recognize without mixing - requires INPUT_VIDEO\n" - << "\nSERVICES PARAMETERS:\n" - << "Video with subtitles:\n" - << " [INPUT_VIDEO] [INPUT_SRT] [LANGUAGE] [POSITION] [SIZE] [TRANSPARENCY] [ID] [CLIENT_TYPE]\n" - << "\nVideo Recognize:\n" - << " [INPUT_VIDEO] [LANGUAGE] [POSITION] [SIZE] [TRANSPARENCY] [ID] [CLIENT_TYPE]\n" - << "\nText:\n" - << " [INPUT_TEXT_FILE] [TRANSPARENCY] [ID] [CLIENT_TYPE]\n" - << "\nSubtitles only:\n" - << " [INPUT_SRT] [TRANSPARENCY] [ID] [CLIENT_TYPE]\n" - << "\nAudio Recognize\n" - << " [INPUT_AUDIO] [TRANSPARENCY] [ID] [CLIENT_TYPE]\n" - << "\nPARAMETERS:\n" - << "INPUT_VIDEO Path of the video file\n" - << "INPUT_SRT Path of the subtitle file\n" - << "INPUT_TEXT_FILE Path of the text file\n" - << "INPUT_AUDIO Path of the audio file\n" - << "LANGUAGE 1 - means Portuguese, 2 - means Glosa\n" - << "POSITION 1 - means Top_Left, 2 - means Top_Right, 3 - means Bottom_Right, 4 - means Bottom_Left\n" - << "SIZE 1 - means Small, 2 - means Medium, 3 - means Large\n" - << "TRANSPARENCY 0 - means that the background is opaque , 1 - means that the background is transparent\n" - << "ID Relative to the unique ID on the Database\n" - << "CLIENT_TYPE prod - means that the client is web/cloud, devel - means that the client is developer\n" - << endl; -} \ No newline at end of file diff --git a/servico/src/include/serviceWindowGeneration.h b/servico/src/include/serviceWindowGeneration.h index 170399b..192e050 100644 --- a/servico/src/include/serviceWindowGeneration.h +++ b/servico/src/include/serviceWindowGeneration.h @@ -18,8 +18,8 @@ #include #include -#define DEVELOPER "devel" -#define PRODUCTION "prod" +#define DEVELOPER 1 +#define PRODUCTION 2 #define PATH_DEVEL_CONTENTS "vlibras_user/vlibras-contents/videos" #define PATH_DEVEL_UPLOADS "vlibras_user/vlibras-contents/uploads" #define PATH_VBOX_UPLOADS "vlibras_user/.vlibras-config/uploads" @@ -51,7 +51,6 @@ protected: char* path_libras; char* path_contents; char* path_uploads; - char* client_type; char* user_id; int size; @@ -59,6 +58,7 @@ protected: int transparency; int sub_language; int service_type; + int exec_mode; int numero_legendas; int legendas_enviadas; diff --git a/servico/src/include/serviceWindowGenerationFromRec.h b/servico/src/include/serviceWindowGenerationFromRec.h index bde76a3..6a0b1a9 100644 --- a/servico/src/include/serviceWindowGenerationFromRec.h +++ b/servico/src/include/serviceWindowGenerationFromRec.h @@ -23,7 +23,7 @@ public: ServiceWindowGenerationFromRec(char* pathVideo, int position, int size, int transparency, char* id, char* client, int serviceType, char* rate); ServiceWindowGenerationFromRec(char* pathVideo, int pos, int size, - int transp, char* id, char* client, int serviceType); + int transp, char* id, int mode, int serviceType); ~ServiceWindowGenerationFromRec(); void notifyTextRecognized(unsigned char* text, int64_t pts); diff --git a/servico/src/include/serviceWindowGenerationFromSRT.h b/servico/src/include/serviceWindowGenerationFromSRT.h index 87e1e3e..d7abc78 100644 --- a/servico/src/include/serviceWindowGenerationFromSRT.h +++ b/servico/src/include/serviceWindowGenerationFromSRT.h @@ -24,9 +24,9 @@ private: public: //construtor de serviço de video e legenda ServiceWindowGenerationFromSRT(char* pathVideo, char* pathSRT, int sublanguage, int pos, - int size, int transp, char* id, char* client, int serviceType); + int size, int transp, char* id, int mode, int serviceType); //construtor de serviço de somente legenda - ServiceWindowGenerationFromSRT(char* pathSRT, int sublanguage, int transparency, char* id, char* client, int serviceType); + ServiceWindowGenerationFromSRT(char* pathSRT, int sublanguage, int transparency, char* id, int mode, int serviceType); ~ServiceWindowGenerationFromSRT(); void notifySubtitle(unsigned char* subtitle, int64_t pts); diff --git a/servico/src/include/serviceWindowGenerationFromText.h b/servico/src/include/serviceWindowGenerationFromText.h index a2e7d5a..b0772d0 100644 --- a/servico/src/include/serviceWindowGenerationFromText.h +++ b/servico/src/include/serviceWindowGenerationFromText.h @@ -18,7 +18,7 @@ private: void setPathContents(); bool isRunning(); public: - ServiceWindowGenerationFromText(char* pathFile, int sublanguage, int transparency, char* id, char* client); + ServiceWindowGenerationFromText(char* pathFile, int sublanguage, int transparency, char* id, int mode); ~ServiceWindowGenerationFromText(); void notifyLine(unsigned char* line); diff --git a/servico/src/serviceWindowGenerationFromRec.cpp b/servico/src/serviceWindowGenerationFromRec.cpp index f0e87b5..8d8d7fd 100644 --- a/servico/src/serviceWindowGenerationFromRec.cpp +++ b/servico/src/serviceWindowGenerationFromRec.cpp @@ -8,7 +8,7 @@ ServiceWindowGenerationFromRec::ServiceWindowGenerationFromRec( this->size = size; this->transparency = transp; this->user_id = id; - this->client_type = client; + // this->client_type = client; this->service_type = serviceType; numero_legendas = INT_MAX; legendas_enviadas = 0; @@ -21,14 +21,14 @@ ServiceWindowGenerationFromRec::ServiceWindowGenerationFromRec( } ServiceWindowGenerationFromRec::ServiceWindowGenerationFromRec( - char* pathVideo, int pos, int size, int transp, char* id, char* client, int serviceType){ + char* pathVideo, int pos, int size, int transp, char* id, int mode, int serviceType){ this->path_input = pathVideo; this->position = pos; this->size = size; this->transparency = transp; this->user_id = id; - this->client_type = client; + this->exec_mode = mode; this->service_type = serviceType; numero_legendas = INT_MAX; legendas_enviadas = 0; @@ -55,11 +55,12 @@ ServiceWindowGenerationFromRec::~ServiceWindowGenerationFromRec(){ } void ServiceWindowGenerationFromRec::setPathContents(){ - if(strcmp(client_type,DEVELOPER) == 0){ + if(this->exec_mode == DEVELOPER){ this->path_contents = PATH_DEVEL_CONTENTS; this->path_uploads = PATH_DEVEL_UPLOADS; rec->setPathAudioContents(path_uploads); - }else if(strcmp(client_type, PRODUCTION) == 0){ + + }else if(this->exec_mode == PRODUCTION){ ifstream conf_file(PATH_CONF_FILE, ifstream::binary); parsingSuccessful = reader.parse(conf_file, root); if(!parsingSuccessful){ @@ -74,7 +75,7 @@ void ServiceWindowGenerationFromRec::setPathContents(){ rec->setPathAudioContents(path_uploads); conf_file.close(); }else{ - throw ServiceException("Invalid client!"); + throw ServiceException("Invalid execution mode!"); } } diff --git a/servico/src/serviceWindowGenerationFromSRT.cpp b/servico/src/serviceWindowGenerationFromSRT.cpp index 6fd82a9..57258c2 100644 --- a/servico/src/serviceWindowGenerationFromSRT.cpp +++ b/servico/src/serviceWindowGenerationFromSRT.cpp @@ -1,7 +1,7 @@ #include "serviceWindowGenerationFromSRT.h" ServiceWindowGenerationFromSRT::ServiceWindowGenerationFromSRT(char* pathVideo, char* pathSRT, int sublanguage, - int pos, int size, int transp, char* id, char* client, int serviceType) { + int pos, int size, int transp, char* id, int mode, int serviceType) { this->path_input = pathVideo; this->path_srt = pathSRT; @@ -10,7 +10,7 @@ ServiceWindowGenerationFromSRT::ServiceWindowGenerationFromSRT(char* pathVideo, this->size = size; this->transparency = transp; this->user_id = id; - this->client_type = client; + this->exec_mode = mode; this->service_type = serviceType; numero_legendas = INT_MAX; legendas_enviadas = 0; @@ -26,12 +26,12 @@ ServiceWindowGenerationFromSRT::ServiceWindowGenerationFromSRT(char* pathVideo, DPRINTF("Done!\n"); } -ServiceWindowGenerationFromSRT::ServiceWindowGenerationFromSRT(char* pathSRT, int sublanguage, int transp, char* id, char* client, int serviceType) { +ServiceWindowGenerationFromSRT::ServiceWindowGenerationFromSRT(char* pathSRT, int sublanguage, int transp, char* id, int mode, int serviceType) { this->path_srt = pathSRT; this->sub_language = sublanguage; this->transparency = transp; this->user_id = id; - this->client_type = client; + this->exec_mode = mode; this->service_type = serviceType; numero_legendas = INT_MAX; legendas_enviadas = 0; @@ -58,10 +58,11 @@ ServiceWindowGenerationFromSRT::~ServiceWindowGenerationFromSRT() { } void ServiceWindowGenerationFromSRT::setPathContents() { - if(strcmp(client_type,DEVELOPER) == 0){ + if(this->exec_mode == DEVELOPER){ this->path_contents = PATH_DEVEL_CONTENTS; this->path_uploads = PATH_DEVEL_UPLOADS; - }else if(strcmp(client_type, PRODUCTION) == 0){ + + }else if(this->exec_mode = PRODUCTION){ ifstream conf_file(PATH_CONF_FILE, ifstream::binary); parsingSuccessful = reader.parse(conf_file, root); if(!parsingSuccessful){ @@ -76,7 +77,7 @@ void ServiceWindowGenerationFromSRT::setPathContents() { this->path_uploads = PATH_VBOX_UPLOADS; conf_file.close(); }else{ - throw ServiceException("Invalid client!"); + throw ServiceException("Invalid execution mode!"); } } diff --git a/servico/src/serviceWindowGenerationFromText.cpp b/servico/src/serviceWindowGenerationFromText.cpp index 6ffebc9..e91f522 100644 --- a/servico/src/serviceWindowGenerationFromText.cpp +++ b/servico/src/serviceWindowGenerationFromText.cpp @@ -1,11 +1,11 @@ #include "serviceWindowGenerationFromText.h" -ServiceWindowGenerationFromText::ServiceWindowGenerationFromText(char* pathFile, int sublanguage, int transp, char* id, char* client) { +ServiceWindowGenerationFromText::ServiceWindowGenerationFromText(char* pathFile, int sublanguage, int transp, char* id, int mode) { this->path_input = pathFile; this->transparency = transp; this->sub_language = sublanguage; this->user_id = id; - client_type = client; + this->exec_mode = mode; running = true; finish = false; numero_legendas = INT_MAX; @@ -30,10 +30,10 @@ ServiceWindowGenerationFromText::~ServiceWindowGenerationFromText() { } void ServiceWindowGenerationFromText::setPathContents() { - if(strcmp(client_type,DEVELOPER) == 0){ + if(this->exec_mode == DEVELOPER){ this->path_contents = PATH_DEVEL_CONTENTS; //this->path_uploads = PATH_DEVEL_UPLOADS; - }else if(strcmp(client_type, PRODUCTION) == 0){ + }else if(this->exec_mode == PRODUCTION){ ifstream conf_file(PATH_CONF_FILE, ifstream::binary); parsingSuccessful = reader.parse(conf_file, root); if(!parsingSuccessful){ @@ -45,7 +45,7 @@ void ServiceWindowGenerationFromText::setPathContents() { strcpy(this->path_contents, attr.c_str()); //this->path_uploads = PATH_VBOX_UPLOADS; }else{ - throw ServiceException("Invalid client!"); + throw ServiceException("Invalid execution mode!"); } } diff --git a/util/src/argParser.cpp b/util/src/argParser.cpp new file mode 100644 index 0000000..30f8264 --- /dev/null +++ b/util/src/argParser.cpp @@ -0,0 +1,241 @@ +#include "argParser.h" + +ArgParser::ArgParser(){} + +ArgParser::~ArgParser(){} + +void ArgParser::readArgs(char** argv, int argc) +{ + int opt; + int long_index = 0; + + static struct option long_options[] = { + {"audio", required_argument, NULL, 'A'}, + {"subtitle", required_argument, NULL, 'S'}, + {"text", required_argument, NULL, 'T'}, + {"video", required_argument, NULL, 'V'}, + {"language", required_argument, NULL, 'l'}, + {"background", required_argument, NULL, 'b'}, + {"resolution", required_argument, NULL, 'r'}, + {"position", required_argument, NULL, 'p'}, + {"mode", required_argument, NULL, 'm'}, + {"id", required_argument, NULL, 'i'}, + {"no-mixer", no_argument, NULL, 'x'}, + {"help", no_argument, NULL, 'h'}, + {0, 0, 0, 0 } + }; + + while ((opt = getopt_long_only(argc, argv, "A:S:T:V:l:b:r:p:m:", long_options, &long_index))!= -1) + { + switch (opt) + { + case 'A': + if(argc <= 5) + returnErr("Insuficient arguments. Try again"); + + globalArgs.service = _REC_AUDIO; + globalArgs.input = optarg; + break; + + case 'S': + if(argc <= 6 || (globalArgs.service == _REC_VIDEO && argc <= 9)) + returnErr("Insuficient arguments. Try again"); + + if(globalArgs.service == _REC_VIDEO){ // ativa o serviço de vídeo e legendas + globalArgs.service = _VIDEO_WITH_SRT; + globalArgs.input_srt = optarg; + }else{ + globalArgs.service = _ONLY_SRT; + globalArgs.input = optarg; + } + break; + + case 'T': + if(argc <= 5) + returnErr("Insuficient arguments. Try again"); + + globalArgs.service = _TEXT; + globalArgs.input = optarg; + break; + + case 'V': + if(argc <= 7 || ((globalArgs.service == _ONLY_SRT && argc <= 9))) + returnErr("Insuficient arguments. Try again"); + + if(globalArgs.service == _ONLY_SRT){ // ativa o serviço de vídeo e legendas + globalArgs.service = _VIDEO_WITH_SRT; + globalArgs.input_srt = globalArgs.input; + }else if(globalArgs.mixer == _NO_MIXER) // desativa a mixagem + globalArgs.service = _WITHOUT_MIXER; + else + globalArgs.service = _REC_VIDEO; + globalArgs.input = optarg; + break; + + case 'l': + if (strcmp(optarg,"portugues") == 0) + globalArgs.language = _PORTUGUESE; + else if (strcmp(optarg,"libras") == 0) + globalArgs.language = _GLOSA; + else + returnErr("--language"); + break; + + case 'b': + if (strcmp(optarg,"opaque") == 0) + globalArgs.back = _OPAQUE; + else if (strcmp(optarg,"transp") == 0) + globalArgs.back = _TRANSPARENT; + else + returnErr("--background"); + break; + + case 'r': + if (strcmp(optarg,"small") == 0) + globalArgs.size = _SMALL; + else if (strcmp(optarg,"medium") == 0) + globalArgs.size = _MEDIUM; + else if (strcmp(optarg,"large") == 0) + globalArgs.size = _LARGE; + else + returnErr("--resolution"); + break; + + case 'p': + if (strcmp(optarg,"top_left") == 0) + globalArgs.position = _TOP_LEFT; + else if (strcmp(optarg,"top_right") == 0) + globalArgs.position = _TOP_RIGHT; + else if (strcmp(optarg,"bottom_right") == 0) + globalArgs.position = _BOTTOM_RIGHT; + else if (strcmp(optarg,"bottom_left") == 0) + globalArgs.position = _BOTTOM_LEFT; + else + returnErr("--position"); + break; + + case 'm': + if(strcmp(optarg,"prod") == 0) + globalArgs.mode = _PROD; + else if (strcmp(optarg,"devel") == 0) + globalArgs.mode = _DEVEL; + else + returnErr("--mode"); + break; + + case 'i': + globalArgs.id = optarg; + break; + + case 'x': + if(globalArgs.service == _REC_VIDEO) // desativa a mixagem + globalArgs.service = _WITHOUT_MIXER; + else + globalArgs.mixer = _NO_MIXER; + break; + + case 'h': + help(); + break; + case '?': + /* o getopt já mostra o erro no terminal!*/ + break; + default: + printf("\nUsage: %s [Service_option] filepath [Options] --id [name] --mode [devel,prod]\n", argv[0]); + printf("\nTry --help for more informations."); + throw lavidlib::RuntimeException(); + } + } + + if (argc < 2){ + printf("Not enough arguments.\nTry --help.\n"); + throw lavidlib::RuntimeException(); + } + + /* Mostra os argumentos restantes depois das opções de linha de comando */ + if (optind < argc) + { + printf("non-option ARGV-elements: "); + while (optind < argc) + printf("%s ", argv[optind++]); + } +} + +void ArgParser::help() +{ + std::cout << std::endl + << "Usage Summary: vlibras [Service_option] filepath [Options] --id [name] --mode [devel,prod]" + << "\n\nService_option:" + << "\n\tVideo with Subtitles -V, --video [filePath] -S, --subtitle [filePath]" + << "\n\tVideo Recognize -V, --video [filePath]" + << "\n\tAudio Recognize -A, --audio [filepath]" + << "\n\tText -T, --text [filePath]" + << "\n\tSubtitles only -S, --subtitle [filePath]" + << "\n\nOptions:" + << "\n\t-l, --language [portugues,libras]" + << "\n\t-b, --background [opaque,transp]" + << "\n\t-r, --resolution [small,medium,large]" + << "\n\t-p, --position [top_left,top_right,bottom_left,bottom_right]" + << "\n\t-m, --mode [devel,prod]" + << "\n\t--id [name] Relative to the unique ID on the Database." + << "\n\t--no-mixer Disables mixing with the original video." + << "\n\nSee man vlibras for detailed descriptions." + << std::endl; + throw lavidlib::RuntimeException(); //para nao iniciar o vlibras +} + +void ArgParser::returnErr(string option) +{ + cout << "Option '" << option << "' contains an invalid argument." << endl; + throw lavidlib::RuntimeException(); +} + +int ArgParser::getService() +{ + return globalArgs.service; +} + +int ArgParser::getLanguage() +{ + return globalArgs.language; +} + +int ArgParser::getPosition() +{ + return globalArgs.position; +} + +int ArgParser::getSize() +{ + return globalArgs.size; +} + +int ArgParser::getBackground() +{ + return globalArgs.back; +} + +int ArgParser::getMode() +{ + return globalArgs.mode; +} + +int ArgParser::getOption() +{ + return globalArgs.mixer; +} + +string ArgParser::getInput() +{ + return globalArgs.input; +} + +string ArgParser::getInputSRT() +{ + return globalArgs.input_srt; +} + +string ArgParser::getId() +{ + return globalArgs.id; +} \ No newline at end of file diff --git a/util/src/include/argParser.h b/util/src/include/argParser.h new file mode 100644 index 0000000..550169c --- /dev/null +++ b/util/src/include/argParser.h @@ -0,0 +1,60 @@ +#ifndef ARG_PARSER_H +#define ARG_PARSER_H + +#include +#include +#include +#include +#include +#include +#include + +#define MAX_SIZE_PATH 256 + +using namespace std; + +class ArgParser { +public: + ArgParser(); + ~ArgParser(); + void readArgs(char** argv, int argc); + + int getService(); + int getLanguage(); + int getPosition(); + int getSize(); + int getBackground(); + int getMode(); + int getOption(); + + string getInput(); + string getInputSRT(); + string getId(); + +private: + enum Services { _VIDEO_WITH_SRT = 1, _REC_VIDEO, _TEXT, _ONLY_SRT, _REC_AUDIO, _WITHOUT_MIXER }; + enum Languages { _PORTUGUESE = 1, _GLOSA }; + enum Positions { _TOP_LEFT = 1, _TOP_RIGHT, _BOTTOM_RIGHT, _BOTTOM_LEFT }; + enum Sizes { _SMALL = 1, _MEDIUM, _LARGE }; + enum Background { _OPAQUE, _TRANSPARENT }; + enum Options { _NO_MIXER = 1 }; + enum Mode { _DEVEL = 1 , _PROD }; + + struct globalArgs_t { + Services service; + Languages language; + Positions position; + Sizes size; + Background back; + Options mixer; + Mode mode; + string input; + string input_srt; + string id; + }globalArgs; + + void help(); + void returnErr(string option); +}; + +#endif /* ARG_PARSER_H */ \ No newline at end of file -- libgit2 0.21.2