Added cFile:GetFolderContents().
Fix 162.
This commit is contained in:
parent
4fbfe59ea0
commit
63753c5e84
@ -927,22 +927,23 @@ end
|
|||||||
cFile =
|
cFile =
|
||||||
{
|
{
|
||||||
Desc = [[
|
Desc = [[
|
||||||
Provides helper functions for manipulating and querying the filesystem. Most functions are called
|
Provides helper functions for manipulating and querying the filesystem. Most functions are static,
|
||||||
directly on the cFile class itself:
|
so they should be called directly on the cFile class itself:
|
||||||
<pre class="prettyprint lang-lua">
|
<pre class="prettyprint lang-lua">
|
||||||
cFile:Delete("/usr/bin/virus.exe");
|
cFile:Delete("/usr/bin/virus.exe");
|
||||||
</pre></p>
|
</pre></p>
|
||||||
]],
|
]],
|
||||||
Functions =
|
Functions =
|
||||||
{
|
{
|
||||||
Copy = { Params = "SrcFileName, DstFileName", Return = "bool", Notes = "Copies a single file to a new destination. Returns true if successful. Fails if the destination already exists." },
|
Copy = { Params = "SrcFileName, DstFileName", Return = "bool", Notes = "(STATIC) Copies a single file to a new destination. Returns true if successful. Fails if the destination already exists." },
|
||||||
CreateFolder = { Params = "FolderName", Return = "bool", Notes = "Creates a new folder. Returns true if successful." },
|
CreateFolder = { Params = "FolderName", Return = "bool", Notes = "(STATIC) Creates a new folder. Returns true if successful." },
|
||||||
Delete = { Params = "FileName", Return = "bool", Notes = "Deletes the specified file. Returns true if successful." },
|
Delete = { Params = "FileName", Return = "bool", Notes = "(STATIC) Deletes the specified file. Returns true if successful." },
|
||||||
Exists = { Params = "FileName", Return = "bool", Notes = "Returns true if the specified file exists." },
|
Exists = { Params = "FileName", Return = "bool", Notes = "(STATIC) Returns true if the specified file exists." },
|
||||||
GetSize = { Params = "FileName", Return = "number", Notes = "Returns the size of the file, or -1 on failure." },
|
GetFolderContents = { Params = "FolderName", Return = "array table of strings", Notes = "(STATIC) Returns the contents of the specified folder, as an array table of strings. Each filesystem object is listed. Use the IsFile() and IsFolder() functions to determine the object type." },
|
||||||
IsFile = { Params = "Path", Return = "bool", Notes = "Returns true if the specified path points to an existing file." },
|
GetSize = { Params = "FileName", Return = "number", Notes = "(STATIC) Returns the size of the file, or -1 on failure." },
|
||||||
IsFolder = { Params = "Path", Return = "bool", Notes = "Returns true if the specified path points to an existing folder." },
|
IsFile = { Params = "Path", Return = "bool", Notes = "(STATIC) Returns true if the specified path points to an existing file." },
|
||||||
Rename = { Params = "OrigPath, NewPath", Return = "bool", Notes = "Renames a file or a folder. Returns true if successful. Undefined result if NewPath already exists." },
|
IsFolder = { Params = "Path", Return = "bool", Notes = "(STATIC) Returns true if the specified path points to an existing folder." },
|
||||||
|
Rename = { Params = "OrigPath, NewPath", Return = "bool", Notes = "(STATIC) Renames a file or a folder. Returns true if successful. Undefined result if NewPath already exists." },
|
||||||
},
|
},
|
||||||
}, -- cFile
|
}, -- cFile
|
||||||
|
|
||||||
|
@ -51,6 +51,8 @@ function Initialize(Plugin)
|
|||||||
PM:BindCommand("/fr", "debuggers", HandleFurnaceRecipe, "- Shows the furnace recipe for the currently held item");
|
PM:BindCommand("/fr", "debuggers", HandleFurnaceRecipe, "- Shows the furnace recipe for the currently held item");
|
||||||
PM:BindCommand("/ff", "debuggers", HandleFurnaceFuel, "- Shows how long the currently held item would burn in a furnace");
|
PM:BindCommand("/ff", "debuggers", HandleFurnaceFuel, "- Shows how long the currently held item would burn in a furnace");
|
||||||
|
|
||||||
|
Plugin:AddWebTab("Debuggers", HandleRequest_Debuggers);
|
||||||
|
|
||||||
-- Enable the following line for BlockArea / Generator interface testing:
|
-- Enable the following line for BlockArea / Generator interface testing:
|
||||||
-- PluginManager:AddHook(Plugin, cPluginManager.HOOK_CHUNK_GENERATED);
|
-- PluginManager:AddHook(Plugin, cPluginManager.HOOK_CHUNK_GENERATED);
|
||||||
|
|
||||||
@ -943,3 +945,12 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function HandleRequest_Debuggers(a_Request)
|
||||||
|
local FolderContents = cFile:GetFolderContents("./");
|
||||||
|
return "<p>The following objects have been returned by cFile:GetFolderContents():<ul><li>" .. table.concat(FolderContents, "</li><li>") .. "</li></ul></p>";
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -871,6 +871,39 @@ bool cLuaState::CheckParamNumber(int a_StartParam, int a_EndParam)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cLuaState::CheckParamString(int a_StartParam, int a_EndParam)
|
||||||
|
{
|
||||||
|
ASSERT(IsValid());
|
||||||
|
|
||||||
|
if (a_EndParam < 0)
|
||||||
|
{
|
||||||
|
a_EndParam = a_StartParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
tolua_Error tolua_err;
|
||||||
|
for (int i = a_StartParam; i <= a_EndParam; i++)
|
||||||
|
{
|
||||||
|
if (tolua_isstring(m_LuaState, i, 0, &tolua_err))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Not the correct parameter
|
||||||
|
lua_Debug entry;
|
||||||
|
VERIFY(lua_getstack(m_LuaState, 0, &entry));
|
||||||
|
VERIFY(lua_getinfo (m_LuaState, "n", &entry));
|
||||||
|
AString ErrMsg = Printf("#ferror in function '%s'.", (entry.name != NULL) ? entry.name : "?");
|
||||||
|
tolua_error(m_LuaState, ErrMsg.c_str(), &tolua_err);
|
||||||
|
return false;
|
||||||
|
} // for i - Param
|
||||||
|
|
||||||
|
// All params checked ok
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cLuaState::CheckParamEnd(int a_Param)
|
bool cLuaState::CheckParamEnd(int a_Param)
|
||||||
{
|
{
|
||||||
tolua_Error tolua_err;
|
tolua_Error tolua_err;
|
||||||
|
@ -770,12 +770,15 @@ public:
|
|||||||
/// Returns true if the specified parameters on the stack are of the specified usertype; also logs warning if not. Used for regular functions
|
/// Returns true if the specified parameters on the stack are of the specified usertype; also logs warning if not. Used for regular functions
|
||||||
bool CheckParamUserType(int a_StartParam, const char * a_UserType, int a_EndParam = -1);
|
bool CheckParamUserType(int a_StartParam, const char * a_UserType, int a_EndParam = -1);
|
||||||
|
|
||||||
/// Returns true if the specified parameters on the stack are a table; also logs warning if not
|
/// Returns true if the specified parameters on the stack are tables; also logs warning if not
|
||||||
bool CheckParamTable(int a_StartParam, int a_EndParam = -1);
|
bool CheckParamTable(int a_StartParam, int a_EndParam = -1);
|
||||||
|
|
||||||
/// Returns true if the specified parameters on the stack are a number; also logs warning if not
|
/// Returns true if the specified parameters on the stack are numbers; also logs warning if not
|
||||||
bool CheckParamNumber(int a_StartParam, int a_EndParam = -1);
|
bool CheckParamNumber(int a_StartParam, int a_EndParam = -1);
|
||||||
|
|
||||||
|
/// Returns true if the specified parameters on the stack are strings; also logs warning if not
|
||||||
|
bool CheckParamString(int a_StartParam, int a_EndParam = -1);
|
||||||
|
|
||||||
/// Returns true if the specified parameter on the stack is nil (indicating an end-of-parameters)
|
/// Returns true if the specified parameter on the stack is nil (indicating an end-of-parameters)
|
||||||
bool CheckParamEnd(int a_Param);
|
bool CheckParamEnd(int a_Param);
|
||||||
|
|
||||||
|
@ -171,6 +171,29 @@ cPluginLua * GetLuaPlugin(lua_State * L)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int tolua_cFile_GetFolderContents(lua_State * tolua_S)
|
||||||
|
{
|
||||||
|
cLuaState LuaState(tolua_S);
|
||||||
|
if (
|
||||||
|
!LuaState.CheckParamUserTable(1, "cFile") ||
|
||||||
|
!LuaState.CheckParamString (2) ||
|
||||||
|
!LuaState.CheckParamEnd (3)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
AString Folder = (AString)tolua_tocppstring(LuaState, 1, 0);
|
||||||
|
|
||||||
|
AStringVector Contents = cFile::GetFolderContents(Folder);
|
||||||
|
LuaState.Push(Contents);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
class Ty1,
|
class Ty1,
|
||||||
class Ty2,
|
class Ty2,
|
||||||
@ -2153,6 +2176,10 @@ void ManualBindings::Bind(lua_State * tolua_S)
|
|||||||
tolua_function(tolua_S, "LOGWARNING", tolua_LOGWARN);
|
tolua_function(tolua_S, "LOGWARNING", tolua_LOGWARN);
|
||||||
tolua_function(tolua_S, "LOGERROR", tolua_LOGERROR);
|
tolua_function(tolua_S, "LOGERROR", tolua_LOGERROR);
|
||||||
|
|
||||||
|
tolua_beginmodule(tolua_S, "cFile");
|
||||||
|
tolua_function(tolua_S, "GetFolderContents", tolua_cFile_GetFolderContents);
|
||||||
|
tolua_endmodule(tolua_S);
|
||||||
|
|
||||||
tolua_beginmodule(tolua_S, "cHopperEntity");
|
tolua_beginmodule(tolua_S, "cHopperEntity");
|
||||||
tolua_function(tolua_S, "GetOutputBlockPos", tolua_cHopperEntity_GetOutputBlockPos);
|
tolua_function(tolua_S, "GetOutputBlockPos", tolua_cHopperEntity_GetOutputBlockPos);
|
||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
|
@ -360,6 +360,66 @@ bool cFile::CreateFolder(const AString & a_FolderPath)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
AStringVector cFile::GetFolderContents(const AString & a_Folder)
|
||||||
|
{
|
||||||
|
AStringVector AllFiles;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
|
||||||
|
// If the folder name doesn't contain the terminating slash / backslash, add it:
|
||||||
|
AString FileFilter = a_Folder;
|
||||||
|
if (
|
||||||
|
!FileFilter.empty() &&
|
||||||
|
(FileFilter[FileFilter.length() - 1] != '\\') &&
|
||||||
|
(FileFilter[FileFilter.length() - 1] != '/')
|
||||||
|
)
|
||||||
|
{
|
||||||
|
FileFilter.push_back('\\');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find all files / folders:
|
||||||
|
FileFilter.append("*.*");
|
||||||
|
HANDLE hFind;
|
||||||
|
WIN32_FIND_DATA FindFileData;
|
||||||
|
if ((hFind = FindFirstFile(FileFilter.c_str(), &FindFileData)) != INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
AllFiles.push_back(FindFileData.cFileName);
|
||||||
|
} while (FindNextFile(hFind, &FindFileData));
|
||||||
|
FindClose(hFind);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // _WIN32
|
||||||
|
|
||||||
|
DIR * dp;
|
||||||
|
struct dirent *dirp;
|
||||||
|
if (*a_Directory == 0)
|
||||||
|
{
|
||||||
|
a_Directory = ".";
|
||||||
|
}
|
||||||
|
if ((dp = opendir(a_Directory)) == NULL)
|
||||||
|
{
|
||||||
|
LOGERROR("Error (%i) opening directory \"%s\"\n", errno, a_Directory );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while ((dirp = readdir(dp)) != NULL)
|
||||||
|
{
|
||||||
|
AllFiles.push_back(dirp->d_name);
|
||||||
|
}
|
||||||
|
closedir(dp);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // else _WIN32
|
||||||
|
|
||||||
|
return AllFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int cFile::Printf(const char * a_Fmt, ...)
|
int cFile::Printf(const char * a_Fmt, ...)
|
||||||
{
|
{
|
||||||
AString buf;
|
AString buf;
|
||||||
|
@ -123,6 +123,9 @@ public:
|
|||||||
|
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
|
/// Returns the list of all items in the specified folder (files, folders, nix pipes, whatever's there).
|
||||||
|
static AStringVector GetFolderContents(const AString & a_Folder); // Exported in ManualBindings.cpp
|
||||||
|
|
||||||
int Printf(const char * a_Fmt, ...);
|
int Printf(const char * a_Fmt, ...);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -86,11 +86,11 @@ bool cPluginLua::Initialize(void)
|
|||||||
lua_setglobal(m_LuaState, "g_Plugin");
|
lua_setglobal(m_LuaState, "g_Plugin");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string PluginPath = FILE_IO_PREFIX + GetLocalDirectory() + "/";
|
std::string PluginPath = FILE_IO_PREFIX + GetLocalFolder() + "/";
|
||||||
|
|
||||||
// Load all files for this plugin, and execute them
|
// Load all files for this plugin, and execute them
|
||||||
AStringList Files = GetDirectoryContents(PluginPath.c_str());
|
AStringVector Files = cFile::GetFolderContents(PluginPath.c_str());
|
||||||
for (AStringList::const_iterator itr = Files.begin(); itr != Files.end(); ++itr)
|
for (AStringVector::const_iterator itr = Files.begin(); itr != Files.end(); ++itr)
|
||||||
{
|
{
|
||||||
if (itr->rfind(".lua") == AString::npos)
|
if (itr->rfind(".lua") == AString::npos)
|
||||||
{
|
{
|
||||||
|
@ -72,8 +72,8 @@ void cPluginManager::FindPlugins(void)
|
|||||||
++itr;
|
++itr;
|
||||||
}
|
}
|
||||||
|
|
||||||
AStringList Files = GetDirectoryContents(PluginsPath.c_str());
|
AStringVector Files = cFile::GetFolderContents(PluginsPath.c_str());
|
||||||
for (AStringList::const_iterator itr = Files.begin(); itr != Files.end(); ++itr)
|
for (AStringVector::const_iterator itr = Files.begin(); itr != Files.end(); ++itr)
|
||||||
{
|
{
|
||||||
if ((*itr == ".") || (*itr == "..") || (!cFile::IsFolder(PluginsPath + *itr)))
|
if ((*itr == ".") || (*itr == "..") || (!cFile::IsFolder(PluginsPath + *itr)))
|
||||||
{
|
{
|
||||||
|
@ -270,55 +270,6 @@ void ReplaceString(AString & iHayStack, const AString & iNeedle, const AString &
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
AStringList GetDirectoryContents(const char * a_Directory)
|
|
||||||
{
|
|
||||||
AStringList AllFiles;
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
|
|
||||||
AString FileFilter = AString(a_Directory) + "*.*";
|
|
||||||
HANDLE hFind;
|
|
||||||
WIN32_FIND_DATA FindFileData;
|
|
||||||
|
|
||||||
if ((hFind = FindFirstFile(FileFilter.c_str(), &FindFileData)) != INVALID_HANDLE_VALUE)
|
|
||||||
{
|
|
||||||
do
|
|
||||||
{
|
|
||||||
AllFiles.push_back(FindFileData.cFileName);
|
|
||||||
} while (FindNextFile(hFind, &FindFileData));
|
|
||||||
FindClose(hFind);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else // _WIN32
|
|
||||||
|
|
||||||
DIR * dp;
|
|
||||||
struct dirent *dirp;
|
|
||||||
if (*a_Directory == 0)
|
|
||||||
{
|
|
||||||
a_Directory = ".";
|
|
||||||
}
|
|
||||||
if ((dp = opendir(a_Directory)) == NULL)
|
|
||||||
{
|
|
||||||
LOGERROR("Error (%i) opening directory \"%s\"\n", errno, a_Directory );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
while ((dirp = readdir(dp)) != NULL)
|
|
||||||
{
|
|
||||||
AllFiles.push_back(dirp->d_name);
|
|
||||||
}
|
|
||||||
closedir(dp);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // else _WIN32
|
|
||||||
|
|
||||||
return AllFiles;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Converts a stream of BE shorts into UTF-8 string; returns a ref to a_UTF8
|
// Converts a stream of BE shorts into UTF-8 string; returns a ref to a_UTF8
|
||||||
AString & RawBEToUTF8(short * a_RawData, int a_NumShorts, AString & a_UTF8)
|
AString & RawBEToUTF8(short * a_RawData, int a_NumShorts, AString & a_UTF8)
|
||||||
{
|
{
|
||||||
|
@ -57,9 +57,6 @@ extern unsigned int RateCompareString(const AString & s1, const AString & s2 );
|
|||||||
/// Replaces *each* occurence of iNeedle in iHayStack with iReplaceWith
|
/// Replaces *each* occurence of iNeedle in iHayStack with iReplaceWith
|
||||||
extern void ReplaceString(AString & iHayStack, const AString & iNeedle, const AString & iReplaceWith); // tolua_export
|
extern void ReplaceString(AString & iHayStack, const AString & iNeedle, const AString & iReplaceWith); // tolua_export
|
||||||
|
|
||||||
/// Returns the list of all items in the specified directory (files, folders, nix pipes, whatever's there)
|
|
||||||
extern AStringList GetDirectoryContents(const char * a_Directory);
|
|
||||||
|
|
||||||
/// Converts a stream of BE shorts into UTF-8 string; returns a ref to a_UTF8
|
/// Converts a stream of BE shorts into UTF-8 string; returns a ref to a_UTF8
|
||||||
extern AString & RawBEToUTF8(short * a_RawData, int a_NumShorts, AString & a_UTF8);
|
extern AString & RawBEToUTF8(short * a_RawData, int a_NumShorts, AString & a_UTF8);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user