Subversion Repositories spk

Rev

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

#ifndef __MUTLISPKFILE_H__
#define __MUTLISPKFILE_H__

#include "SpkFile.h"

typedef struct SPKEXPORT SMultiSpkFile
{
        SMultiSpkFile() { iType = 0; bRemove = false; sData = 0; lSize = 0; }
        CyString        sName;
        char   *sData;
        long    lSize;
        bool    bOn;
        CyString  sScriptName;
        CyString  sScriptVersion;
        CyString  sScriptAuthor;
        CBaseFile *pFile;
        int             iType;
        int             iPos;
        bool    bRemove;
} SMultiSpkFile;

typedef struct SPKEXPORT SMultiHeader
{
        float   fVersion;
        int             iCompression;
        long    lUncomprLen;
        long    lComprLen;
        bool    bSelection;
} SMultiHeader;

class SPKEXPORT CMultiSpkFile
{
public:
        CMultiSpkFile () 
        {
                m_bChanged = false;
        }
        ~CMultiSpkFile ();

        SMultiSpkFile *AddFileEntry ( CyString filename );
        bool AddFile ( SMultiSpkFile *file );
        bool AddFile ( CyString file, bool on = true );
        bool AddFileNow ( CyString, bool = true );
        bool RemoveFile ( int id );
        bool RemoveFile ( SMultiSpkFile *ms );
        bool RemoveFile ( CyString file );
        bool MarkRemoveFile ( int id );
        bool MarkRemoveFile ( SMultiSpkFile *ms );
        bool MarkRemoveFile ( CyString file );
        void MarkRemoveAll();

        void ClearFiles ();
        void CreatePackage(SMultiSpkFile *p);

        bool ReadFile ( CyString, bool = true );
        bool ParseHeader ( CyString header );
        bool ParseValueLine ( CyString line );
        void ReadValues ( CyString values );

        bool ReadAllFilesToMemory (CProgressInfo *progress = NULL);
        bool ReadFileToMemory ( SMultiSpkFile *ms );
        bool ReadAllPackages ( CyString filename, int type = SPKREAD_NODATA, CLinkList<CBaseFile> *addToList = NULL ) { m_sFilename = filename; return ReadAllPackages ( type, addToList ); }
        bool ReadAllPackages ( int type = SPKREAD_NODATA, CLinkList<CBaseFile> *addToList = NULL );
        bool ReadSpk ( SMultiSpkFile *ms, int type = SPKREAD_NODATA );

        SMultiSpkFile *FindFile ( CyString name );

        bool ExtractAll ( CyString dir );
        bool ExtractData ( SMultiSpkFile *ms );
        bool ExtractFile ( SMultiSpkFile *ms, CyString dir );
        bool ExtractFile ( const CyString &filename, CyString dir );
        bool SplitMulti ( CyString filename, CyString destdir );
        
        bool WriteFile ( CyString, CProgressInfo *progress = NULL );
        CyString CreateData ();

        void SetName ( CyString n ) { m_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; }

        CyString GetName () { return m_sName; }
        unsigned int GetNumFiles () { return m_lFiles.size(); }
        unsigned long GetFileSize();
        unsigned int GetAvailableFiles();
        CLinkList<SMultiSpkFile> *GetFileList () { return &m_lFiles; }
        bool IsSelection () { return m_SHeader.bSelection; }

        void SetFilename(CyString s) { m_sFilename = s; }
        CyString GetFilename() { return m_sFilename; }

        void UpdatedPackage(CBaseFile *p);
        SMultiSpkFile *FindPackage(CBaseFile *p);
        SMultiSpkFile *FindPackage(CyString name, CyString author);
        void RemovePackages();

        void SetChanged(bool b) { m_bChanged = b; }
        bool IsChanged() { return m_bChanged; }

private:
        CLinkList<SMultiSpkFile> m_lFiles;
        CyString m_sName, m_sFilename;

        SMultiHeader m_SHeader;
        bool            m_bChanged;
};

#endif //__MUTLISPKFILE_H__