fileman.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #include "../include/fileman.h"
  2. #include "../include/base64.h"
  3. FileMan::FileMan() { islisting = false; }
  4. FileMan::~FileMan() {
  5. cancelGet();
  6. cancelPut();
  7. cancelList();
  8. }
  9. bool FileMan::isGetting() { return getfile.is_open(); }
  10. bool FileMan::isPutting() { return putfile.is_open(); }
  11. bool FileMan::isListing() { return islisting; }
  12. bool FileMan::openPut(const std::string &name) {
  13. putname = name;
  14. putfile.open(name, std::ios::ate | std::ios::binary);
  15. if (putfile.is_open()) {
  16. size_t size = putfile.tellg();
  17. putsize = size;
  18. putchunks = size / max_read_len + ((size % max_read_len) ? 1 : 0);
  19. putchunksRemaining = putchunks;
  20. putfile.seekg(std::ios::beg);
  21. return true;
  22. }
  23. return false;
  24. }
  25. bool FileMan::openGet(const std::string &name) {
  26. getname = name;
  27. getchunks = 0;
  28. getchunksRemaining = 0;
  29. getfile.open(name, std::ios::app | std::ios::binary);
  30. if (getfile.tellp() != std::ios::beg) {
  31. closeGet();
  32. return false;
  33. }
  34. return true;
  35. }
  36. bool FileMan::openList() {
  37. if (isListing()) {
  38. return false;
  39. }
  40. listdata = std::vector<std::string>();
  41. islisting = true;
  42. return true;
  43. }
  44. void FileMan::closePut() { putfile.close(); }
  45. void FileMan::closeGet() { getfile.close(); }
  46. void FileMan::closeList() { islisting = false; }
  47. void FileMan::cancelPut() {
  48. if (isPutting()) {
  49. closePut();
  50. }
  51. }
  52. void FileMan::cancelGet() {
  53. if (isGetting()) {
  54. closeGet();
  55. std::remove(getname.c_str());
  56. }
  57. }
  58. void FileMan::cancelList() {
  59. if (isListing()) {
  60. closeList();
  61. }
  62. }
  63. void FileMan::writeGet(const std::vector<char> data) {
  64. getfile.write(data.data(), data.size());
  65. getchunksRemaining--;
  66. }
  67. void FileMan::writeBase64(std::string data) {
  68. writeGet(base64::decodeVector(data));
  69. }
  70. void FileMan::putListData(std::vector<std::string> names) {
  71. listdata.insert(listdata.end(), names.begin(), names.end());
  72. listchunksRemaining--;
  73. }
  74. std::vector<std::string> FileMan::getListData() { return listdata; }
  75. int FileMan::getGetChunks() { return getchunks; }
  76. int FileMan::getGetRemainingChunks() { return getchunksRemaining; }
  77. void FileMan::setGetChunks(int chunks) {
  78. getchunks = chunks;
  79. getchunksRemaining = chunks - 1;
  80. }
  81. void FileMan::setListChunks(int chunks) {
  82. listchunks = chunks;
  83. getchunksRemaining = chunks - 1;
  84. }
  85. std::vector<char> FileMan::readPut() {
  86. char buf[max_read_len];
  87. std::vector<char> data;
  88. int read = putfile.readsome(buf, max_read_len);
  89. data.assign(buf, buf + read);
  90. putchunksRemaining--;
  91. return data;
  92. }
  93. std::string FileMan::readBase64() { return base64::encodeVector(readPut()); }
  94. std::string FileMan::getPutName() { return putname; }
  95. std::string FileMan::getGetName() { return getname; }
  96. int FileMan::getPutChunks() { return putchunks; }
  97. int FileMan::getPutRemainingChunks() { return putchunksRemaining; }
  98. int FileMan::getPutSize() { return putsize; }
  99. int FileMan::getListRemainingChunks() { return listchunksRemaining; }
  100. int FileMan::getListChunks() { return listchunks; }