fileman.cpp 2.9 KB

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