Subversion Repositories spk

Rev

Rev 1 | Rev 58 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#pragma once

#include "CyString.h"
#include "File.h"
#include "TextDB.h"

#include <map>

class CBaseFile;
class CXspFile;

namespace SPK {

tclass CVirtualFileSystem
{
public:
        typedef std::map<std::string, std::string> FileList;
        typedef std::map<std::string, std::string>::iterator FileListItr;

private:
        Utils::String   m_sAddon;
        Utils::String   m_sDir;
        bool            m_bLoaded;

        FileList *m_pModMap;
        FileList *m_pMap;

        CTextDB  *m_pTexts;
        CTextDB  *m_pModTexts;

        int m_iLang;

public:
        CVirtualFileSystem(void);
        ~CVirtualFileSystem(void);

        void SetAddon(const Utils::String &addon) { m_sAddon = addon; }

        void extractTexts(CXspFile *pPackage, int textId);
        C_File *extractGameFileToPackage(CBaseFile *pPackage, const Utils::String &sFile, FileType iFileType, const Utils::String &sTo);
        C_File *extractGameFileToPackage(CBaseFile *pPackage, const Utils::String &sFile, FileType iFileType);
        bool ExtractGameFile(const Utils::String &file, const Utils::String &to);
        bool LoadFilesystem(const Utils::String &dir, int maxPatch = 0);
        bool LoadFilesystem(const Utils::String &dir, const Utils::String &mod, int maxPatch = 0);
        bool loadMod(const Utils::String &mod);
        bool addMod(const Utils::String &mod);
        Utils::String findFile(const Utils::String &file);

        CyStringList *GetTShipsEntries();
        Utils::String getTShipsEntry(const Utils::String &sId);

        void updateModTexts(int iPage);
        void updateModTexts(int iFromPage, int iToPage);
        void updateTexts(int iPage);
        void updateTexts(int iFromPage, int iToPage);

        Utils::String findText(int iLang, int iPage, int iID) const;
        bool textExists(int iLang, int iPage, int iID) const;

        void clearMods();
        bool loadShipData(CyStringList *list);
        void setLanguage(int iLang);

private:
        void _updateTexts(int iFromPage, int iToPage, FileList *pFileList, CTextDB *pTextList);
        Utils::String _convertExtension(const Utils::String &sFile);
        void _clear();
};

}