#include "../include/fileman.h" #include "../include/base64.h" FileMan::FileMan() { islisting = false; } FileMan::~FileMan() { cancelGet(); closePut(); } bool FileMan::isGetting() { return getfile.is_open(); } bool FileMan::isPutting() { return putfile.is_open(); } bool FileMan::isListing() { return islisting; } bool FileMan::openPut(const std::string &name) { putname = name; putfile.open(name, std::ios::ate | std::ios::binary); if (putfile.is_open()) { size_t size = putfile.tellg(); putsize = size; putchunks = size / max_read_len + ((size % max_read_len) ? 1 : 0); putchunksRemaining = putchunks; putfile.seekg(std::ios::beg); return true; } return false; } bool FileMan::openGet(const std::string &name) { getname = name; getchunks = 0; getchunksRemaining = 0; getfile.open(name, std::ios::app | std::ios::binary); if (getfile.tellp() != std::ios::beg) { closeGet(); return false; } return true; } bool FileMan::openList() { if (isListing()) { return false; } listdata = std::vector(); islisting = true; return true; } void FileMan::closePut() { putfile.close(); } void FileMan::closeGet() { getfile.close(); } void FileMan::closeList() { islisting = false; } void FileMan::cancelPut() { if (isPutting()) { closePut(); } } void FileMan::cancelGet() { if (isGetting()) { closeGet(); std::remove(getname.c_str()); } } void FileMan::cancelList() { if (isListing()) { closeList(); } } void FileMan::writeGet(const std::vector data) { getfile.write(data.data(), data.size()); getchunksRemaining--; } void FileMan::writeBase64(std::string data) { writeGet(base64::decodeVector(data)); } void FileMan::putListData(std::vector names) { listdata.insert(listdata.end(), names.begin(), names.end()); listchunksRemaining--; } std::vector FileMan::getListData() { return listdata; } int FileMan::getGetChunks() { return getchunks; } int FileMan::getGetRemainingChunks() { return getchunksRemaining; } void FileMan::setGetChunks(int chunks) { getchunks = chunks; getchunksRemaining = chunks - 1; } void FileMan::setListChunks(int chunks) { listchunks = chunks; getchunksRemaining = chunks - 1; } std::vector FileMan::readPut() { char buf[max_read_len]; std::vector data; int read = putfile.readsome(buf, max_read_len); data.assign(buf, buf + read); putchunksRemaining--; return data; } std::string FileMan::readBase64() { return base64::encodeVector(readPut()); } std::string FileMan::getPutName() { return putname; } std::string FileMan::getGetName() { return getname; } int FileMan::getPutChunks() { return putchunks; } int FileMan::getPutRemainingChunks() { return putchunksRemaining; } int FileMan::getPutSize() { return putsize; } int FileMan::getListRemainingChunks() { return listchunksRemaining; } int FileMan::getListChunks() { return listchunks; }