From a086b726c6b9572a0686e1ccaee3baaaea6cf590 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 17 Mar 2025 23:16:50 +0300 Subject: [PATCH] add file.create_zip(...) --- src/io/devices/ZipFileDevice.cpp | 2 +- src/logic/scripting/lua/libs/libfile.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/io/devices/ZipFileDevice.cpp b/src/io/devices/ZipFileDevice.cpp index 947ef975..80021ba2 100644 --- a/src/io/devices/ZipFileDevice.cpp +++ b/src/io/devices/ZipFileDevice.cpp @@ -392,7 +392,7 @@ static size_t write_zip( ) { size_t entries = 0; for (const auto& entry : io::directory_iterator(folder)) { - auto name = entry.pathPart().substr(root.length() + 1); + auto name = entry.pathPart().substr(root.length()); auto last_write_time = io::last_write_time(entry); if (io::is_directory(entry)) { name = name + "/"; diff --git a/src/logic/scripting/lua/libs/libfile.cpp b/src/logic/scripting/lua/libs/libfile.cpp index dea4a233..495ec1f8 100644 --- a/src/logic/scripting/lua/libs/libfile.cpp +++ b/src/logic/scripting/lua/libs/libfile.cpp @@ -6,6 +6,7 @@ #include "engine/Engine.hpp" #include "io/engine_paths.hpp" #include "io/io.hpp" +#include "io/devices/ZipFileDevice.hpp" #include "util/stringutil.hpp" #include "api_lua.hpp" #include "../lua_engine.hpp" @@ -249,6 +250,16 @@ static int l_unmount(lua::State* L) { return 0; } +static int l_create_zip(lua::State* L) { + io::path folder = lua::require_string(L, 1); + io::path outFile = lua::require_string(L, 2); + if (!is_writeable(outFile.entryPoint())) { + throw std::runtime_error("access denied"); + } + io::write_zip(folder, outFile); + return 0; +} + const luaL_Reg filelib[] = { {"exists", lua::wrap}, {"find", lua::wrap}, @@ -272,5 +283,6 @@ const luaL_Reg filelib[] = { {"is_writeable", lua::wrap}, {"mount", lua::wrap}, {"unmount", lua::wrap}, + {"create_zip", lua::wrap}, {NULL, NULL} };