Rev 197 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#ifndef __MUTLISPKFILE_H__
#define __MUTLISPKFILE_H__
#include "SpkFile.h"
typedef struct SPKEXPORT SMultiSpkFile
{
SMultiSpkFile() : bOn(false), iPos(0), pFile(nullptr) { iType = 0; bRemove = false; sData = 0; lSize = 0; }
Utils::WString sName;
char *sData;
long lSize;
bool bOn;
Utils::WString sScriptName;
Utils::WString sScriptVersion;
Utils::WString sScriptAuthor;
CBaseFile *pFile;
int iType;
int iPos;
bool bRemove;
} SMultiSpkFile;
typedef struct SPKEXPORT SMultiHeader
{
SMultiHeader() : fVersion(0.0f), iCompression(0), lUncomprLen(0), lComprLen(0), bSelection(false) { }
float fVersion;
int iCompression;
long lUncomprLen;
long lComprLen;
bool bSelection;
} SMultiHeader;
class SPKEXPORT CMultiSpkFile
{
public:
CMultiSpkFile ()
{
m_bChanged = false;
}
~CMultiSpkFile ();
SMultiSpkFile *addFileEntry(const Utils::WString &filename);
bool addFile(SMultiSpkFile *file);
bool addFile(const Utils::WString &file, bool on = true);
bool addFileNow(const Utils::WString &file, bool = true );
bool removeFile ( int id );
bool removeFile(const SMultiSpkFile *ms);
bool removeFile(const Utils::WString &file);
bool markRemoveFile ( int id );
bool markRemoveFile ( SMultiSpkFile *ms );
bool markRemoveFile(const Utils::WString &file);
void markRemoveAll();
void ClearFiles ();
void CreatePackage(SMultiSpkFile *p);
bool readFile(const Utils::WString &filename, bool = true );
bool ReadAllFilesToMemory (CProgressInfo *progress = NULL);
bool ReadFileToMemory ( SMultiSpkFile *ms );
bool readAllPackages(const Utils::WString &filename, int type = SPKREAD_NODATA, CLinkList<CBaseFile> *addToList = NULL ) { _sFilename = filename; return readAllPackages(type, addToList); }
bool readAllPackages(int type = SPKREAD_NODATA, CLinkList<CBaseFile> *addToList = NULL );
bool ReadSpk ( SMultiSpkFile *ms, int type = SPKREAD_NODATA );
const SMultiSpkFile *findFile (const Utils::WString &name) const;
bool extractAll(const Utils::WString &dir);
bool extractData(SMultiSpkFile *ms);
bool extractFile(const SMultiSpkFile *ms, const Utils::WString &dir);
bool extractFile(const Utils::WString &filename, const Utils::WString &dir);
bool splitMulti(const Utils::WString &filename, const Utils::WString &destdir);
bool writeFile(const Utils::WString &filename, CProgressInfo *progress = NULL);
void setName(const Utils::WString &n) { _sName = n; m_bChanged = true; }
void setSelection ( bool on ) { m_SHeader.bSelection = on; m_bChanged = true; }
void setCompression ( int c ) { m_SHeader.iCompression = c; m_bChanged = true; }
void setFilename(const Utils::WString &s) { _sFilename = s; }
void setChanged(bool b) { m_bChanged = b; }
const Utils::WString name() const { return _sName; }
const Utils::WString& filename() const { return _sFilename; }
bool isSelection() const { return m_SHeader.bSelection; }
bool isChanged() const { return m_bChanged; }
size_t numFiles() const { return m_lFiles.size(); }
unsigned long GetFileSize();
unsigned int GetAvailableFiles();
CLinkList<SMultiSpkFile> *GetFileList () { return &m_lFiles; }
void UpdatedPackage(CBaseFile *p);
SMultiSpkFile *findPackage(CBaseFile *p);
SMultiSpkFile *findPackage(const Utils::WString &name, const Utils::WString &author);
void RemovePackages();
protected:
Utils::WString _createData() const;
bool _parseHeader(const Utils::WString &header);
bool _parseValueLine(const Utils::WString &line);
void _readValues(const Utils::WString &values);
private:
CLinkList<SMultiSpkFile> m_lFiles;
Utils::WString _sName, _sFilename;
SMultiHeader m_SHeader;
bool m_bChanged;
};
#endif //__MUTLISPKFILE_H__