You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

445 lines
9.1 KiB
C++

#include "cfilemanager.h"
#include "cconfigfile.h"
#include "cexception.h"
#include "cfilemanager.h"
//#include "GameFile.h"
#include "cresourcefile.h"
cFileManager* cFileManager::m_instance = nullptr;
cFileManager::cFileManager()
{
m_resIndex.load("krondor.rmf");
m_resArchive.open(m_resIndex.getResourceFilename(), false);
}
cFileManager::~cFileManager()
{
// resArchive.Close();
}
cFileManager* cFileManager::getInstance()
{
if(!m_instance)
m_instance = new cFileManager();
return(m_instance);
}
void cFileManager::cleanUp()
{
if(m_instance)
{
delete m_instance;
m_instance = 0;
}
}
cFileBuffer* cFileManager::loadConfig(const QString &name)
{
try
{
cConfigFile cfgfile;
cfgfile.open(name, false);
cFileBuffer *buffer = new cFileBuffer(cfgfile.size());
cfgfile.seek(0);
cfgfile.load(*buffer);
cfgfile.close();
return buffer;
}
catch(cException &e)
{
e.print("FileManager::LoadConfig");
throw;
}
return 0;
}
//void
//FileManager::SaveConfig(const std::string &name, FileBuffer* buffer)
//{
// try
// {
// ConfigFile cfgfile;
// cfgfile.Open(name, true);
// cfgfile.Save(*buffer);
// cfgfile.Close();
// }
// catch (Exception &e)
// {
// e.Print("FileManager::SaveConfig");
// throw;
// }
//}
//void
//FileManager::SaveConfig(const std::string &name, FileBuffer* buffer, const unsigned int n)
//{
// try
// {
// ConfigFile cfgfile;
// cfgfile.Open(name, true);
// cfgfile.Save(*buffer, n);
// cfgfile.Close();
// }
// catch (Exception &e)
// {
// e.Print("FileManager::SaveConfig");
// throw;
// }
//}
//FileBuffer*
//FileManager::LoadGame(const std::string &name)
//{
// try
// {
// GameFile gamfile;
// gamfile.Open(name, false);
// FileBuffer *buffer = new FileBuffer(gamfile.Size());
// gamfile.Seek(0);
// gamfile.Load(*buffer);
// gamfile.Close();
// return buffer;
// }
// catch (Exception &e)
// {
// e.Print("FileManager::LoadGame");
// throw;
// }
// return 0;
//}
//void
//FileManager::SaveGame(const std::string &name, FileBuffer* buffer)
//{
// try
// {
// GameFile gamfile;
// gamfile.Open(name, true);
// gamfile.Save(*buffer);
// gamfile.Close();
// }
// catch (Exception &e)
// {
// e.Print("FileManager::SaveGame");
// throw;
// }
//}
//void
//FileManager::SaveGame(const std::string &name, FileBuffer* buffer, const unsigned int n)
//{
// try
// {
// GameFile gamfile;
// gamfile.Open(name, true);
// gamfile.Save(*buffer, n);
// gamfile.Close();
// }
// catch (Exception &e)
// {
// e.Print("FileManager::SaveGame");
// throw;
// }
//}
cFileBuffer* cFileManager::loadResource(const QString& name)
{
try
{
cResourceFile resfile;
resfile.open(name, false);
cFileBuffer* buffer = new cFileBuffer(resfile.size());
resfile.seek(0);
resfile.load(*buffer);
resfile.close();
return(buffer);
}
catch(cException &e1)
{
cResourceIndexData resIdxData = {0, 0, 0};
if(m_resIndex.find(name, resIdxData) && (resIdxData.m_size != 0))
{
try
{
cFileBuffer* buffer = new cFileBuffer(resIdxData.m_size);
m_resArchive.loadResource(*buffer, resIdxData.m_offset);
return(buffer);
}
catch(cException &e2)
{
e2.print("FileManager::LoadResource");
throw;
}
}
else
throw cFileNotFound(__FILE__, __LINE__, name);
}
return(0);
}
//void
//FileManager::SaveResource(const std::string &name, FileBuffer* buffer)
//{
// try
// {
// ResourceFile resfile;
// resfile.Open(name, true);
// resfile.Save(*buffer);
// resfile.Close();
// }
// catch (Exception &e)
// {
// e.Print("FileManager::SaveResource");
// throw;
// }
//}
//void
//FileManager::SaveResource(const std::string &name, FileBuffer* buffer, const unsigned int n)
//{
// try
// {
// ResourceFile resfile;
// resfile.Open(name, true);
// resfile.Save(*buffer, n);
// resfile.Close();
// }
// catch (Exception &e)
// {
// e.Print("FileManager::SaveResource");
// throw;
// }
//}
//bool
//FileManager::ConfigExists(const std::string &name)
//{
// try
// {
// ConfigFile cfgfile;
// cfgfile.Open(name, false);
// cfgfile.Close();
// return true;
// }
// catch (Exception &e)
// {
// return false;
// }
// return false;
//}
void cFileManager::load(cConfigData* cfg, const QString& name)
{
try
{
cFileBuffer* buffer;
buffer = loadConfig(name);
cfg->load(buffer);
delete buffer;
}
catch(cException &e)
{
e.print("cFileManager::load");
throw;
}
}
//void
//FileManager::Save(ConfigData *cfg, const std::string &name)
//{
// try
// {
// FileBuffer *buffer = new FileBuffer(16);
// unsigned int size = cfg->Save(buffer);
// SaveConfig(name, buffer, size);
// delete buffer;
// }
// catch (Exception &e)
// {
// e.Print("FileManager::Save");
// throw;
// }
//}
//bool
//FileManager::GameExists(const std::string &name)
//{
// try
// {
// GameFile gamfile;
// gamfile.Open(name, false);
// gamfile.Close();
// return true;
// }
// catch (Exception &e)
// {
// return false;
// }
// return false;
//}
//void
//FileManager::Load(GameData *gam, const std::string &name)
//{
// try
// {
// FileBuffer *buffer;
// buffer = LoadGame(name);
// gam->Load(buffer);
// delete buffer;
// }
// catch (Exception &e)
// {
// e.Print("FileManager::Load");
// throw;
// }
//}
//void
//FileManager::Save(GameData *gam, const std::string &name)
//{
// try
// {
// FileBuffer *buffer = new FileBuffer(400000);
// unsigned int size = gam->Save(buffer);
// SaveGame(name, buffer, size);
// delete buffer;
// }
// catch (Exception &e)
// {
// e.Print("FileManager::Save");
// throw;
// }
//}
//bool
//FileManager::ResourceExists(const std::string &name)
//{
// try
// {
// ResourceFile resfile;
// resfile.Open(name, false);
// resfile.Close();
// return true;
// }
// catch (Exception &e1)
// {
// ResourceIndexData resIdxData = {0, 0, 0};
// return (resIndex.Find(name, resIdxData) && (resIdxData.size != 0));
// }
// return false;
//}
void cFileManager::load(cResourceData *res, const QString& name)
{
try
{
cFileBuffer *buffer;
buffer = loadResource(name);
res->load(buffer);
delete buffer;
}
catch (cException &e)
{
e.print("FileManager::Load");
throw;
}
}
//void
//FileManager::Save(ResourceData *res, const std::string &name)
//{
// try
// {
// FileBuffer *buffer = new FileBuffer(0x20000);
// unsigned int size = res->Save(buffer);
// SaveResource(name, buffer, size);
// delete buffer;
// }
// catch (Exception &e)
// {
// e.Print("FileManager::Save");
// throw;
// }
//}
//void
//FileManager::ExtractResource(const std::string &name)
//{
// try
// {
// FileBuffer *buffer;
// buffer = LoadResource(name);
// SaveResource(name, buffer);
// delete buffer;
// }
// catch (Exception &e)
// {
// e.Print("FileManager::ExtractResource");
// throw;
// }
//}
//void
//FileManager::ExtractAllResources()
//{
// try
// {
// std::string resName;
// ResourceIndexData resIdxData = {0, 0, 0};
// if (resIndex.GetFirst(resName, resIdxData))
// {
// do
// {
// FileBuffer *buffer = new FileBuffer(resIdxData.size);
// resArchive.LoadResource(*buffer, resIdxData.offset);
// SaveResource(resName, buffer);
// delete buffer;
// }
// while (resIndex.GetNext(resName, resIdxData));
// }
// }
// catch (Exception &e)
// {
// e.Print("FileManager::ExtractAllResources");
// throw;
// }
//}
//void
//FileManager::ArchiveAllResources()
//{
// try
// {
// std::string resName;
// ResourceIndexData resIdxData = {0, 0, 0};
// FileBuffer *archiveBuffer = new FileBuffer(0x1000000);
// if (resIndex.GetFirst(resName, resIdxData))
// {
// do
// {
// FileBuffer *buffer = new FileBuffer(resIdxData.size);
// resArchive.LoadResource(*buffer, resIdxData.offset);
// archiveBuffer->PutString(resName, RES_FILENAME_LEN);
// archiveBuffer->PutUint32LE(resIdxData.size);
// archiveBuffer->CopyFrom(buffer, resIdxData.size);
// delete buffer;
// }
// while (resIndex.GetNext(resName, resIdxData));
// }
// SaveResource(resIndex.GetResourceFilename(), archiveBuffer, archiveBuffer->GetBytesDone());
// resIndex.Save("krondor.rmf");
// delete archiveBuffer;
// }
// catch (Exception &e)
// {
// e.Print("FileManager::ArchiveAllResources");
// throw;
// }
//}