From bfeb32841f0bae59c7b9cc6047980907b0ff259b Mon Sep 17 00:00:00 2001 From: Xertis Date: Thu, 6 Jun 2024 12:17:37 +0300 Subject: [PATCH] add file.gzip_compress_write --- src/logic/scripting/lua/libfile.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/logic/scripting/lua/libfile.cpp b/src/logic/scripting/lua/libfile.cpp index 6b97da3c..7d34393d 100644 --- a/src/logic/scripting/lua/libfile.cpp +++ b/src/logic/scripting/lua/libfile.cpp @@ -3,6 +3,7 @@ #include "LuaState.hpp" #include "../scripting.hpp" #include "../../../engine.hpp" +#include "../../../coders/gzip.hpp" #include "../../../files/files.hpp" #include "../../../files/engine_paths.hpp" #include "../../../util/stringutil.hpp" @@ -129,7 +130,7 @@ static int l_file_read_bytes(lua_State* L) { int newTable = lua_gettop(L); for(size_t i = 0; i < length; i++) { - lua_pushnumber(L, bytes[i]); + lua_pushinteger(L, bytes[i]); lua_rawseti(L, newTable, i+1); } return 1; @@ -206,6 +207,24 @@ static int l_file_list(lua_State* L) { return 1; } +static int l_file_gzip_compress(lua_State* L) { + fs::path path = resolve_path(state->requireString(1)); + if (fs::is_regular_file(path)) { + size_t length = static_cast(fs::file_size(path)); + + auto bytesPtr = files::read_bytes(path, length); + std::vector bytes (bytesPtr.get(), bytesPtr.get() + length); + + std::vector compressed_bytes; + + compressed_bytes = gzip::compress(bytes.data(), bytes.size()); + + lua_pushboolean(L, files::write_bytes(path, compressed_bytes.data(), compressed_bytes.size())); + return 1; + } + throw std::runtime_error("file does not exist " + util::quote(path.u8string())); +} + const luaL_Reg filelib [] = { {"exists", lua_wrap_errors}, {"find", lua_wrap_errors}, @@ -222,5 +241,6 @@ const luaL_Reg filelib [] = { {"resolve", lua_wrap_errors}, {"write_bytes", lua_wrap_errors}, {"write", lua_wrap_errors}, + {"gzip_compress_write", lua_wrap_errors}, {NULL, NULL} };