Rev 197 | Go to most recent revision | 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 = CyStringFromSystemString(file);
if ( dir && dir->Length )
af->sDir = CyStringFromSystemString(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 = CyStringFromSystemString(datFile);
if ( dir && dir->Length )
af->sDir = CyStringFromSystemString(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.ToString());
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.ToString());
}
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.ToString(), (m_lFiles->CurrentData()->iType == -1) ? true : false);
else if ( m_pPackage && m_lFiles->CurrentData()->iType >= 0 )
{
m_pPackage->addFileNow(m_lFiles->CurrentData()->sFile.ToString(), m_lFiles->CurrentData()->sDir.ToString(), 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.ToString());
else if ( m_pPackage && m_lFiles->CurrentData()->iType >= 0 )
{
m_pPackage->removeFile(m_lFiles->CurrentData()->sFile.ToString(), static_cast<FileType>(m_lFiles->CurrentData()->iType), m_lFiles->CurrentData()->sDir.ToString(), 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;
}
}
};