openmw-tes3coop/vfs/servers/ogre_vfs.cpp

61 lines
1.5 KiB
C++
Raw Normal View History

2009-12-26 11:13:31 +00:00
#include "ogre_vfs.h"
#include "../../stream/servers/ogre_datastream.h"
2009-12-26 11:13:31 +00:00
using namespace Mangle::VFS;
OgreVFS::OgreVFS(const std::string &_group)
: group(_group)
{
hasList = true;
hasFind = true;
isCaseSensitive = true;
// Get the group manager once
gm = Ogre::ResourceGroupManager::getSingletonPtr();
// Use the default group if none was specified
if(group.empty())
group = gm->getWorldResourceGroupName();
}
Mangle::Stream::StreamPtr OgreVFS::open(const std::string &name)
2009-12-26 11:13:31 +00:00
{
Ogre::DataStreamPtr data = gm->openResource(name, group);
return Strea::StreamPtr(new Stream::OgreStream(data));
2009-12-26 11:13:31 +00:00
}
static void fill(FileInfoList &out, Ogre::FileInfoList &in, bool dirs)
{
int size = in.size();
out.resize(size);
for(int i=0; i<size; i++)
{
out[i].name = in[i].filename;
out[i].basename = in[i].basename;
out[i].size = in[i].uncompressedSize;
out[i].isDir = dirs;
out[i].time = 0;
}
}
FileInfoList OgreVFS::list(const std::string& dir,
bool recurse,
bool dirs) const
{
Ogre::FileInfoListPtr olist = gm->listResourceFileInfo(group, dirs);
FileInfoListPtr res(new FileInfoList);
fill(*res, *olist, dirs);
2009-12-26 11:13:31 +00:00
return res;
}
FileInfoList OgreVFS::find(const std::string& pattern,
bool recursive,
bool dirs) const
{
Ogre::FileInfoListPtr olist = gm->findResourceFileInfo(group, pattern, dirs);
FileInfoListPtr res(new FileInfoList);
fill(*res, *olist, dirs);
2009-12-26 11:13:31 +00:00
return res;
}