// // Created by WolverinDEV on 29/04/2020. // #include #include #include #include namespace fs = std::experimental::filesystem; using namespace ts::server; struct Nothing {}; template inline void print_response(const std::string& message, const std::shared_ptr, ResponseType>>& response) { if(response->status == file::ExecuteStatus::ERROR) logError(0, "{}: {} => {}", message, (int) response->error().error_type, response->error().error_message); else if(response->status == file::ExecuteStatus::SUCCESS) logMessage(0, "{}: success", message); else logWarning(0, "Unknown response state ({})!", (int) response->status); } inline void print_query(const std::string& message, const file::filesystem::AbstractProvider::directory_query_response_t& response) { if(response.status == file::ExecuteStatus::ERROR) logError(0, "{}: {} => {}", message, (int) response.error().error_type, response.error().error_message); else if(response.status == file::ExecuteStatus::SUCCESS) { const auto& entries = response.response(); logMessage(0, "{}: Found {} entries", message, entries.size()); for(auto& entry : entries) { if(entry.type == file::filesystem::DirectoryEntry::FILE) logMessage(0, " - File {}", entry.name); else if(entry.type == file::filesystem::DirectoryEntry::DIRECTORY) logMessage(0, " - Directory {}", entry.name); else logMessage(0, " - Unknown {}", entry.name); logMessage(0, " Write timestamp: {}", std::chrono::floor(entry.modified_at.time_since_epoch()).count()); logMessage(0, " Size: {}", entry.size); } } else logWarning(0, "{}: Unknown response state ({})!", message, (int) response.status); } int main() { std::string error{}; if(!file::initialize(error)) { logError(0, "Failed to initialize file server: {}", error); return 0; } logMessage(0, "File server started"); auto instance = file::server(); auto& fs = instance->file_system(); { auto response = fs.initialize_server(0); response->wait(); print_response("Server init result", response); if(response->status != file::ExecuteStatus::SUCCESS) return 0; } { auto response = fs.create_channel_directory(0, 2, "/"); response->wait(); print_response("Channel dir create A", response); } { auto response = fs.create_channel_directory(0, 2, "/test-folder/"); response->wait(); print_response("Channel dir create B", response); } { auto response = fs.create_channel_directory(0, 2, "../test-folder/"); response->wait(); print_response("Channel dir create C", response); } { auto response = fs.create_channel_directory(0, 2, "./test-folder/../test-folder-2"); response->wait(); print_response("Channel dir create D", response); } { auto response = fs.query_channel_directory(0, 2, "/"); response->wait(); print_query("Channel query", *response); } { auto response = fs.query_icon_directory(0); response->wait(); print_query("Icons", *response); } { auto response = fs.query_avatar_directory(0); response->wait(); print_query("Avatars", *response); } { auto response = fs.rename_channel_file(0, 2, "./test-folder/../test-folder-2", "./test-folder/../test-folder-3"); response->wait(); print_response("Folder rename A", response); } { auto response = fs.rename_channel_file(0, 2, "./test-folder/../test-folder-3", "./test-folder/../test-folder-2"); response->wait(); print_response("Folder rename B", response); } //TODO: Test file locking return 0; }