Rodex_ icon

ReadMessage

Rodex_ | PRO | 10/16/17 06:13:52 AM UTC | 0 ⭐ | 254 👁️ | Never ⏰ | []
C++ |

2.76 KB

|

None

|

0 👍

/

0 👎

//
// Created by alexander on 12.10.17.
//
 
#include "ReadMessage.h"
#include <dirent.h>
#include <fstream>
 
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;
}

Comments