1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
/*!
@file
@author Albert Semenov
@date 08/2012
*/
#include "MyGUI_ExportDataManager.h"
#include "MyGUI_ExportDiagnostic.h"
#include "MyGUI_DataFileStream.h"
#include "FileSystemInfo/FileSystemInfo.h"
namespace MyGUI
{
ExportDataManager& ExportDataManager::getInstance()
{
return *getInstancePtr();
}
ExportDataManager* ExportDataManager::getInstancePtr()
{
return static_cast<ExportDataManager*>(DataManager::getInstancePtr());
}
ExportDataManager::ExportDataManager()
{
}
void ExportDataManager::initialise()
{
MYGUI_PLATFORM_LOG(Info, "* Initialise: " << getClassTypeName());
MYGUI_PLATFORM_LOG(Info, getClassTypeName() << " successfully initialized");
}
void ExportDataManager::shutdown()
{
MYGUI_PLATFORM_LOG(Info, "* Shutdown: " << getClassTypeName());
MYGUI_PLATFORM_LOG(Info, getClassTypeName() << " successfully shutdown");
}
IDataStream* ExportDataManager::getData(const std::string& _name)
{
std::string filepath = getDataPath(_name);
if (filepath.empty())
return nullptr;
std::ifstream* stream = new std::ifstream();
stream->open(filepath.c_str(), std::ios_base::binary);
if (!stream->is_open())
{
delete stream;
return nullptr;
}
DataFileStream* data = new DataFileStream(stream);
return data;
}
void ExportDataManager::freeData(IDataStream* _data)
{
delete _data;
}
bool ExportDataManager::isDataExist(const std::string& _name)
{
const VectorString& files = getDataListNames(_name);
return !files.empty();
}
const VectorString& ExportDataManager::getDataListNames(const std::string& _pattern)
{
static VectorString result;
common::VectorWString wresult;
result.clear();
for (VectorArhivInfo::const_iterator item = mPaths.begin(); item != mPaths.end(); ++item)
{
common::scanFolder(wresult, (*item).name, (*item).recursive, MyGUI::UString(_pattern).asWStr(), false);
}
for (common::VectorWString::const_iterator item = wresult.begin(); item != wresult.end(); ++item)
{
result.push_back(MyGUI::UString(*item).asUTF8());
}
return result;
}
const std::string& ExportDataManager::getDataPath(const std::string& _name)
{
static std::string path;
VectorString result;
common::VectorWString wresult;
for (VectorArhivInfo::const_iterator item = mPaths.begin(); item != mPaths.end(); ++item)
{
common::scanFolder(wresult, (*item).name, (*item).recursive, MyGUI::UString(_name).asWStr(), true);
}
for (common::VectorWString::const_iterator item = wresult.begin(); item != wresult.end(); ++item)
{
result.push_back(MyGUI::UString(*item).asUTF8());
}
if (!result.empty())
{
path = result[0];
if (result.size() > 1)
{
MYGUI_PLATFORM_LOG(Warning, "There are several files with name '" << _name << "'. '" << path << "' was used.");
MYGUI_PLATFORM_LOG(Warning, "Other candidater are:");
for (size_t index = 1; index < result.size(); index ++)
MYGUI_PLATFORM_LOG(Warning, " - '" << result[index] << "'");
}
}
return path;
}
void ExportDataManager::addResourceLocation(const std::string& _path, bool _recursive)
{
ArhivInfo info;
info.name = MyGUI::UString(_path).asWStr();
info.recursive = _recursive;
mPaths.push_back(info);
}
}
|