unpackMod
Definition
-- @/lua/ge/extensions/core/modmanager.lua:1008
local function unpackMod(modname)
if not mods[modname] then
guihooks.trigger('modmanagerError', 'Error extracting file: not existing:' .. tostring(modname))
return
end
local filename = mods[modname].fullpath
if FS:isMounted(filename) then
FS:unmount(filename)
end
local dir, basefilename, ext = path.splitWithoutExt(filename)
local targetPathOrg = '/mods/unpacked/' .. basefilename
local targetPath = targetPathOrg
local zipOldCopy = deepcopy(mods[filename])
-- auto-corrects the mount point
if mods[modname].mountPoint then
targetPath = targetPath .. '/' .. mods[modname].mountPoint
mods[modname].mountPoint = nil
end
--print("targetPath: " .. targetPath)
local zip = ZipArchive()
if not zip:openArchiveName(filename, 'r') then
guihooks.trigger('modmanagerError', 'Error unpacking mod[ '..modname.. ' ]. ZIP file is not valid')
return
end
local files = zip:getFileList()
log('D', 'unpackMod', 'Unpacking : ' .. tostring(filename))
Engine.Platform.taskbarSetProgress(0.0)
Engine.Platform.taskbarSetProgressState(2)
--dump(files)
local extractionRes = true
for i,v in ipairs(files) do
--print('extractFile: ' .. tostring(v) .. ' -> ' .. tostring(targetPath) .. v)
Engine.Platform.taskbarSetProgress(i / #files)
log('D', 'unpackMod', 'zip-extractfile: ' .. tostring(v) .. ' > ' .. tostring(targetPath .. v))
if not zip:extractFile(v, targetPath .. v) then
extractionRes = false
guihooks.trigger('modmanagerError', 'Error extracting file: ' .. tostring(v))
log('E', 'unpackMod', 'error extracting file: ' .. tostring(v))
Engine.Platform.taskbarSetProgressState(4)
end
end
zip:close()
if not extractionRes then
safeDeleteFolder(targetPath)
mods[modname] = zipOldCopy
guihooks.trigger('modmanagerError', 'Error extracting file: ' .. tostring(v))
Engine.Platform.taskbarSetProgressState(0)
return
end
if not safeDelete(filename) then
Engine.Platform.taskbarSetProgressState(4)
guihooks.trigger('modmanagerError', 'Error : could not safe delete: ' .. dumps(filename))
log('E', 'unpackMod', 'Error : could not safe delete: ' .. dumps(filename))
messageBox("BeamNG - Modmager",
"The zip file could not be deleted properlly.\nThis happens when it's open by another software.\nYou need to close that software and manually delete the file bellow :\n"..dumps(filename), 0, 0)
end
Engine.Platform.taskbarSetProgressState(0)
FS:mount(targetPathOrg)
mods[modname].dirname, mods[modname].filename = path.split(targetPathOrg)
mods[modname].orgZipFilename = filename
mods[modname].unpackedPath = targetPathOrg
mods[modname].fullpath = targetPathOrg
mods[modname].stat = FS:stat(targetPathOrg)
stateChanged()
end
Callers
@/ui/modules/repository/repository.js
if (vm.localData.packed) {
bngApi.engineLua('core_modmanager.unpackMod("' + vm.localData.modname + '")')
} else {
@/ui/modules/modmanager/modmanager.js
if ($scope.mod.packed) {
bngApi.engineLua('core_modmanager.unpackMod("' + $scope.mod.modname + '")')
} else {
@/ui/modules/automation/automation.js
if (vm.localData.packed) {
bngApi.engineLua('core_modmanager.unpackMod("' + vm.localData.modname + '")')
} else {