// // Created by alexander on 12.10.17. // #include "ReadMessage.h" #include #include ReadMessage::ReadMessage() { ParameterCount = 0; MessageNumber = 0; //give invalid message number at beginning statusMessage = "User:"; } bool ReadMessage::fillMe(string parameter) { //fill the needed parameter if(ParameterCount == 0){ if(parameter.length() <= 9 && parameter.length() > 1){ //is the Username given 1-8 chars long? User = parameter; User.pop_back(); ParameterCount ++; statusMessage = "Message-number:"; } else{ statusMessage = "Invalid User - Max 8 Characters!"; return false; } } else if(ParameterCount == 1){ if(!parameter.empty() && isdigit(parameter[0]) && parameter[0] != '0'){ //is the parameter even a number bigger than 0? MessageNumber = stoi(parameter); ParameterCount ++; statusMessage = "not executed yet\n"; } else{ statusMessage = "Invalid Message Number - Must be integer bigger than 0!"; return false; } } //check if ready and return true if != 2 and false if all parameters were given return ParameterCount != 2; } string ReadMessage::execute() { string result = ""; int count = 1; string dir = MESSAGEDIR + "/" + User; DIR* userDir = opendir(dir.c_str()); //Open User Directory struct dirent * userDirEntry; //individual entries in the directory. ifstream messageFile; string line; //if no directory found return 0 if(userDir == nullptr){ statusMessage = "ERR\n"; return "No such User \"" + User + "\" found\n"; } //while directory isn't empty or didn't reach end keep looking until number is reached: while((userDirEntry = readdir(userDir)) != nullptr && count < MessageNumber){ count ++; } //only read regular files if(userDirEntry->d_type == DT_REG){ //ToDo: look if filename ends with .msg or .txt messageFile.open(dir + "/" + userDirEntry->d_name); if(messageFile.is_open()){ //reading if open while(!messageFile.eof()){ //read till the end and save lines to the result: getline(messageFile, line); result.append(line); result.append("\n"); } } else{ statusMessage = "ERR\n"; return "Could not open Message file."; } } else{ statusMessage = "ERR\n"; return "Specified file is not a Message file."; } statusMessage = "OK\n"; return result; }