68 lines
1.7 KiB
C++
68 lines
1.7 KiB
C++
#ifndef FILER_H
|
|
#define FILER_H
|
|
#include <filesystem>
|
|
#include "logger.h"
|
|
|
|
#define FILER_PLUGIN_API_VERSION 1
|
|
|
|
struct file_error {
|
|
uint8_t code = 0;
|
|
std::string msg;
|
|
};
|
|
|
|
struct file_data {
|
|
~file_data() {
|
|
delete[] bin;
|
|
}
|
|
std::shared_ptr<std::ifstream> stream = nullptr;
|
|
const char* path = nullptr;
|
|
const char* relpath = nullptr;
|
|
char* bin = nullptr;
|
|
size_t size = 0;
|
|
file_error error = {};
|
|
};
|
|
|
|
enum FilerStatusCodes : uint8_t {
|
|
Success = 0,
|
|
IsDirectory = 248,
|
|
AccessDenied = 249,
|
|
FileExists = 250,
|
|
DirectoryNotEmpty = 251,
|
|
InvalidTransferMode = 252,
|
|
NotFound = 253,
|
|
NoPermission = 254,
|
|
Exception = 255
|
|
};
|
|
|
|
class Filer {
|
|
public:
|
|
virtual ~Filer() {};
|
|
|
|
virtual bool initialize(const std::map<std::string, std::string>& config) { return true; }
|
|
|
|
virtual file_data setRoot(std::string _root) = 0;
|
|
virtual file_data setCWD(std::string _cwd) = 0;
|
|
virtual std::filesystem::path getRoot() = 0;
|
|
virtual std::filesystem::path getCWD() = 0;
|
|
virtual bool resolvePath(const std::string& path, std::filesystem::path* target) = 0;
|
|
virtual void setTransferMode(char type) {
|
|
this->transfer_mode = type;
|
|
}
|
|
|
|
virtual char getTransferMode() {
|
|
return this->transfer_mode;
|
|
}
|
|
|
|
virtual file_data traverse(std::string dir) = 0;
|
|
virtual file_data createDirectory(std::string dir) = 0;
|
|
virtual file_data fileSize(std::string name) = 0;
|
|
virtual file_data deleteFile(std::string name) = 0;
|
|
virtual file_data readFile(std::string name) = 0;
|
|
virtual file_data writeFile(std::string name, unsigned char* data, int size, bool append = false) = 0;
|
|
virtual file_data renameFile(const std::string& from, const std::string& to) = 0;
|
|
virtual file_data list(std::string path = ".") = 0;
|
|
private:
|
|
char transfer_mode = 'I';
|
|
};
|
|
|
|
#endif |