@ -83,7 +83,7 @@ dbot.callback : Module to help manage callback functions and parameters
save_state="y"
save_state="y"
date_written="2017-08-12 08:45:15"
date_written="2017-08-12 08:45:15"
requires="4.98"
requires="4.98"
version="1.4 "
version="1.5 "
>
>
<description trim= "y" >
<description trim= "y" >
< ![CDATA[
< ![CDATA[
@ -16847,18 +16847,18 @@ dbot.storage.hashChars = (2 * 20) -- utils.hash uses a 160-bit (20 byte) hash
function dbot.storage.init.atActive()
function dbot.storage.init.atActive()
-- Create directories for our state if they do not yet exist
-- Create directories for our state if they do not yet exist
assert(os.execute("if not exist \"" .. pluginStatePath .. "\" mkdir " .. pluginStatePath .. " > nul"),
assert(os.execute("if not exist \"" .. pluginStatePath .. "\" mkdir \" " .. pluginStatePath .. "\ " > nul"),
"dbot.storage.init.atActive: Failed to create plugin state directory \"" .. pluginStatePath .. "\"")
"dbot.storage.init.atActive: Failed to create plugin state directory \"" .. pluginStatePath .. "\"")
local baseDir = dbot.backup.getBaseDir()
local baseDir = dbot.backup.getBaseDir()
dbot.debug("dbot.storage.init.atActive: baseDir=\"" .. baseDir .. "\"")
dbot.debug("dbot.storage.init.atActive: baseDir=\"" .. baseDir .. "\"")
assert(os.execute("if not exist \"" .. baseDir .. "\" mkdir " .. baseDir .. " > nul"),
assert(os.execute("if not exist \"" .. baseDir .. "\" mkdir \" " .. baseDir .. "\ " > nul"),
"dbot.storage.init.atActive: Failed to create character-specific state directory \"" ..
"dbot.storage.init.atActive: Failed to create character-specific state directory \"" ..
baseDir .. "\"")
baseDir .. "\"")
local currentDir = dbot.backup.getCurrentDir()
local currentDir = dbot.backup.getCurrentDir()
dbot.debug("dbot.storage.init.atActive: currentDir=\"" .. currentDir .. "\"")
dbot.debug("dbot.storage.init.atActive: currentDir=\"" .. currentDir .. "\"")
assert(os.execute("if not exist \"" .. currentDir .. "\" mkdir " .. currentDir .. " > nul"),
assert(os.execute("if not exist \"" .. currentDir .. "\" mkdir \" " .. currentDir .. "\ " > nul"),
"dbot.storage.init.atActive: Failed to create current state directory \"" .. currentDir .. "\"")
"dbot.storage.init.atActive: Failed to create current state directory \"" .. currentDir .. "\"")
return DRL_RET_SUCCESS
return DRL_RET_SUCCESS
@ -17025,7 +17025,7 @@ function dbot.backup.init.atActive()
local backupDir = dbot.backup.getBackupDir()
local backupDir = dbot.backup.getBackupDir()
dbot.debug("dbot.backup.init.atActive: backupDir=\"" .. backupDir .. "\"")
dbot.debug("dbot.backup.init.atActive: backupDir=\"" .. backupDir .. "\"")
assert(os.execute("if not exist \"" .. backupDir .. "\" mkdir " .. backupDir .. " > nul"),
assert(os.execute("if not exist \"" .. backupDir .. "\" mkdir \" " .. backupDir .. "\ " > nul"),
"dbot.backup.init.atActive: Failed to create backup directory \"" .. backupDir .. "\"")
"dbot.backup.init.atActive: Failed to create backup directory \"" .. backupDir .. "\"")
-- Add a backup timer to periodically back up the plugin state. We keep the timer running
-- Add a backup timer to periodically back up the plugin state. We keep the timer running
@ -17077,8 +17077,8 @@ function dbot.backup.getBackups()
end -- if
end -- if
local tmpFile = backupDir .. "temp.txt"
local tmpFile = backupDir .. "temp.txt"
dbot.debug("CLI: " .. "dir /s /b /o:n /a:d \"" .. backupDir .. "\" > \"" .. tmpFile .. "\"")
assert(os.execute("dir /s /b /o:n /a:d " .. backupDir .. " > \"" .. tmpFile .. "\""))
assert(os.execute("dir /s /b /o:n /a:d \" " .. backupDir .. "\ " > \"" .. tmpFile .. "\""))
for dirName in io.lines(tmpFile) do
for dirName in io.lines(tmpFile) do
local fullName = string.gsub(dirName, "^.*backup.*\\", "") or ""
local fullName = string.gsub(dirName, "^.*backup.*\\", "") or ""
@ -17186,8 +17186,10 @@ function dbot.backup.current()
if (backupFile ~= nil) then
if (backupFile ~= nil) then
dbot.note("Moving backup \"@G" .. currentBackup .. "@W\" to \"@G" .. olderBackup .. "@W\"")
dbot.note("Moving backup \"@G" .. currentBackup .. "@W\" to \"@G" .. olderBackup .. "@W\"")
local fullOlderBackup = string.gsub(backupFile.dirName, currentBackup, olderBackup)
local fullOlderBackup = string.gsub(backupFile.dirName, currentBackup, olderBackup)
dbot.debug("CLI: " .. "move " .. backupFile.dirName .. " " .. fullOlderBackup .. " > nul")
fullOlderBackup = string.gsub(fullOlderBackup, ".*\\", "")
assert(os.execute("move " .. backupFile.dirName .. " " .. fullOlderBackup .. " > nul"))
dbot.debug("CLI: " .. "rename \"" .. backupFile.dirName .. "\" \"" .. fullOlderBackup .. "\" > nul")
assert(os.execute("rename \"" .. backupFile.dirName .. "\" \"" .. fullOlderBackup .. "\" > nul"))
end -- if
end -- if
end -- for
end -- for
@ -17256,6 +17258,7 @@ function dbot.backup.create(name, endTag)
dbot.warn("dbot.backup.create: Failed to get current directory: " .. dbot.retval.getString(retval))
dbot.warn("dbot.backup.create: Failed to get current directory: " .. dbot.retval.getString(retval))
return inv.tags.stop(invTagsBackup, endTag, retval)
return inv.tags.stop(invTagsBackup, endTag, retval)
end -- if
end -- if
currentDir = string.gsub(currentDir, "\\$", "") -- Some versions of xcopy hate if there is a trailing slash
local backupDir, retval = dbot.backup.getBackupDir()
local backupDir, retval = dbot.backup.getBackupDir()
if (retval ~= DRL_RET_SUCCESS) then
if (retval ~= DRL_RET_SUCCESS) then
@ -17275,9 +17278,9 @@ function dbot.backup.create(name, endTag)
-- We append the time to the end of the backup name to help track it
-- We append the time to the end of the backup name to help track it
local backupTime = os.time()
local backupTime = os.time()
local newBackupDir = backupDir .. name .. "-" .. backupTime
local newBackupDir = backupDir .. name .. "-" .. backupTime
dbot.debug("dbot.backup.create: CLI = \"@y" .. "xcopy /E /I " .. currentDir .. " " .. newBackupDir ..
dbot.debug("dbot.backup.create: CLI = \"@y" .. "xcopy /E /I \" " .. currentDir .. "\" \" " .. newBackupDir ..
" > nul@W\"")
"\" > nul@W\"")
assert(os.execute("xcopy /E /I " .. currentDir .. " " .. newBackupDir .. " > nul"))
assert(os.execute("xcopy /E /I \" " .. currentDir .. "\ " \" " .. newBackupDir .. "\ " > nul"))
dbot.info("Created backup @W(@c" .. os.date("%c", backupTime) .. "@W) @G" .. name)
dbot.info("Created backup @W(@c" .. os.date("%c", backupTime) .. "@W) @G" .. name)
@ -17303,8 +17306,8 @@ function dbot.backup.delete(name, endTag, isQuiet)
local numBackupsDeleted = 0
local numBackupsDeleted = 0
for _, backupName in ipairs(backupNames) do
for _, backupName in ipairs(backupNames) do
if (backupName.baseName == name) then
if (backupName.baseName == name) then
dbot.debug("dbot.backup.delete: Executing \"rmdir /s /q " .. backupName.dirName .. "\"")
dbot.debug("dbot.backup.delete: Executing \"rmdir /s /q \" " .. backupName.dirName .. "\ "\"")
assert(os.execute("rmdir /s /q " .. backupName.dirName .. " > nul"))
assert(os.execute("rmdir /s /q \" " .. backupName.dirName .. "\ " > nul"))
if (isQuiet == false) then
if (isQuiet == false) then
dbot.info("Deleted backup @W(@c" .. os.date("%c", backupName.baseTime) ..
dbot.info("Deleted backup @W(@c" .. os.date("%c", backupName.baseTime) ..
"@W) @G" .. backupName.baseName)
"@W) @G" .. backupName.baseName)
@ -17340,6 +17343,7 @@ function dbot.backup.restore(name, endTag)
dbot.warn("dbot.backup.restore: Failed to get current directory: " .. dbot.retval.getString(retval))
dbot.warn("dbot.backup.restore: Failed to get current directory: " .. dbot.retval.getString(retval))
return inv.tags.stop(invTagsBackup, endTag, retval)
return inv.tags.stop(invTagsBackup, endTag, retval)
end -- if
end -- if
currentDir = string.gsub(currentDir, "\\$", "") -- Some versions of xcopy hate if there is a trailing slash
-- Check if the backup name we want to restore is one of the available backups and use it if it is
-- Check if the backup name we want to restore is one of the available backups and use it if it is
local didRestore = false
local didRestore = false
@ -17347,10 +17351,10 @@ function dbot.backup.restore(name, endTag)
if (backupName.baseName == name) then
if (backupName.baseName == name) then
dbot.info("Restoring backup @W(@c" .. os.date("%c", backupName.baseTime) ..
dbot.info("Restoring backup @W(@c" .. os.date("%c", backupName.baseTime) ..
"@W) @G" .. backupName.baseName)
"@W) @G" .. backupName.baseName)
assert(os.execute("rmdir /s /q " .. currentDir .. " > nul"))
assert(os.execute("rmdir /s /q \" " .. currentDir .. "\ " > nul"))
assert(os.execute("xcopy /E /I " .. backupName.dirName .. " " .. currentDir .. " > nul"))
assert(os.execute("xcopy /E /I \" " .. backupName.dirName .. "\" \" " .. currentDir .. "\ " > nul"))
dbot.debug("dbot.backup.restore: \"@y" .. "xcopy /E /I " .. backupName.dirName .. " " ..
dbot.debug("dbot.backup.restore: \"@y" .. "xcopy /E /I \" " .. backupName.dirName .. "\" \" " ..
currentDir .. "@W\"")
currentDir .. "\" @W\"")
-- We want to re-init everything to pick up the restored state. We don't want to save the
-- We want to re-init everything to pick up the restored state. We don't want to save the
-- current state which will be overwritten.
-- current state which will be overwritten.