FS/FS_HomeHelper.C
#include <fstream.h>
#include <UT/UT_DSOVersion.h>
#include <UT/UT_EnvControl.h>
#include <UT/UT_NTStreamUtil.h>
#include <UT/UT_DirUtil.h>
#include <UT/UT_SysClone.h>
#include "FS_HomeHelper.h"
#define HOME_SIGNATURE "home:"
#define HOME_SIGNATURE_LEN 5
void
installFSHelpers()
{
new HDK_Sample::FS_HomeReadHelper();
new HDK_Sample::FS_HomeWriteHelper();
new HDK_Sample::FS_HomeInfoHelper();
}
using namespace HDK_Sample;
static bool
prefixPathWithHome(UT_String &destpath, const char *srcpath)
{
if( strncmp(srcpath, HOME_SIGNATURE, HOME_SIGNATURE_LEN) == 0 )
{
destpath = UT_EnvControl::getString(ENV_HOME);
if( srcpath[HOME_SIGNATURE_LEN] != '/' )
destpath += "/";
destpath += &srcpath[HOME_SIGNATURE_LEN];
return true;
}
return false;
}
FS_HomeReadHelper::FS_HomeReadHelper()
{
UTaddAbsolutePathPrefix(HOME_SIGNATURE);
}
FS_HomeReadHelper::~FS_HomeReadHelper()
{
}
FS_ReaderStream *
FS_HomeReadHelper::createStream(const char *source)
{
FS_ReaderStream *is = 0;
UT_String homepath;
if( prefixPathWithHome(homepath, source) )
is = new FS_ReaderStream(homepath);
return is;
}
FS_HomeWriteHelper::FS_HomeWriteHelper()
{
UTaddAbsolutePathPrefix(HOME_SIGNATURE);
}
FS_HomeWriteHelper::~FS_HomeWriteHelper()
{
}
FS_WriterStream *
FS_HomeWriteHelper::createStream(const char *source)
{
FS_WriterStream *os = 0;
UT_String homepath;
if( prefixPathWithHome(homepath, source) )
os = new FS_WriterStream(homepath);
return os;
}
FS_HomeInfoHelper::FS_HomeInfoHelper()
{
UTaddAbsolutePathPrefix(HOME_SIGNATURE);
}
FS_HomeInfoHelper::~FS_HomeInfoHelper()
{
}
bool
FS_HomeInfoHelper::canHandle(const char *source)
{
return (strncmp(source, HOME_SIGNATURE, HOME_SIGNATURE_LEN) == 0);
}
bool
FS_HomeInfoHelper::hasAccess(const char *source, int mode)
{
UT_String homepath;
if( prefixPathWithHome(homepath, source) )
{
FS_Info info(homepath);
return info.hasAccess(mode);
}
return false;
}
bool
FS_HomeInfoHelper::getIsDirectory(const char *source)
{
UT_String homepath;
if( prefixPathWithHome(homepath, source) )
{
FS_Info info(homepath);
return info.getIsDirectory();
}
return false;
}
int
FS_HomeInfoHelper::getModTime(const char *source)
{
UT_String homepath;
if( prefixPathWithHome(homepath, source) )
{
FS_Info info(homepath);
return info.getModTime();
}
return 0;
}
int64
FS_HomeInfoHelper::getSize(const char *source)
{
UT_String homepath;
if( prefixPathWithHome(homepath, source) )
{
FS_Info info(homepath);
return info.getFileDataSize();
}
return 0;
}
bool
FS_HomeInfoHelper::getContents(const char *source,
UT_StringArray &contents,
UT_StringArray *dirs)
{
UT_String homepath;
if( prefixPathWithHome(homepath, source) )
{
FS_Info info(homepath);
return info.getContents(contents, dirs);
}
return false;
}