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
|
/*!
@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) const
{
std::string filepath = getDataPath(_name);
if (filepath.empty())
return nullptr;
auto stream = std::make_unique<std::ifstream>();
stream->open(filepath.c_str(), std::ios_base::binary);
if (!stream->is_open())
return nullptr;
DataFileStream* data = new DataFileStream(std::move(stream));
return data;
}
void ExportDataManager::freeData(IDataStream* _data)
{
delete _data;
}
bool ExportDataManager::isDataExist(const std::string& _name) const
{
const VectorString& files = getDataListNames(_name);
return !files.empty();
}
const VectorString& ExportDataManager::getDataListNames(const std::string& _pattern) const
{
static VectorString result;
common::VectorWString wresult;
result.clear();
for (const auto& path : mPaths)
{
common::scanFolder(wresult, path.name, path.recursive, MyGUI::UString(_pattern).asWStr(), false);
}
for (const auto& file : wresult)
{
result.push_back(MyGUI::UString(file).asUTF8());
}
return result;
}
std::string ExportDataManager::getDataPath(const std::string& _name) const
{
VectorString result;
common::VectorWString wresult;
for (const auto& path : mPaths)
{
common::scanFolder(wresult, path.name, path.recursive, MyGUI::UString(_name).asWStr(), true);
}
for (const auto& file : wresult)
{
result.push_back(MyGUI::UString(file).asUTF8());
}
if (!result.empty())
{
const std::string& 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 candidates are:");
for (size_t index = 1; index < result.size(); index ++)
MYGUI_PLATFORM_LOG(Warning, " - '" << result[index] << "'");
}
return path;
}
return {};
}
void ExportDataManager::addResourceLocation(const std::string& _path, bool _recursive)
{
ArhivInfo info;
info.name = MyGUI::UString(_path).asWStr();
info.recursive = _recursive;
mPaths.push_back(info);
}
}
|