Subversion Repositories spk

Rev

Rev 224 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "../StdAfx.h"
#include "AddDialog.h"

namespace SpkExplorer {
        void AddDialog::AddFile(System::String ^file, System::String ^dir, int type, int game)
        {
                SAddFile *af = new SAddFile;
                af->sFile = _WS(file);
                if ( dir && dir->Length )
                        af->sDir = _WS(dir);
                af->iType = type;
                af->iGame = game;
                m_lFiles->push_back(af);

                if ( type == FILETYPE_MOD && !m_bRemove )
                {
                        if ( !IO::FileInfo(file).Extension->CompareTo(".cat") )
                        {
                                String ^datFile = IO::Path::GetDirectoryName(file) + "\\" + IO::Path::GetFileNameWithoutExtension(file) + ".dat";
                                if ( IO::File::Exists(datFile) )
                                {
                                        SAddFile *af = new SAddFile;
                                        af->sFile = _WS(datFile);
                                        if ( dir && dir->Length )
                                                af->sDir = _WS(dir);
                                        af->iType = type;
                                        af->iGame = game;
                                        m_lFiles->push_back(af);
                                }
                        }
                }
        }
        void AddDialog::AddFileList(ArrayList ^list, System::String ^dir, int type, int game)
        {
                for ( int i = 0; i < list->Count; i++ )
                        this->AddFile(cli::safe_cast<System::String ^>(list[i]), dir, type, game);
        }
        void AddDialog::AddFileArray(cli::array<System::String ^> ^list, System::String ^dir, int type, int game)
        {
                for ( int i = 0; i < list->Length; i++ )
                        this->AddFile(list[i], dir, type, game);
        }

        void AddDialog::Background_Finished(System::Object ^Sender, RunWorkerCompletedEventArgs ^E)
        {
                switch ( m_iStatus )
                {
                        case ADDSTATUS_READ:
                                if ( m_bRemove )
                                        m_iStatus = ADDSTATUS_REMOVE;
                                else
                                        m_iStatus = ADDSTATUS_ADD;
                                m_lFiles->First();
                                this->LabFile->Text = _US(m_lFiles->CurrentData()->sFile);
                                this->progressBar1->Maximum = m_lFiles->size();
                                this->progressBar1->Value = 0;
                                this->backgroundWorker1->RunWorkerAsync();
                                break;

                        case ADDSTATUS_ADD:
                        case ADDSTATUS_REMOVE:
                                if ( !m_lFiles->Next() )
                                        m_iStatus = ADDSTATUS_SAVE;
                                else
                                {
                                        ++this->progressBar1->Value;
                                        this->LabFile->Text = _US(m_lFiles->CurrentData()->sFile);
                                }
                                this->backgroundWorker1->RunWorkerAsync();
                                break;

                        case ADDSTATUS_SAVE:
                                this->Close();
                                break;
                }
        }

        void AddDialog::Background_DoWork(System::Object ^Sender, DoWorkEventArgs ^E)
        {
                System::Threading::Thread::Sleep(5);
                switch ( m_iStatus )
                {
                        case ADDSTATUS_READ:
                                if ( m_pMultiPackage )
                                        m_pMultiPackage->readAllPackages(SPKREAD_ALL);
                                else if ( m_pPackage )
                                        m_pPackage->ReadAllFilesToMemory();
                                break;

                        case ADDSTATUS_ADD:
                                if ( m_lFiles->CurrentData()->iType < 0 && m_pMultiPackage ) // package
                                        m_pMultiPackage->addFileNow(m_lFiles->CurrentData()->sFile, (m_lFiles->CurrentData()->iType == -1) ? true : false);
                                else if ( m_pPackage && m_lFiles->CurrentData()->iType >= 0 )
                                {
                                        m_pPackage->addFileNow(m_lFiles->CurrentData()->sFile, m_lFiles->CurrentData()->sDir, static_cast<FileType>(m_lFiles->CurrentData()->iType));
                                        if ( m_pMultiPackage )
                                                m_bUpdatedPackage = true;
                                }
                                break;

                        case ADDSTATUS_REMOVE:
                                if ( m_lFiles->CurrentData()->iType < 0 && m_pMultiPackage ) // package
                                        m_pMultiPackage->removeFile(m_lFiles->CurrentData()->sFile);
                                else if ( m_pPackage && m_lFiles->CurrentData()->iType >= 0 )
                                {
                                        m_pPackage->removeFile(m_lFiles->CurrentData()->sFile, static_cast<FileType>(m_lFiles->CurrentData()->iType), m_lFiles->CurrentData()->sDir, m_lFiles->CurrentData()->iGame);
                                        if ( m_pMultiPackage )
                                                m_bUpdatedPackage = true;
                                }
                                break;

                        case ADDSTATUS_SAVE:
                                if ( m_pMultiPackage )
                                {
                                        if ( m_bUpdatedPackage && m_pPackage )
                                                m_pMultiPackage->UpdatedPackage(m_pPackage);
                                        m_pMultiPackage->writeFile(m_pMultiPackage->filename());
                                }
                                else if ( m_pPackage )
                                        m_pPackage->writeFile(m_pPackage->filename());
                                break;
                }
        }
};