125 lines
4.1 KiB
C++
125 lines
4.1 KiB
C++
//
|
|
// Created by WolverinDEV on 29/04/2020.
|
|
//
|
|
|
|
#include <files/FileServer.h>
|
|
#include <log/LogUtils.h>
|
|
|
|
#include <experimental/filesystem>
|
|
#include <local_server/clnpath.h>
|
|
|
|
namespace fs = std::experimental::filesystem;
|
|
|
|
using namespace ts::server;
|
|
|
|
struct Nothing {};
|
|
|
|
template <typename ErrorType, typename ResponseType>
|
|
inline void print_response(const std::string& message, const std::shared_ptr<file::ExecuteResponse<file::filesystem::DetailedError<ErrorType>, 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<std::chrono::seconds>(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;
|
|
} |